Следующий фрагмент кода делает то, что вы хотите:
set "FILE="
pushd "\path\to\folder" || exit /B 1
for /F "eol=| delims=" %%F in ('
dir /B /A:-D /O:D /T:C "*.*"
') do (
set "FILE=%%F"
)
if defined FILE del "%FILE%"
popd
В dir
команда возвращает только файлы (/A:-D
) сортируются по дате в порядке возрастания (/O:D
) с использованием дата создания (/T:C
), которые находятся в \path\to\folder
и соответствуют рисунку *.*
.
Петля for /F
просматривает все файлы, возвращенные dir
, и присваивает свое имя переменной FILE
, переписывая ее на каждой итерации, поэтому окончательное значение - это имя самого нового файла. Команда del
, наконец, удаляет найденный файл. Запрос if
охватывает случай, когда файлы не найдены в данном месте.
Вот немного модифицированный вариант в соответствии с рекомендациями Магу-х comment, которые могли бы быть немного более производительным, чем вышеупомянутая одно:
set "FILE="
pushd "\path\to\folder" || exit /B 1
for /F "eol=| delims=" %%F in ('
dir /B /A:-D /O:-D /T:C "*.*"
') do (
if not defined FILE set "FILE=%%F"
)
if defined FILE del "%FILE%"
popd
Это позволяет избежать multiplicately перезаписи переменной FILE
, запрашивая, имеет ли он уже определены. Обратите внимание на обратный порядок сортировки от dir
.
Однако подход, показанный в документе от Magoo, по-прежнему лучше работает.
Я думал об этом методе, но, хотя производительность, безусловно, лучше, я решил не использовать его здесь, так как это может вызвать проблемы, если оно вставлено в скрипт, если оно помещено в другой скобковый блок кода. , – aschipfl
@aschipfl: достаточно справедливо, но есть пределы. В вашем примере вы, возможно, получите лучшую производительность с 'if not defined file set 'file = %% F" '. – Magoo
Ах, да, запрос переменной может быть быстрее, чем умножать ее, спасибо! – aschipfl