
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 /OD
mas 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 FOR
substituiçõ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 SORT
comando 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 FOR
loop 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 SET
e 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