2017-10-16 135 views
0

我正在尋找一個簡單的批處理腳本,它將允許我刪除舊文件並記錄它已刪除或不刪除。搜索我在網上找到了後「FORFILES」真的有用:刪除舊文件並登錄它

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path" 

來自: Batch file to delete files older than N days

就像我說我關心的是記錄哪些已經被刪除。我嘗試了很多東西,但它仍然不起作用。以下是我的實際代碼:

set logfile=D:\what\ever\automatic_delete_log_%date:~10,4%-%date:~7,2%-%date:~4,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.txt 
forfiles /p "C:\what\ever\Downloads" /s /m *.* /D -290 /C "cmd /c set status=failed; del @path && set status=success; echo @path @fdate %status% >> %logfile%" 
echo %logfile% 

日誌文件已創建但爲空,且舊文件未被刪除。 (它應該從2016年移除我擁有的8個文件)當我使用原始代碼時,它將刪除文件。我讀它可能會轉義& &。我試圖逃避他們,我試圖逃脫;我試圖逃脫他們兩個沒有更多的成功。我不知道該怎麼做。有人可以幫忙嗎?

ojectiv是刪除文件,如果它成功記錄「路徑,日期,成功」,否則記錄「路徑,日期,失敗」。

+1

請記住,如果前一個命令成功(即ERRORLEVEL EQU 0),&&將只運行下一個命令。 – lit

+1

...而且你不用兩行代碼分號 – Compo

回答

0

隨着足夠的逃避,它可以完成。醜陋,但可以做到。請記住,DEL命令不會設置爲ERRORLEVEL。文件存在的測試將表明它沒有被成功刪除。

forfiles /p "C:\src\t" /s /m *.* /D -290 /C ^"cmd.exe /C^
    set ^"status=failed^" ^&^&^
    echo DEL @path ^&^&^
    IF NOT EXIST @path (^ 
     echo @path @fdate SUCCESSFUL >>^"%logfile%^"^
    ) ELSE (^ 
     echo @path @fdate FAILED >>^"%logfile%^"^
    )^
    ^" 
+0

好吧,所以甚至更多的轉義,即使是「。」並且要感謝DEL不會觸發錯誤,今天就去測試一下,謝謝 –

+0

非常感謝,它在日誌中的某個文件中不存在,我不這麼做,但是你解決了我的問題,應該刪除的文件被刪除:) –