Cmdline для получения последнего файла по рекурсивной команде dir

Cmdline для получения последнего файла по рекурсивной команде dir

На моем жестком диске ежедневно создаются сотни подпапок, которые могут содержать определенный текстовый файл (Tracker.txt).

Я хотел бы создать файл cmdline или BAT, чтобы получить только один результат — последний файл tracker.txt с полным путем к нему!

Я попробовал dir /s tracker.txt /OD, но результат не отфильтрован по дате.

Спасибо!

решение1

Вы можете передать DIR /B /S /OD "tracker.txt"результаты команды во временный файл журнала, но при этом использовать циклические FORподстановки для добавления отметки даты и времени каждого файла, соответствующего имени, за которым следует запятая, а затем полный явный путь и имя файла (например, YYYY-MM-DD hh:mm [AM/PM]).

Затем вы используете SORTкоманду для этого файла, чтобы отсортировать все строки в этом файле в новый отсортированный файл, но с самым новым файлом с отметкой времени в конце списка.

Наконец, вы запускаете последний FORцикл по конечному списку файлов, используя запятую в качестве разделителя, а затем устанавливаете переменную итератора в этом цикле только для каждого полного явного пути, и когда он достигает конца этого списка, это самый новый файл, который находится SETпоследним, и затем вы можете что-то сделать с этой последней установленной переменной, которая является отметкой даты самого нового файла из всех каталогов, которые вы указываете рекурсивно.


Пример пакетного скрипта

Обязательно установите значение переменной, SET StartDir=соответствующее корневой папке, с которой начинается команда DIR для рекурсивного поиска файлов.

@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

Дополнительные ресурсы

  • Сортировать
  • Для /Ф
  • FOR /?(пакетные замены)

    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
    
  • Набор

Связанный контент