batch 刪除檔案

  • 4045
  • 0
  • 2020-12-16

batch 批次刪除檔案
本來要寫個batch file去定期刪除某個時間之前的檔案,後來發現只要一行指令就完成了,也不用寫batchfile了。
forfiles /P "D:\Logs\IISLog" /M *.log /S /D -30 /C "cmd /C Del @path"

本來要寫個batch file去定期刪除某個時間之前的檔案,後來發現只要一行指令就完成了,也不用寫batchfile了。
forfiles /P "D:\Logs\IISLog" /M *.log /S /D -30 /C "cmd /C Del @path"

cmd中輸入forfiles /?可看說明
/P 搜尋路徑,預設是指令執行路徑
/M 搜尋的模式,預設是*
/S 遞迴搜尋子目錄
/D 選取上次修改日期大於或小於(+/-),指定日期格式為"yyyy/MM/dd",或(+/-)符號後面加數字X,則為今天之後或之前X天
/C 每個檔案要執行的指令,這個比較複雜一點,直接貼原始說明
 
   表示每個檔案要執行的命令。命令字串應該包含在雙括號之間。
   預設的命令是 "cmd /c echo @file"。
 
   下列變數可以使用於命令字串:
      @file    - 傳回檔案的名稱。
      @fname   - 只傳回檔案的名稱, 不傳回副檔名。
      @ext     - 只傳回檔案的 副檔名。
      @path    - 傳回檔案的完整路徑。
      @relpath - 傳回檔案的相對路徑。
      @isdir   - 如果檔案類型是目錄的話,傳回 "TRUE",如果是檔案的話,傳回 "FALSE"。
      @fsize   - 傳回檔案的大小,單位是位元組。
      @fdate   - 傳回檔案上次修改的日期。
      @ftime   - 傳回檔案上次修改的時間。
    要在命令列中包含特殊字元的話, 請使用 0xHH 格式的十六 進位字元碼 (例如 0x09 代表 tab)。
    內部的 CMD.exe 命令應該 以 "cmd /c" 執行。
所以前面那個指令的意思是:
刪除D:\Logs\IISLog資料夾包含子資料夾中30天以前的*.log檔