Alter eines Verzeichnisses auslesen
Guten Morgen zusammen
seit längerem beschäftigt mich eine klitzekleine Aufgabe, die jetzt aber so langsam richtig nervig und auch dringend wird.
Ich sollte ein Skript schreiben ((Batch, VB, ...) eben irgendwas, dass per geplanten Task aufgerufen werden kann) welches das Alter eines Verzeichnisses ausliest. Es geht also nicht um eine simple Datei, welche per Wasfile.exe abgeprüft werden könnte, sondern um ein Verzeichnis.
Damit das ganze etwas verständlicher wird hier eine kurze Erläuterung:
Unser DMS (Dokumentmanagementsystem) legt auf dem "Scan-PC" für jeden gescannten Stapel an Belegen einen Ordner mit Datum und Uhrzeit an (Beispiel: ORDNER_Datum_Uhrzeit). Von diesem PC läuft dann die Weiterverarbeitung auf den Server ... sollte jetzt eines dieser angelegten Verzeichnisse älter als 4 Stunden werden, soll eine Mail (per Sendmail.exe) verschickt werden.
Mit einer Datei wäre das alles recht simpel ... abe rin diesem Fall komm ich überhaupt nicht mit den sich ändernden Verzeichnisnamen zurecht udn weiß auch nicht wie ich das Alter eines Verzeichnisses überprüfen kann Könnte mir da viell. jemand weiterhelfen? Wäre echt super
Viele Grüße
Alex
[Edit Biber] Habe bastlas letztem Kommentar nichts hinzufügen.
Bzw. hätte es nie so freundlich formulieren können.
(Habe einen Tag früher schon meine getippte Antwort unabgesendet entsorgt.)
Ich setze den Thread auf "Gelöst" und "Geschlossen" und harre der Beiträge, die noch kommen werden.
[/Edit]
seit längerem beschäftigt mich eine klitzekleine Aufgabe, die jetzt aber so langsam richtig nervig und auch dringend wird.
Ich sollte ein Skript schreiben ((Batch, VB, ...) eben irgendwas, dass per geplanten Task aufgerufen werden kann) welches das Alter eines Verzeichnisses ausliest. Es geht also nicht um eine simple Datei, welche per Wasfile.exe abgeprüft werden könnte, sondern um ein Verzeichnis.
Damit das ganze etwas verständlicher wird hier eine kurze Erläuterung:
Unser DMS (Dokumentmanagementsystem) legt auf dem "Scan-PC" für jeden gescannten Stapel an Belegen einen Ordner mit Datum und Uhrzeit an (Beispiel: ORDNER_Datum_Uhrzeit). Von diesem PC läuft dann die Weiterverarbeitung auf den Server ... sollte jetzt eines dieser angelegten Verzeichnisse älter als 4 Stunden werden, soll eine Mail (per Sendmail.exe) verschickt werden.
Mit einer Datei wäre das alles recht simpel ... abe rin diesem Fall komm ich überhaupt nicht mit den sich ändernden Verzeichnisnamen zurecht udn weiß auch nicht wie ich das Alter eines Verzeichnisses überprüfen kann Könnte mir da viell. jemand weiterhelfen? Wäre echt super
Viele Grüße
Alex
[Edit Biber] Habe bastlas letztem Kommentar nichts hinzufügen.
Bzw. hätte es nie so freundlich formulieren können.
(Habe einen Tag früher schon meine getippte Antwort unabgesendet entsorgt.)
Ich setze den Thread auf "Gelöst" und "Geschlossen" und harre der Beiträge, die noch kommen werden.
[/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 90245
Url: https://administrator.de/contentid/90245
Ausgedruckt am: 20.11.2024 um 03:11 Uhr
9 Kommentare
Neuester Kommentar
Moin BinderAlex,
wenn du es mit reinen Batchmitteln machen willst, wären die Ansätze in etwa so:
[Beispiel am CMD-Prompt. 619 = 10 Stunden * 60 Minuten + 19 Minuten =10:19h]
--> hier wird das "creationDate" eines Verzeichnisses namens "vonheute" mit der Uhrzeit 9:34 angezeigt.
Eigentlich brauchst Du dann nur noch die beiden "Zeiten seit Mitternacht in Minuten" zu vergleichen und dann aktiv zu werden, wenn die Differenz größer als 240 (4 Stunden a 60 Minuten) ist.
Grüße
Biber
[Edit 23.06.2008] ...und ich sach' noch: mach das mit einem Batch-Oneliner.
Aber nein... mit VBS isses ja auch "schnell gemacht".. *kopfschüttel* [/Edit]
wenn du es mit reinen Batchmitteln machen willst, wären die Ansätze in etwa so:
- vom aktuellen Datum die Minuten seit Mitternacht ermitteln
>for /f "tokens=1,2 delims=: " %i in ('time /t') do @set /a 60*(1%i-100) +(1%j)-100
619
- das Alter eines Verzeichnisse "von heute" ermitteln
>for /f "tokens=2,3 delims=: " %i in ('dir /ad /tc^|findstr /b "%date%"') do @set /a 60*(1%i-100) +(1%j)-100
574
Eigentlich brauchst Du dann nur noch die beiden "Zeiten seit Mitternacht in Minuten" zu vergleichen und dann aktiv zu werden, wenn die Differenz größer als 240 (4 Stunden a 60 Minuten) ist.
Grüße
Biber
[Edit 23.06.2008] ...und ich sach' noch: mach das mit einem Batch-Oneliner.
Aber nein... mit VBS isses ja auch "schnell gemacht".. *kopfschüttel* [/Edit]
Hallo BinderAlex!
Alternativ bzw ergänzend zu Bibers Vorschlag eine Batch-Variante mit Verwendung eines temporären VBScripts zur Ermittlung der Zeitdifferenz (damit wird, was aber vermutlich ohnehin nicht nötig sein dürfte, auch ein Tagwechsel berücksichtigt - ein um 22:20 durchgeführter Scan "veraltet" um 2:20 des nächsten Tages) und einer Schleife, um alle vorhandenen Unterordner des anzugebenden Basisordners zu überprüfen:
Wie bei Biber erfolgt auch hier die Zeitangabe in Minuten.
Die "Entstehungsdaten" (Datum und Uhrzeit) werden (auf Basis Deiner allgemeinen Beschreibung) dem Ordnernamen entnommen, es kann aber natürlich auch das "Erstellungsdatum" ("creationDate" - siehe oben) eingesetzt werden. Dazu wäre die Zeile 12 zu ändern auf:
Grüße
bastla
[Edit] Umleitung der Ausgabe in Zeile 6 ergänzt. [/Edit]
Alternativ bzw ergänzend zu Bibers Vorschlag eine Batch-Variante mit Verwendung eines temporären VBScripts zur Ermittlung der Zeitdifferenz (damit wird, was aber vermutlich ohnehin nicht nötig sein dürfte, auch ein Tagwechsel berücksichtigt - ein um 22:20 durchgeführter Scan "veraltet" um 2:20 des nächsten Tages) und einer Schleife, um alle vorhandenen Unterordner des anzugebenden Basisordners zu überprüfen:
@echo off & setlocal
set "Basis=D:\Dein Ordner mit den zu verarbeitenden Unterordnern"
set /a MaxAge=240
set C=%temp%\ChkAge.vbs
echo WScript.Echo DateDiff("n",Now,WScript.Arguments(0))>%C%
for /d %%v in ("%Basis%\*.*") do call :ProcessFolder "%%v"
goto :eof
:ProcessFolder
for /f "tokens=2-3 delims=_" %%i in (%~n1) do set "DT=%%i %%j"
for /f %%i in ('cscript //nologo %C% %DT%') do set /a "Age=%%i"
if %Age% gtr %MaxAge% (
echo Alle erforderlichen Arbeitsschritte
)
goto :eof
Die "Entstehungsdaten" (Datum und Uhrzeit) werden (auf Basis Deiner allgemeinen Beschreibung) dem Ordnernamen entnommen, es kann aber natürlich auch das "Erstellungsdatum" ("creationDate" - siehe oben) eingesetzt werden. Dazu wäre die Zeile 12 zu ändern auf:
for /f "tokens=1-2" %%i in ('dir "%Basis%" /ad /tc^|findstr /i /c:"%~n1"') do set "DT=%%i %%j"
bastla
[Edit] Umleitung der Ausgabe in Zeile 6 ergänzt. [/Edit]
Hallo BinderAlex!
Es wird damit ein temporäres VBScript zur Alterberechnung erzeugt (und dann in Zeile 13 aufgerufen).
Grüße
bastla
P.S.: Zur Sicherheit trage ich das auch oben noch nach ...
für was ist Zeile 06. bei bastla?
In der aktuellen Form: sinnlos - es fehlt die Umleitung in die Temporärdatei %C%, daher:echo WScript.Echo DateDiff("n",Now,WScript.Arguments(0))>%C%
Grüße
bastla
P.S.: Zur Sicherheit trage ich das auch oben noch nach ...
Hallo BinderAlex!
Da hab' ich ja ziemlich geschludert ...
Neue Version:
Grüße
bastla
Da hab' ich ja ziemlich geschludert ...
Neue Version:
@echo off & setlocal
set "Basis=C:\Test"
set /a MaxAge=2
set C=%temp%\ChkAge.vbs
echo WScript.Echo DateDiff("n",WScript.Arguments(0),Now)>%C%
for /d %%v in ("%Basis%\*.*") do call :ProcessFolder "%%v"
goto :eof
:ProcessFolder
for /f "tokens=1-2" %%i in ('dir "%Basis%" /ad /tc^|findstr /i /c:"%~n1"') do set "DT=%%i %%j"
for /f %%i in ('cscript //nologo %C% "%DT%"') do set /a "Age=%%i"
if %Age% gtr %MaxAge% (
echo Das Skript funktioniert fuer %1
)
goto :eof
bastla
Hallo BinderAlex!
Ich nehme an, die Frage
... welches sich einen eigenen Thread verdient (falls Du nicht über die Forumssuche fündig wirst).
Grüße
bastla
Ich nehme an, die Frage
Aber da wir grad dabei sind, welche Zeile muss ich ändern, damit das Erstell-Jahr von Dateien unterhalb eines Verzeichnisses ausgelesen wird?
bezieht sich schon auf Problemchen #2 ...... welches sich einen eigenen Thread verdient (falls Du nicht über die Forumssuche fündig wirst).
Grüße
bastla