2013-06-12 4 views
0

Я пытаюсь написать сценарий, который удаляет элементы в папке 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 

ответ

3

Вы можете отобразить файлы и папки:

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" 
+0

Я принимаю этот ответ, потому что он помог мне разобраться, как показать, какой файл был «не найден». Тем не менее, я до сих пор не понимаю, почему я начинаю эту ошибку. –

2

Если папка не пуста, она вернет безобидное сообщение об ошибке. 2>nul удалит сообщение об ошибке.

forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE 2>nul" 
+0

Если папка не пуста, она возвращает «Папка не пустая» ... это то, что она должна. В конце концов, если папка не пуста, это означает, что файлы в них меньше 30 дней, поэтому папка (и файлы) должна оставаться. Впрочем, это не ошибка. Спасибо за 2> nul tip, хотя! Никогда не знал этого. –

Смежные вопросы