介紹個相當好用的指令: Forfiles
用途: 檔案選取,並可針對篩選出來的檔案再下其他指令
注意: WinSvr2003, R2, SP1, PS2才有此指令
常用參數: /m SearchMark: Searches files according to SearchMask.
/c command: Runs the specified Command on each file.
/d [{+ | -}] [{MM/DD/YYYY | DD}]
注意: WinSvr2003, R2, SP1, PS2才有此指令
常用參數: /m SearchMark: Searches files according to SearchMask.
/c command: Runs the specified Command on each file.
/d [{+ | -}] [{MM/DD/YYYY | DD}]
假如某個資料夾下每天都會有一個(以上)檔案產生,並且希望定期清理,只保留一個月份的檔案量時,可以用forfiles:
下面這個指令就是刪除日期為30天以前的檔案
> forfile /D –30 /C “cmd /c del @file”
- /C 這參數預設值是"cmd /c echo @file",也就是只列出檔名。
- "cmd /c" 是下指令固定的寫法。
- "@file" 是可以用在/C參數內的變數之一,@file表示檔案名稱。其他還有變數可以列出檔案副檔名(@ext)、完整路徑(@path)、相對路徑(@relpath)、判斷是否為目錄(@isdir)、檔案大小(@fsize)、日期(fdate)、時間(@ftime)等。
- /D 這參數用法有很多變化(詳請參考reference),"-30"的意思就是30天前。
另外一個是For...DO迴圈語法,用來跟上面的forfiles搭配,可以先計算出forfiles總共篩選出幾個檔案:
> set cnt=0
> FOR /F %G IN(‘forfile /D -10’) DO set /a cnt+=1
> FOR /F %G IN(‘forfile /D -10’) DO set /a cnt+=1
- 上面即是先以forfile找出10天前的檔案,並丟進去for迴圈內
- DO裡針對每個forfile都把變數cnt加1,所以最後只要echo %cnt%即可得到檔案數目
- for-do的詳細用法也請參考reference
Ref:
Post a Comment