Да, для этой задачи можно использовать команду FORFILES , несмотря на ее имя.
%SystemRoot%\System32\forfiles.exe /P "R:\" /M "SIS.d" /S /D -200 /C "%ComSpec% /C if @isdir == TRUE rd /S /Q @path >>"%backuplog%" 2>&1" 2>nul
FORFILES поиск
- в корневом каталоге диска
R:
из-за опции /P "R:\"
- и всех ее подкаталогов из-за опции
/S
- для записи (файла или каталога), соответствующей регистронезависимомумаска поиска
SIS.d
из-за того, что /M "SIS.d"
- старше 200 дней из-за
/D -200
по дате последнего изменения
и выполняется для каждой найденной записи из-за опции /C "..."
командная строка:
C:\Windows\System32\cmd.exe /C if @isdir == TRUE rd /S /Q @path >>"%backuplog%" 2>&1
%backuplog%
также раскрывается перед выполнением команды forfiles
и, надеюсь, расширяется до полного имени файла без заключения в двойные кавычки, указанные дополнительно в командной строке.
cmd.exe
первый запуск команды IF для сравнения с учетом регистра, если строка, переданная forfiles
с @isdir
команде, равна строке TRUE
.
В этой строке сравнения условийв случае истинности cmd.exe
запускает команду RD для тихого удаления каталога со всеми его подкаталогами и файлами, указанными с полным квалифицированным именем каталога, на которое ссылается @path
и передается forfiles
в cmd.exe
всегдазаключены в двойные кавычки.
Стандартный вывод и вывод ошибки команды RD перенаправляются в файл, имя которого присвоено переменной среды backuplog
.Команда RD никогда не выводит что-либо для обработки STDOUT при использовании опций /S
и /Q
. RD выведет сообщение об ошибке для обработки STDERR , если полное удаление каталога не удастся по различным причинам.Таким образом, было бы достаточно использовать 2>>"%backuplog%"
вместо >>"%backuplog%" 2>&1
.
Полное удаление каталога, обрабатываемого в настоящее время forfiles
, приводит к сообщению об ошибке forfiles
для обработки STDERR, который подавляется дополнительными 2>nul
в конце командной строки forfiles
.
Примечание: Разделитель каталогов в Windows - \
(обратная косая черта), а не /
(косая черта)./
используется в Windows для параметров, как это можно увидеть здесь в этой командной строке очень хорошо.Поэтому не пишите командные строки с зависимостью от автоматического исправления функций ядра файловой системы Windows, используя неправильные /
вместо \
в строках аргументов файлов и каталогов.
Для понимания используемых команд и того, как ониработать, открыть окно командной строки, выполнить там следующие команды и полностью прочитать все страницы справки, отображаемые для каждой команды.
cmd /?
forfiles /?
if /?
rd /?
См. Также статью Microsoft о Использование операторов перенаправления команд .