2013-06-12 45 views
0

我正在嘗試編寫一個腳本,用於刪除Windows 7中TEMP文件夾中的項目。我只希望它刪除30天或更早的文件。我正在測試一個我已經在系統環境變量中設置爲TESTTEMP的文件夾。forfile在刪除文件夾時出錯

我的腳本如下:

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提示,不過!從來不知道那個。 –