1. 程式人生 > >Forfiles 命令說明&用法示例

Forfiles 命令說明&用法示例

FORFILES

forfiles是一款windows平臺的軟體工具,其中選擇檔案並執行一個命令來操作檔案。檔案選擇標準包括名稱和上次修改日期。命令說明符支援一些特殊的語法選項。它可以直接在命令列中使用,也可以在批處理檔案或其他指令碼中使用。

該forfiles命令最初作為載入項提供在Windows NT 資源工具包中。它成為Windows Vista的標準實用程式,作為新管理功能的一部分。

用法

forfiles命令有幾個命令列選項。如果沒有給出選項或引數,它將輸出當前目錄中每個檔案的名稱。

開關 論據 含義
/ P 路徑 用於搜尋檔案的目錄(資料夾)。預設為當前目錄。 不接受UNC路徑(\\ machine \ share)。
/ M 搜尋掩碼 一個glob模式(萬用字元搜尋)。僅選擇檔案與模式匹配的檔案。副檔名包含在檔名中; 不是路徑(資料夾名稱)。模式必須與整個名稱匹配,或使用萬用字元。預設設定是匹配所有檔案。

此選項把glob模式*.**不同。前者僅匹配名稱中帶有點的檔案,而後者甚至匹配沒有點或副檔名的檔案。即使給定*.*模式,大多數DOS / Windows命令也會匹配沒有副檔名的檔案。

/ S (沒有) 選擇子目錄中的匹配檔案。預設情況下,僅搜尋單個指定目錄。
/C 命令 為每個匹配的檔案執行給定的命令。命令字串通常需要用雙引號括起來。請參閱下面的命令字串中的語法。預設命令是CMD /C ECHO @FILE,導致輸出(顯示)每個匹配檔案的名稱。
/ d 日期 根據上次修改日期選擇檔案。請參閱下面的日期語法。預設情況下,無論日期如何,都會選擇檔案。
/? (沒有) 顯示幫助訊息(簡要使用說明)。禁止檔案搜尋/命令執行。不得與任何其他開關一起使用。

命令語法 

除非如下所述,否則命令字串按給定的方式執行。

形式的序列0xFF,其中“0x”是文字,“FF”表示任何兩位十六進位制數,用相應的單位元組值替換。這可用於嵌入非列印ASCII字元或擴充套件ASCII字元。

提供了幾個變數,在命令中用作來自每個檔案的值的佔位符。從技術上講,變數不是必需的,但如果每個檔案的命令都不同,則必須使用變數。

變數 含義
@file 匹配項的名稱,雙引號。
@fname 匹配項的基名(沒有副檔名),雙引號。
@ext 副檔名,雙引號,沒有前導點。如果檔案有多個副檔名,則只返回最後一個。如果檔案沒有副檔名,則返回帶引號的空字串。
@path 匹配項的完整路徑,雙引號,包括驅動器號和副檔名(如果有)。
@relpath 匹配項的路徑,雙引號和相對於起始目錄(由/ P給出)。每個路徑以點和反斜槓(.\)開頭。
@isdir TRUE如果匹配項是目錄,FALSE則計算文字字串,否則。
@fsize 匹配項的大小,以位元組為單位。目錄報告大小為零。
@fdate 上次修改檔案的日期,採用當前使用者的本地化日期格式。
@ftime 上次修改檔案的時間,採用當前使用者的本地化時間格式。

日期語法

在給定日期引數的情況下,日期開關(/ D)根據上次修改日期選擇檔案。

date引數可以作為文字日期給出,格式為MM / DD / YYYY(不接受其他日期格式)。可替代地,日期引數可以被給定為一個數字,在這種情況下,它被認為是指在日齡時(即,天日期當前日期的前幾天)。

如果date引數以減號( - )開頭,則僅選擇在給定日期或之前修改的檔案(較舊的檔案/先前修改過)。否則,僅選擇在給定日期或之後修改的檔案(較年輕的檔案/稍後修改)。可以給出顯式加號(+),但這是預設值。請注意,兩種模式都在給定日期選擇檔案。無法僅在給定日期選擇檔案(也不在之前或之後)。

示例

要列出驅動器 C: 上的所有批處理檔案,請鍵入:

forfiles /p "c:/" /s /m *.bat /c "cmd /c echo @file is a batch file"

要列出驅動器 C: 上的所有目錄,請鍵入:

forfiles /p "c:/" /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

要列出驅動器 C: 上存在時間多於 100 天的所有檔案,請鍵入:

forfiles /p "c:/" /s /m *.* /d t-100 /c "cmd /c echo @file :date >= 100 days"

要列出驅動器 C: 上 1993 年 1 月 1 日以前建立的所有檔案,而且對於日期早於 1993 年 1 月 1 日的檔案顯示“file is quite old!”,請鍵入:

forfiles /p "c:/" /s /m *.* /d t-01011993 /c "cmd /c echo @file is quite old!"

要按列格式列出驅動器 C: 上所有檔案的副檔名,請鍵入:

forfiles /p "c:/" /s /m *.* /c "cmd /c echo extension of @file is [email protected]" With:

要列出驅動器 C: 上的所有批處理檔案,請鍵入:

forfiles /p "c:/" /s /m *.bat /c "cmd /c echo @file is a batch file"

要列出驅動器 C: 上的所有目錄,請鍵入:

forfiles /p c:/ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

要列出驅動器 C: 上存在時間多於 100 天的所有檔案,請鍵入:

forfiles /p c:/ /s /m *.* /d t-100 /c "cmd /c echo @file :date >= 100 days"

要列出驅動器 C: 上 1993 年 1 月 1 日以前建立的所有檔案,而且對於日期早於 1993 年 1 月 1 日的檔案顯示“file is quite old!”,請鍵入:

forfiles /p c:/ /s /m *.* /d t-01011993 /c "cmd /c echo @file is quite old!"

要按列格式列出驅動器 C: 上所有檔案的副檔名,請鍵入:

forfiles /p c:/ /s /m*.* /c "cmd /c echo extension of @file is [email protected]"

刪除D:\db_bak目錄下20天之前的rar檔案,請鍵入:

forfiles /p "D:\ufbak\db_bak" /s /m *.rar /d -20 /c "cmd /c del @path"