Ошибка forfiles при удалении папок
Я пытаюсь написать сценарий, который удаляет элементы в папке (папках) TEMP в Windows 7. Я хочу, чтобы он удалял только файлы старше 30 дней. Я делаю тестирование в папке, которую я настроил в системных переменных среды как TESTTEMP.
У меня есть сценарий следующим образом:
forfiles /p %TESTTEMP% /s /d -30 /c "cmd /c IF @ISDIR==FALSE del @FILE /q"
forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE"
Моя логика заключается в том, что процесс должен сначала удалить все файлы в каталоге TESTTEMP, если файл старше 30 дней, и проверить все подкаталоги. Затем я проверяю оставшиеся файлы и, если это пустой каталог, удаляю его.
Этот скрипт работает отлично - все файлы, которые я хочу удалить, удалены, а те, которые должны остаться, остаются. Тем не менее, я заметил, что когда я запускаю этот пакетный файл, я получаю сообщение об ошибке The system cannot find the file specified.
Я считаю, что у него есть проблемы с rmdir
команда и не может найти каталог, который он только что удалил...
Должен ли я беспокоиться об этом, так как сценарий, кажется, делает то, что я хочу? А еще лучше, есть ли способ показать, какой файл не найден, чтобы я мог попытаться выяснить, что происходит самостоятельно?
Спасибо за любую помощь!
(Для справки, вот структура папок до и после запуска пакетного файла, при условии, что все файлы старше 30 дней:)
До:
-TestTemp
-More Test
testfile1.txt
testfile2.txt
testfile3.txt
testfile1.txt
testfile2.txt
testfile3.txt
После:
-TestTemp
2 ответа
Вы можете отображать файлы и папки:
forfiles /p "%TESTTEMP%" /s /c "cmd /c IF @ISDIR==TRUE echo rmdir @FILE"
forfiles /p "%TESTTEMP%" /s /d -30 /c "cmd /c IF @ISDIR==FALSE echo del @FILE /q"
Если папка не пуста, она выдаст безопасное сообщение об ошибке. 2>nul
удалит сообщение об ошибке.
forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE 2>nul"
Я получал сообщение об ошибке "Система не может найти указанный файл", но оно исчезло, когда я удалил "/s" из вызова ForFiles. Мне на самом деле не нужны /s, но похоже, что постер здесь. Если вам нужно рекурсивное удаление и вы не можете смириться с ошибкой (или не хотите глотать ее с помощью 2>nul), возможно, вы могли бы вложить нерекурсивный ForFiles в рекурсивный? Просто мысль.