維護公司的 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"
【參考資料來源】