forfiles指令介紹

C:Usersxx>forfiles /p e:temp_share /s /m *.* /d -1825 /c “cmd /c echo@path”

在 WINDOWS 下, 若是要將某些檔案做什麼處理的方式, 我通常使用 VBS 的 SCRIPT 來操作, 不過其實還有更方便簡捷的方法, 看到這篇文章 windows server下的檔案處理程式Forfiles , 原來其實在 windows 下還有個這麼方便的檔案列舉工具.

一般最常用的是刪除 log 檔案, 指定目錄, 並指令時間 (例如保留一週, 一週前的刪除), 就可以利用這個指令進行刪除:

forfiles /p c:temp /s /m *.log /d -7 /c “cmd /c del @FILE”

或是列舉出指定目錄下的檔案(非目錄)的名稱列出:

forfiles /p c: /c “cmd /c if @isdir==FALSE echo @FILE”

請注意上面的 “FALSE” 要大寫!

再來看看微軟的官方說明: Forfiles

以下列出該指令的參數說明: (利用 forfiles /? 取得)

FORFILES [/P pathname] [/M searchmask] [/S]
[/C command] [/D [+ | -] {yyyy/MM/dd | dd}]

描述:
選取一個檔案 (或一組檔案),並在檔案上
執行命令。這對批次工作很有幫助。

參數清單:
/P    pathname      表示要開始搜尋的路徑。
預設資料夾是目前的
目錄 (.)。

/M    searchmask    根據 searchmask 搜尋檔案。
預設的 searchmask 是 ‘*’。

/S                  指示 forfiles 遞迴搜尋
子目錄。例如 “DIR /S”。

less..

/C    command       表示每個檔案要執行的命令。
命令字串應該包含在雙括號
之間。預設的命令是 “cmd /c echo @file”。

下列變數可以使用於命令字串:

@file    – 傳回檔案的名稱。
@fname   – 只傳回檔案的名稱,
不傳附檔名。
@ext     – 只傳回檔案的
附檔名。
@path    – 傳回檔案的完整路徑。
@relpath – 傳回檔案的相對
路徑。
@isdir   – 如果檔案類型是目錄的話,
傳回 “TRUE”,如果是檔案
的話,傳回 “FALSE”。
@fsize   – 傳回檔案的大小,
單位是位元組。
@fdate   – 傳回檔案上次修改的
日期。
@ftime   – 傳回檔案上次修改
的時間。

要在命令列中包含特殊字元的話,
請使用 0xHH 格式的十六
進位字元碼 (例如 0x09 代表 tab)。
內部的 CMD.exe 命令應該
以 “cmd /c” 執行。

/D    date          選取檔案上次修改的時間大於、
等於 (+) 或小於或等於 (-)、
使用 “yyyy/MM/dd” 格式表示指定的日期;
或選取檔案日期上次修改
的時間大於或等於 (+)
目前的日期再加上”dd” 天、
小於或等於 (-) 目前的日期減去 “dd” 天。
有效的 “dd” 可以是介於
0 – 32768 之間的數字。
如果未指定,”+” 將被視為預設符號。

/?                  顯示這個說明訊息。

範例:
FORFILES /?
FORFILES
FORFILES /P C:WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C “cmd /c type @file | more”
FORFILES /P C: /S /M *.bat
FORFILES /D -30 /M *.exe
/C “cmd /c echo @path 0x09 was changed 30 days ago”
FORFILES /D 2001/01/01
/C “cmd /c echo @fname is new since Jan 1st 2001”
FORFILES /D +2008/7/13 /C “cmd /c echo @fname is new today”
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C “cmd /c echo @fsize”
FORFILES /M *.txt /C “cmd /c if @isdir==FALSE notepad.exe @file”

refer by http://diary.tw/tim/531#recentTrackback

Leave a Reply