Cmdline para obter o arquivo mais recente no comando dir recursivo

1

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!

Eu tentei, dir /s tracker.txt /ODmas o resultado não é filtrado por data.

Obrigado!

Izarra6492
fonte
1
Você especificou o DOS, você quer dizer isso? De longe, a abordagem mais fácil seria usar o PowerShell, mas isso precisa do Windows (ou agora Mac ou Linux).
Julian Knight
Izarra6492 - Vejo que você é novo no SU; portanto, quando tiver um momento, consulte Aceitando uma resposta para garantir que você entenda como isso funciona para as respostas que você achar úteis na resolução da tarefa que você deseja.
Pimp Juice IT
Você voltará alguma vez?
Pimp Juice IT

Respostas:

0

Você pode canalizar os DIR /B /S /OD "tracker.txt"resultados do comando para um arquivo de log temporário, mas usar as FORsubstituições de loop para colocar o registro 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 fim, você executaria um FORloop final na lista de arquivos final usando a vírgula como delimitador e, em seguida, apenas configurando a variável iteradora nesse loop para cada caminho explícito completo e, quando chegar ao final da lista, esse é o mais novo arquivo que é o SETúltimo e, em seguida, você pode fazer algo com essa última variável definida, que é o mais recente carimbo de data do arquivo em 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

  • Ordenar
  • For / F
  • FOR /? (substituições de 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
    
  • Conjunto
Pimp Juice IT
fonte