Dateidatum per Batch auslesen + filtern

dateidatum-per-batch-auslesen
Um per Batch herauszufinden, wann eine Datei erstellt, das letzte Mal geöffnet oder geändert wurde, folgende Befehle:

Letzte Änderung:

for /f "delims= " %%a in ('dir c:\spss15\*.exe^|findstr /i /l "spsswin.exe"') do echo %%a

Anderes Beispiel: auf der Suche nach der letzten Änderung von test.bat

for /f "delims= " %%a in ('dir p:\fad\*.bat^|findstr /i /l "test"') do echo %%a

Auch möglich wären:

('dir p:\fad\*.*^|findstr /i /l "test.bat"')
('dir p:\fad\*.bat^|findstr /i /l "test.bat"')
('dir p:\fad\^|findstr /i /l "test"')

Wenn das Ergebnis von „dir“ in Kombination mit „findstr“ mehr als 1 Ergebnis liefert dann spielt mit diesen Variationen um nur die gewollte Datei zu finden.
Ihr könnt natürlich statt zu suchen auch den exakten Pfad vom Benutzer eingeben lassen, mit Übergabe der Datei oder anderen Methoden arbeiten.

Achtung: „for“ nimmt nach „in“ Übergaben in einem Klammerpaar an, in dem wiederum ein Paar einfacher Hochkommata steht. Also

for .... in ( '  befehle  ' )

Das vor der schließenden Klammer wird oft übersehen, wenn davor etwas in „Ausführungsstrichen“ steht.

Das „^“ hinter dem „dir“ Befehl muss nur gesetzt werden, wenn der „dir“ Befehl in der „for“ Schleife verarbeitet wird. Wollt ihr nur diesen Teil (ohne das „for“ Gedöns), dann mit:

dir c:\spss15\*.exe|findstr /i /l "spsswin.exe"

Nun das Erstelldatum:

for /f "delims= " %%a in ('dir c:\spss15\*.exe /t:c^|findstr /i /l "spsswin.exe"') do echo %%a

und der letzte Zugriff:

for /f "delims= " %%a in ('dir c:\spss15\*.exe /t:a^|findstr /i /l "spsswin.exe"') do echo %%a

Wie man sieht, der Parameter „/t“ in „dir“ gibt an, welches Datum ausgegeben wird. Er nimmt die Werte „c“ für Erstelldatum, „a“ für den letzten Zugriff oder „w“ für den letzten Schreibzugriff. Funktioniert nur unter NTFS, mehr Infos durch „dir /?“.

Wollt ihr jetzt nur einen bestimmten Teil der Datums, z.B. nur das Jahr, könnt ihr dieses auch herausfiltern.

Nur das Jahr des Erstelldatums:

for /f "tokens=3 delims=. " %%a in ('dir c:\spss15\*.exe /t:c^|findstr /i /l "spsswin.exe"') do echo %%a

Monat wäre dann logischerweise „tokens=2“ und Tag „tokens=1“.

Erklärungen dazu gern per Comment oder Mail. Hab grad wenig Zeit.
Das hat mich mehr Zeit gekostet als ich dachte, daher gibts hier die Niederschrift.

2 Kommentare

  1. Ist zwar schon älter, aber trotzdem ganz tolle Anleitung. Genau das, was ich gesucht hatte.
    Mit „tokens=1,2 delims= “ wird die Uhrzeit als Variable %%b erzeugt – falls das außen mir noch jemand braucht.
    Also im ersten Beispiel dann
    for /f „tokens=1,2 delims= “ %%a in (‚dir c:\spss15\*.exe^|findstr /i /l „spsswin.exe“‚) do echo %%a %%b
    Vielen Dank

  2. Hilfreicher Ansatz. Dafür vielen Dank.
    Ich suche eine Option, um zwei Dateien zu vergleichen und die ältere durch die neue zu ersetzen
    also in etwa so:

    wenn lokale Datei neuer als Datei auf SMB Laufwerk
    —- benenne Datei auf smb Laufwerk um
    —- kopiere lokale Datei auf smb Laufwerk

    und umgekehrt
    wenn Datei auf smb neuer als lokal
    — überschreibe lokale Datei mit smb Version

    Das ganze sollte geloggt werden. Das sollte aber kein Problem sein.

Schreibe einen Kommentar