@echo off SETLOCAL ENABLEEXTENSIONS FOR /F %%f IN (‘dir *.* /b /a-d /o-d’) DO set newestfilename=%%f & goto end :end echo The newest file is %newestfilename% set newestfilename=
Команда dir *.* /b /a-d /o-d ищет все файлы совпадающие с маской (*.*) кроме директорий (/a-d) в текущем каталоге, сортирует их по дате в порядке убывания (/o-d), т.е. от новых к старым, самый новый первой строкой и выводит только их имена (ключ /b) на стандартный вывод. Её вывод скармливается команде FOR с ключом /F (для работы ключа /F надо включить расширенную обработку команд через SETLOCAL ENABLEEXTENSIONS), которая разбивает вывод на строки и для каждой выполняет команду после DO. Первая же строка (содержащая имя новейшего файла) записывается в переменную %newestfilename% командой SET, после чего сразу выполняется выход из цикла на метку :end. После этого можно использовать переменную %newestfilename% как угодно.
Если нужно искать в определенном каталоге, то предварительно сделай его текущим командой cd.
Я придумал такой трюк:
@echo off
SETLOCAL ENABLEEXTENSIONS
FOR /F %%f IN (‘dir *.* /b /a-d /o-d’) DO set newestfilename=%%f & goto end
:end
echo The newest file is %newestfilename%
set newestfilename=
Команда
dir *.* /b /a-d /o-d
ищет все файлы совпадающие с маской (*.*) кроме директорий (/a-d) в текущем каталоге, сортирует их по дате в порядке убывания (/o-d), т.е. от новых к старым, самый новый первой строкой и выводит только их имена (ключ /b) на стандартный вывод.
Её вывод скармливается команде FOR с ключом /F (для работы ключа /F надо включить расширенную обработку команд через SETLOCAL ENABLEEXTENSIONS), которая разбивает вывод на строки и для каждой выполняет команду после DO. Первая же строка (содержащая имя новейшего файла) записывается в переменную %newestfilename% командой SET, после чего сразу выполняется выход из цикла на метку :end.
После этого можно использовать переменную %newestfilename% как угодно.
Если нужно искать в определенном каталоге, то предварительно сделай его текущим командой cd.