【小筆記】利用 forfiles.exe 刪除記錄檔

維護公司的 IIS 時,有時會很需要記錄檔。可是記錄檔,日積月累下來,其所佔用的硬碟空間,其實也非常的可觀。

前輩(咳……)的作法是用最快的方法來刪除這些記錄檔,也就是 del. 或 erase *.* 的指令。這樣的作法的確是很快,但有一個缺點。

就是只會留下當天的記錄檔(因為記錄檔被佔用住,沒辦法刪除)。這樣的作法固然快速,可是當真的需要除錯抓問題時,就會很頭痛!

幸好,後來找到 forfiles.exe 這個指令,可以輕鬆達到刪除記錄檔,但卻又能保有一定程度的記錄檔。

因為我們的 IIS 是每天產生一個記錄檔,所以一個月下來就有至少 28 個記錄檔。也就是說一個月下來,光是記錄檔就佔用了好幾個 GB 的空間了。

雖然現在硬碟很大,可是也沒必要任意地浪費。把所有的記錄檔全刪除,卻又有可能造成除錯抓問題時,沒有相關資料可以調閱。

本來想要寫個批次檔抓出修改時間,再做刪除處理。但因為一直偷懶,都沒寫。直到後來找到 forfiles.exe 讓我眼睛一亮,因為實在是太簡單了!一行指令,就可達到我的目的。

forfiles.exe 在 Windows 2003 就有內建,我估計 Windows XP 應該也有內建。

如果需要更詳細的參數說明,請自行使用 forfiles /? 取得詳細資料。

直接看指令吧:

forfiles /d -7 /m *.log /c "cmd /c erase @path"

預設情況,會刪除七天前所有 *.log 的檔案,也就是只保留包含今天,最近七天的檔案。

  • /d -7
    /d 參數是對應到檔案的修改日期。可以直接指定一個日期,格式是 YYYY/MM/DD。
    也可以用偏移量,也就是 +n 天或 -n 天,來指定「大於或等於」或者「小於或等於」目前的日期。這裡再更白話點:
    +n 天的意思說,以今天為基準,列出 n 天「後」的檔案
    -n 天的意思說,以今天為基準,列出 n 天「前」的檔案
  • /m *.log
    /m 參數是指搜尋條件。它可以用像這樣的寫法『*test*』、『test*.log』……等的寫法。也就是支援萬用字元。
    如果沒加這個參數,那麼它的預設值就是 *
  • /c "cmd /c erase @path"
    /c 參數是指要執行的命令,而命令必須用雙引號包圍住
    cmd /c 算是指再開一個 cmd 視窗,但它執行完畢後會把視窗關閉,搭配 forfiles 時,其實感覺不到多開了一個 cmd 視窗
    erase 是刪除指令,應該不用多作說明了
    @path 這比較特別,它在 forfiles 裡,所代表的意思,找到的檔案,它的「完整真實路徑」,這在執行刪除、移動非常地有幫助。
    這個參數也可以不使用,這時它就會採用預設值,也就是 /c "cmd /c echo @path"

【參考資料來源】

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Google reCAPTCHA 保護機制,這項服務遵循 Google 隱私權政策服務條款