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 /?“.

Auch interessant:  Windows CMD: Aliase und Befehlskombis einrichten

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.

1 Kommentar

  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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.