
Auf meiner Festplatte werden täglich Hunderte von Unterordnern erstellt, die eine bestimmte Textdatei (Tracker.txt) enthalten können.
Ich möchte eine Befehlszeilen- oder BAT-Datei erstellen, um nur ein Ergebnis zu erhalten, nämlich die neueste Tracker.txt-Datei mit ihrem vollständigen Pfad!
Ich habe es versucht dir /s tracker.txt /OD
, aber das Ergebnis ist nicht nach Datum gefiltert.
Danke schön!
Antwort1
DIR /B /S /OD "tracker.txt"
Sie können die Befehlsergebnisse an eine temporäre Protokolldatei weiterleiten , diese jedoch mithilfe der FOR
Schleifenersetzungen den Datums- und Zeitstempel jeder Datei einfügen, der mit dem Namen übereinstimmt, gefolgt von einem Komma und dann dem vollständigen expliziten Pfad und Dateinamen (d. h. YYYY-MM-DD hh:mm [AM/PM]
).
Anschließend verwenden Sie den SORT
Befehl für diese Datei, um alle Zeilen in dieser Datei in eine neue sortierte Datei zu sortieren, wobei die neueste Zeitstempeldatei jedoch am Ende der Liste steht.
Zuletzt führen Sie eine letzte FOR
Schleife durch die endgültige Dateiliste aus, wobei Sie das Komma als Trennzeichen verwenden und dann die Iteratorvariable in dieser Schleife nur auf jeden vollständigen expliziten Pfad setzen. Wenn Sie das Ende dieser Liste erreichen, ist dies die neueste Datei, die SET
zuletzt kommt, und dann können Sie etwas mit dieser zuletzt gesetzten Variable tun, die hinsichtlich des Datumsstempels die neueste Datei aus allen Verzeichnissen ist, die Sie rekursiv angeben.
Batch-Skriptbeispiel
Stellen Sie sicher, dass der Wert der SET StartDir=
Variablen auf den Stammordner festgelegt ist, in dem der DIR-Befehl zum rekursiven Suchen der Dateien startet.
@ECHO ON
SET StartDir=C:\Users\User\Desktop\Test
IF EXIST "%temp%\~dir1temp.dat" DEL /Q /F "%temp%\~dir1temp.dat"
FOR /F "TOKENS=*" %%A IN ('Dir /B /S /OD "%StartDir%\tracker.txt"') DO ECHO %%~TA, %%~FPNXA>>"%temp%\~dir1temp.dat"
IF EXIST "%temp%\~dirsorttemp.dat" DEL /Q /F "%temp%\~dirsorttemp.dat"
SORT "%temp%\~dir1temp.dat">>"%temp%\~dirsorttemp.dat"
FOR /F "TOKENS=2 DELIMS=," %%A IN (%temp%\~dirsorttemp.dat) DO (SET File=%%~A)
ECHO %File%
:::<command to do something with %file%>
PAUSE