TIPS-在 Windows 批次刪除 N 天前的檔案

工作上常遇到的需求:Log、暫存檔案多半有保留年限,如何用一個指令刪除某個期限前的舊檔?

今天才學到一個好用的 DOS 指令-forfiles,參數不多,簡單易用:

  • /p 路徑名稱
    查詢對象,省略時為現在所處資料夾
  • /m 檔名限制
    可配合萬用字元限定檔名或副檔名,例如:*.log、ex1610*.log
  • /s
    指定搜尋範圍包含子目錄及其下層目錄
  • /c "對找到檔案執行的動作"
    例如:"cmd /c del @path"為刪除檔案,省略參數時預設為"cmd /c echo @file",將顯示找到的檔案名稱
  • /d 數字或日期
    限定檔案上次修改日期範圍,+代表大於等於,-代表小於等於,可以指定日期,例如:/d +2016/10/01(10/1當天及之後異動的檔案)、/d -2016/10/10(10/10當天與之前修改過的檔案);或指定數字今天起算幾天前的檔案,例如:/d -3(三天前)/d +0(今天)

撰寫 /c 參數時,有以下變數可用:

  • @file 檔名
  • @name 檔名去掉副檔名
  • @ext 副檔名
  • @path 完整路徑
  • @relpath 與 /p 為基準的相對路徑
  • @isdir 是否為資料夾
  • @fsize 檔案大小
  • @fdate 檔案上次修改日期
  • @ftime 檔案上次修改時間

所以刪除30天以前的Log檔可以寫成:

forfiles /p D:\Logs\IISLogs /s /m *.log /d –30 /c "cmd /c delete @path"

另外我也發現,forfiles 很適合解決之前提過將 DIR 結果轉為檔案清單的需求,還省去 Replace 計算相對路徑的功夫,是更好的選擇:

forfiles /p D:\Set9527 /s /c "cmd /c echo @relpath"

好物一枚,收入命令列工具箱。

歡迎推文分享:
Published 26 October 2016 09:54 PM 由 Jeffrey
Filed under:
Views: 7,441



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2016>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication