Cmdline para obtener el archivo más reciente en el comando dir recursivo

Cmdline para obtener el archivo más reciente en el comando dir recursivo

En mi disco duro, tengo cientos de subcarpetas creadas diariamente que pueden contener un archivo de texto específico (Tracker.txt).

Me gustaría crear un archivo cmdline o BAT para obtener solo un resultado, el último archivo tracker.txt, con su ruta completa.

Lo intenté dir /s tracker.txt /ODpero el resultado no se filtra por fecha.

¡Gracias!

Respuesta1

Puede canalizar los DIR /B /S /OD "tracker.txt"resultados del comando a un archivo de registro temporal, pero hacer que use las FORsustituciones de bucle para colocar la marca de fecha y hora de cada archivo que coincida con el nombre seguido de una coma y luego la ruta explícita completa y el nombre del archivo (es decir YYYY-MM-DD hh:mm [AM/PM]).

Luego usa el SORTcomando contra ese archivo para ordenar todas las líneas en ese archivo en un nuevo archivo ordenado pero con el archivo de marca de tiempo más reciente al final de la lista.

Por último, ejecutaría un FORbucle final a través de la lista de archivos final usando la coma como delimitador y luego solo configuraría la variable iteradora en ese bucle para cada ruta explícita completa y cuando llegue al final de esa lista, esta será la más nueva. archivo que es SETel último y luego puede hacer algo con esa última variable configurada, que es la marca de fecha del archivo más reciente desde todos los directorios que especifica de forma recursiva.


Ejemplo de secuencia de comandos por lotes

Asegúrese de establecer el valor de la SET StartDir=variable para que sea la carpeta raíz donde comienza el comando DIR para buscar los archivos de forma recursiva.

@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

Recursos adicionales

  • Clasificar
  • Para /F
  • FOR /?(sustituciones por lotes)

    In addition, substitution of FOR variable references has been enhanced.
    You can now use the following optional syntax:
    
    %~fI        - expands %I to a fully qualified path name
    %~tI        - expands %I to date/time of file
    
  • Colocar

información relacionada