командной строки вы используете довольно опасно (я просто скопировал его здесь и заказана переключатели):
forfiles /S /D -30 /P "C:\PATH\USERS\PATH\" /M "*.*" /C "cmd /C del /Q @path"
forfiles
, потому что возвращается к файлам и каталогам. Предположим, что существует каталог с именем container
, который соответствует критериям поиска (последний раз был изменен 30 дней назад или ранее), выполненная командная строка del
- del "C:\PATH\USERS\PATH\container" /Q
, в которой все файлы, даже те, которые не соответствуют критериям поиска (обратите внимание, что del \folder
ведет себя как del \folder\*
).
Чтобы решить эту проблему, нужно фильтровать для файла или каталогов, например:
forfiles /S /D -30 /P "C:\PATH\USERS\PATH" /M "*" /C "cmd /C if @isdir==FALSE del @path"
Я также изменил файл маски из *.*
в *
, потому что forfiles
, в отличие от всех внутренних команд, не делает файлы совпадений без расширения в случае, если дано *.*
. Кроме того, я удалил конечный \
с пути, потому что в противном случае forfiles
вызывает ошибку: ERROR: The directory name is invalid.
.
Но теперь нечто совсем другое - ответ на ваш реальный вопрос:
С forfiles /S
возвращает каталог перед тем она возвращает его подпунктов, это не имеет смысла делать проверить, является ли каталог пуст или нет в той же командной строке, вам нужно сделать это позже.
Для этой цели вы можете использовать второй forfiles
цикл вроде этого (также проверка их последние даты изменения, если вы хотите, в противном случае, удалите /D -30
часть):
forfiles /S /D -30 /P "C:\PATH\USERS\PATH" /M "*" /C "cmd /C if @isdir==TRUE rd @path 2> nul"
Или другой стороны, если каталог дата модификации не имеет значения, вы можете использовать for /D
цикл, который также быстрее:
for /D %%I in ("C:\PATH\USERS\PATH\*") do rd "%%~fI" 2> nul
использования [е] (http://ss64.com/nt/rd.html), чтобы удалить папку. Он не удалит папку без emty, если вы не дадите ей '/ s/q' – Stephan
. Хотите ли вы проверить, имеет ли папка 30 дней? Если это так, используйте переменную '@ isdir' для проверки только каталогов, а затем удалите каталог. – Squashman