Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Alter eines Verzeichnisses auslesen

Frage Entwicklung Batch & Shell

Mitglied: BinderAlex

BinderAlex (Level 1) - Jetzt verbinden

20.06.2008, aktualisiert 25.06.2008, 3591 Aufrufe, 9 Kommentare

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]
Mitglied: Biber
20.06.2008 um 10:27 Uhr
Moin BinderAlex,

wenn du es mit reinen Batchmitteln machen willst, wären die Ansätze in etwa so:

  • vom aktuellen Datum die Minuten seit Mitternacht ermitteln
01.
>for /f "tokens=1,2 delims=: " %i in ('time /t') do @set /a 60*(1%i-100) +(1%j)-100 
02.
619
[Beispiel am CMD-Prompt. 619 = 10 Stunden * 60 Minuten + 19 Minuten =10:19h]
  • das Alter eines Verzeichnisse "von heute" ermitteln
01.
>for /f "tokens=2,3 delims=: " %i in ('dir /ad /tc^|findstr /b "%date%"') do @set /a 60*(1%i-100) +(1%j)-100 
02.
574
--> 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]
Bitte warten ..
Mitglied: bastla
20.06.2008 um 10:56 Uhr
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:
01.
@echo off & setlocal 
02.
set "Basis=D:\Dein Ordner mit den zu verarbeitenden Unterordnern" 
03.
set /a MaxAge=240 
04.
 
05.
set C=%temp%\ChkAge.vbs 
06.
echo WScript.Echo DateDiff("n",Now,WScript.Arguments(0))>%C% 
07.
 
08.
for /d %%v in ("%Basis%\*.*") do call :ProcessFolder "%%v" 
09.
goto :eof 
10.
 
11.
:ProcessFolder 
12.
for /f "tokens=2-3 delims=_" %%i in (%~n1) do set "DT=%%i %%j" 
13.
for /f %%i in ('cscript //nologo %C% %DT%') do set /a "Age=%%i" 
14.
if %Age% gtr %MaxAge% ( 
15.
    echo Alle erforderlichen Arbeitsschritte 
16.
17.
goto :eof
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:
01.
for /f "tokens=1-2" %%i in ('dir "%Basis%" /ad /tc^|findstr /i /c:"%~n1"') do set "DT=%%i %%j"
Grüße
bastla

[Edit] Umleitung der Ausgabe in Zeile 6 ergänzt. [/Edit]
Bitte warten ..
Mitglied: BinderAlex
20.06.2008 um 11:40 Uhr
Hallo biber und bastla,

na das ist ja super, ging ja flott Jetzt werd ich mich mal hinsetzen und das soweit fertig machen (so viel Arbeit bleibt mir nach bastla´s Vorschlag ja nicht mehr *g*) Auf jeden Fall vielen vielen Dank ... denke damit bekomm ich das hin. Wenn nicht, gibts ja immer noch die Möglichkeit das ich mich hier noch mal melde
Bitte warten ..
Mitglied: BinderAlex
23.06.2008 um 08:27 Uhr
Hmmm 2 Dinge ...

1. Es macht was, aber nicht das was es soll
2. für was ist Zeile 06. bei bastla?

Zu 1:
Habe die Zeilen von bastla in ein .bat gepackt und die benötigten Anweisungen Zeile 02 (C:\Test), Zeile 03 (auf 2 Minuten, zu Testzwecken) und Zeile 15 (echo-Befehl) ergänzt. Danach wurde das Skript ausgeführt.
Skript läuft an, gibt Zeile 06 in der cmd aus, arbeitet kurz (ca. 2-3 Sek.) und fertig. Mehr kommt nicht, keine weiteren Ausgaben auf dem Bildschirm (obwohl in Zeile 15
zu Testzwecken noch ein echo-Befehel steht).
Scheint also so, als würde er beim Schleifenaufruf ind Zeile 08 gar nicht zur Sprungmarke :ProcessFolder springen. Jetzt kann es natürlich druchaus sein, dass ich etwas vergessen habe anzupassen *ggg* Hier mal das derzeitge Skript:

@echo off & setlocal

set "Basis=C:\Test"
set /a MaxAge=2
set C=%temp%\ChkAge.vbs


echo WScript.Echo DateDiff("n",Now,WScript.Arguments(0))
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
)

goto :eof

Sodele und nun erschlagt mich *g* Wo ist mein Fehler?
Bitte warten ..
Mitglied: bastla
23.06.2008 um 09:15 Uhr
Hallo BinderAlex!

für was ist Zeile 06. bei bastla?
In der aktuellen Form: sinnlos - es fehlt die Umleitung in die Temporärdatei %C%, daher:
01.
echo WScript.Echo DateDiff("n",Now,WScript.Arguments(0))>%C%
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 ...
Bitte warten ..
Mitglied: BinderAlex
23.06.2008 um 09:24 Uhr
Ahhhh ok

Hab das gleich ergänzt und laufen lassen ... tut leider immer noch net

Skript läuft ohne Fehlermeldung, leider kommt aber auch kein Echo "Das Skript funktioniert", was ja egtl. der Fall sein sollte?!

Habe unter C:\Test 3 Ordner erstellt heute um 07:32 , 07:34 und 07:35. Wenn das Skript jetzt um 09:23 mit MaxAge 5 Minuten ausgeführt wird, sollte doch egtl. was passieren oder?!
Bitte warten ..
Mitglied: bastla
23.06.2008 um 14:10 Uhr
Hallo BinderAlex!

Da hab' ich ja ziemlich geschludert ...

Neue Version:
01.
@echo off & setlocal 
02.
 
03.
set "Basis=C:\Test" 
04.
set /a MaxAge=2 
05.
set C=%temp%\ChkAge.vbs 
06.
 
07.
 
08.
echo WScript.Echo DateDiff("n",WScript.Arguments(0),Now)>%C% 
09.
for /d %%v in ("%Basis%\*.*") do call :ProcessFolder "%%v" 
10.
goto :eof 
11.
 
12.
 
13.
:ProcessFolder 
14.
for /f "tokens=1-2" %%i in ('dir "%Basis%" /ad /tc^|findstr /i /c:"%~n1"') do set "DT=%%i %%j" 
15.
for /f %%i in ('cscript //nologo %C% "%DT%"') do set /a "Age=%%i" 
16.
 
17.
if %Age% gtr %MaxAge% ( 
18.
echo Das Skript funktioniert fuer %1 
19.
20.
 
21.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: BinderAlex
24.06.2008 um 15:28 Uhr
Sssuuuppper Dankeschön Funktioniert einwandfrei ...

Aber da wir grad dabei sind, welche Zeile muss ich ändern, damit das Erstell-Jahr von Dateien unterhalb eines Verzeichnisses ausgelesen wird?

Das ist ein zweites Problemchen, könnt ich grad mit erledigen *g*
In einem bestimmten, festen Verzeichniss, sollen alle enthaltenen Dateien (alle mit Endung .bak) anhand der Jahreszahl in die entsprechenden Ordner verschoben werden.
Also eine Datei aus dem Jahr 2007 soll in den Ordner "2007" verschoben werden und wenn dieser nicht existiert, soll er angelegt werden.

Vielen lieben Dank schon vorab
Bitte warten ..
Mitglied: bastla
25.06.2008 um 16:31 Uhr
Hallo BinderAlex!

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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...