Thursday, May 20, 2010

Batch file – Delete files by date, count the output of other commands

介紹個相當好用的指令: 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}]

假如某個資料夾下每天都會有一個(以上)檔案產生,並且希望定期清理,只保留一個月份的檔案量時,可以用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
  • 上面即是先以forfile找出10天前的檔案,並丟進去for迴圈內
  • DO裡針對每個forfile都把變數cnt加1,所以最後只要echo %cnt%即可得到檔案數目
  • for-do的詳細用法也請參考reference

Ref:

  1. Forfiles
  2. For(loop)

Comments

0 Responses to "Batch file – Delete files by date, count the output of other commands"

Post a Comment

Tags