Cmdline para obter o arquivo mais recente no comando dir recursivo

Cmdline para obter o arquivo mais recente no comando dir recursivo

No meu disco rígido, tenho centenas de subpastas criadas diariamente que podem conter um arquivo de texto específico (Tracker.txt).

Gostaria de criar um arquivo cmdline ou BAT para obter apenas um resultado, o arquivo tracker.txt mais recente, com seu caminho completo!

Tentei dir /s tracker.txt /ODmas o resultado não é filtrado por data.

Obrigado!

Responder1

Você pode canalizar os DIR /B /S /OD "tracker.txt"resultados do comando para um arquivo de log temporário, mas fazer com que ele use as FORsubstituições de loop para colocar o carimbo de data e hora de cada arquivo que corresponda ao nome seguido por uma vírgula e, em seguida, o caminho explícito completo e o nome do arquivo (ou seja, YYYY-MM-DD hh:mm [AM/PM]).

Em seguida, você usa o SORTcomando nesse arquivo para classificar todas as linhas desse arquivo em um novo arquivo classificado, mas com o arquivo de carimbo de data/hora mais recente na parte inferior da lista.

Por último, você executaria um FORloop final na lista de arquivos final usando a vírgula como delimitador e, em seguida, apenas definindo a variável iteradora nesse loop para cada caminho explícito completo e quando chegar ao final da lista, este será o mais novo o último arquivo SETe então você pode fazer algo com a última variável definida, que é o carimbo de data do arquivo mais recente de todos os diretórios especificados recursivamente.


Exemplo de script em lote

Certifique-se de definir o valor da SET StartDir=variável como a pasta raiz onde o comando DIR é iniciado para localizar os arquivos recursivamente.

@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 adicionais

  • Organizar
  • Para /F
  • FOR /?(substituições em lote)

    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
    
  • Definir

informação relacionada