windows自帶刪除forfiles命令批處理詳解

germany006發表於2016-01-06





forfiles是2003自帶的命令,windows7以上系統自動此程式,詳細可以forfiles/?查詢。可以複製到XP中使用,複製到2000中測試失敗。


如要自動刪除三天前的檔案
forfiles /p i:\serverbak\2005 /s /m *.* /d -2 /c "cmd /c del @file"

當檔案更改日期晚於10/18/2008時,刪除所有C:Backup目錄和它子目錄下的.sql檔案。
  EXEC xp_cmdshell FORFILES /p c:BACKUP /s /m *.sql /d 10/18/2008 /c "CMD /C del /Q /F @FILE"

當檔案更改日期多於30天時,刪除所有C:Backup目錄和它的子目錄下的.sql檔案。
  EXEC xp_cmdshell FORFILES /p c:BACKUP /s /m *.sql /d -30 /c "CMD /C del /Q /F @FILE"


注意:這裡的/Q是強制不需要回答YES或者NO,直接刪除(因為刪目錄及子目錄時多個檔案,系統會詢問YES或者NO)


刪除前一天的歷史資料
forfiles /m *.fc /s /D -1 /c "cmd /c del @file"

刪除當前目錄下及其子目錄中的空資料夾
for /f "tokens=*" %a in (dir /b /ad /s E:\FileCache^|sort /r) do rd "%a" /q 2>nul

在批處理中把%改成%%
for /f "tokens=*" %%a in (dir /b /ad /s E:\FileCache^|sort /r) do rd "%%a" /q 2>nul


說明:
/p 指定的路徑 
/s 包括子目錄 
/m 查詢的檔名掩碼 
/d 指定日期,有絕對日期和相對日期, 此處-7指當前日期 的7天前  

/c 執行的命令列   表示為每個檔案執行的命令。命令字串應該
                        用雙引號括起來。
                        預設命令是 "cmd /c echo @file"。下列變數
                        可以用在命令字串中:
                        @file    - 返回檔名。
                        @fname   - 返回不帶副檔名的檔名。
                        @ext     - 只返回檔案的擴充套件。
                        @path    - 返回檔案的完整路徑。
                        @relpath - 返回檔案的相對路徑。
                        @isdir   - 如果檔案型別是目錄,返回 "TRUE";
                                   如果是檔案,返回 "FALSE"。
                        @fsize   - 以位元組為單位返回檔案大小。
                        @fdate   - 返回檔案上一次修改的日期。
                        @ftime   - 返回檔案上一次修改的時間。
示例
要列出驅動器 C: 上的所有批處理檔案,請鍵入:
forfiles /p c:\ /s /m*.bat /c"cmd /c echo @file is a batch file" 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-1972299/,如需轉載,請註明出處,否則將追究法律責任。

相關文章