forfiles 命令是 Windows 作業系統中的一個命令列工具,用於在指定的檔案集合上執行特定的操作。 它允許使用者按照檔名、資料夾、檔案大小、修改日期等條件來篩選檔案,並對符合條件的檔案執行使用者指定的命令自動化檔案操作任務

suv789發表於2024-03-30

forfiles 命令是 Windows 作業系統中的一個命令列工具,用於在指定的檔案集合上執行特定的操作。

它允許使用者按照檔名、資料夾、檔案大小、修改日期等條件來篩選檔案,並對符合條件的檔案執行使用者指定的命令。

通常情況下,forfiles 命令常用於批處理檔案(.bat 或 .cmd 檔案)中,用於自動化檔案操作任務。

例如,你可以使用 forfiles 來定期清理資料夾中的舊檔案,批次修改檔名,或執行其他需要對檔案進行批次處理的任務。

為什麼使用 forfiles 命令呢?主要原因包括:

  1. 自動化檔案處理任務:透過編寫簡單的批處理指令碼,可以自動化重複性的檔案處理任務,提高效率。

  2. 靈活性forfiles 命令提供了豐富的選項和引數,可以根據不同的條件選擇檔案,並執行使用者定義的命令。

  3. 批次處理:能夠批次處理大量檔案,避免手動操作的繁瑣和出錯風險。

  4. 時間節省:尤其適用於需要定期執行的任務,能夠節省大量的時間和人力成本。

forfiles 命令是 Windows 系統中一種強大的工具,可以幫助使用者高效地管理和處理檔案。


forfiles 命令最早出現在 Windows NT 4.0 的資源工具包(Windows NT 4.0 Resource Kit)中。這個工具包是一個由微軟釋出的附加軟體集合,提供了一些高階的系統管理工具和實用程式,用於增強 Windows NT 4.0 作業系統的功能和管理效能。

forfiles 命令的設計初衷是為了提供一種能夠在命令列中對檔案進行批次處理的機制,這在系統管理員和指令碼開發人員中得到了廣泛的歡迎。隨著後續 Windows 版本的推出,forfiles 命令也被保留並整合到了 Windows 作業系統的標準命令列工具中,成為了 Windows 系統中的一個常用命令。

隨著時間的推移,forfiles 命令的功能和引數也逐漸得到了擴充套件和增強,使其更加強大和靈活,以滿足使用者對檔案批處理的不同需求。因此,forfiles 命令可以說是從 Windows NT 4.0 Resource Kit 起源,並隨後成為 Windows 系統中的一個重要命令工具。


forfiles 命令在其發展過程中經歷了幾個階段,主要包括功能擴充套件和引數增加,以滿足使用者日益增長的檔案批處理需求。以下是 forfiles 命令的主要發展階段:

  1. Windows NT 4.0 Resource Kitforfiles 命令最初出現在 Windows NT 4.0 資源工具包中。在這個階段,它提供了基本的檔案選擇和命令執行功能,使使用者能夠按照檔名、資料夾、檔案大小、修改日期等條件選擇檔案,並對選定的檔案執行特定的命令。

  2. Windows XP 和 Windows Server 2003: 隨著 Windows XP 和 Windows Server 2003 的推出,forfiles 命令得到了進一步的改進和最佳化。在這個階段,forfiles 命令增加了更多的選項和引數,以增強其靈活性和功能性。例如,可以使用 /D 引數指定日期條件,選擇符合特定日期範圍的檔案。

  3. Windows Vista 和 Windows Server 2008: 隨著 Windows Vista 和 Windows Server 2008 的釋出,forfiles 命令繼續得到改進和擴充套件。在這個階段,forfiles 命令引入了更多的命令列選項,以及對特殊字元和內部命令的支援。這使得使用者能夠更加靈活地編寫複雜的批處理指令碼。

  4. Windows 7、Windows 8、Windows 10 和 Windows Server 20XX: 在後續的 Windows 版本中,forfiles 命令保持了穩定的發展,並逐步完善了其功能和效能。雖然在這些版本中並沒有顯著的新功能新增,但對效能進行了最佳化,並修復了一些已知的問題和 bug。

forfiles 命令在其發展過程中不斷增強和改進,以適應使用者對檔案批處理功能的不斷變化和增長的需求。它成為了 Windows 系統中一個功能強大、靈活實用的檔案處理工具。


forfiles 命令在 Windows 環境中有許多應用場景,特別是在需要對檔案進行批次處理和管理的情況下。以下是一些常見的 forfiles 命令的應用場景:

  1. 定期備份或清理舊檔案: 使用 forfiles 命令可以輕鬆地選擇並備份或刪除舊檔案。例如,可以編寫一個批處理指令碼,定期執行,將超過一定日期的檔案備份到其他位置,或者刪除它們以釋放磁碟空間。

  2. 批次重新命名檔案: 當需要批次重新命名檔案時,forfiles 命令是一個非常有用的工具。透過結合使用 forfiles 命令和其他命令(如 ren),可以根據特定的條件批次修改檔名。

  3. 檔案屬性更改: 可以使用 forfiles 命令來更改檔案的屬性,如修改檔案的訪問時間、建立時間等。這在某些情況下可能很有用,比如需要模擬檔案的最後訪問時間等。

  4. 批次壓縮或解壓檔案: 如果需要將多個檔案壓縮成一個壓縮包,或者需要批次解壓檔案,forfiles 命令可以幫助選擇並執行這些操作。

  5. 檔案型別轉換: 在某些情況下,可能需要將一批檔案從一種格式轉換為另一種格式。forfiles 命令可以用來選擇特定型別的檔案,並對它們進行轉換,例如將一組圖片檔案轉換為另一種格式。

  6. 批次執行命令forfiles 命令可以與其他命令結合使用,批次執行特定的命令或操作。這可以用於自動化一些重複性的任務,提高工作效率。

  7. 日誌記錄和報告生成: 可以使用 forfiles 命令來選擇一組檔案,並將它們的資訊記錄到日誌檔案中,或者生成報告。這在進行系統維護、日誌分析等方面非常有用。

forfiles 命令是一個功能強大的工具,可以用於各種檔案批處理和管理任務,幫助使用者自動化處理檔案,提高工作效率。


forfiles 命令還可以用於一些更高階的應用場景,結合其他命令和技巧,可以實現更復雜的檔案處理和管理任務。以下是一些 forfiles 命令的高階應用場景:

  1. 基於檔名或檔案路徑的條件選擇: 可以使用 forfiles 命令基於檔名模式或檔案路徑來選擇檔案。這對於需要根據特定模式選擇檔案的情況非常有用,例如選擇以特定字首或字尾開頭的檔案,或者選擇特定資料夾下的檔案。

  2. 基於檔案大小的條件選擇forfiles 命令可以根據檔案大小來選擇檔案。這對於需要根據檔案大小進行篩選和處理的情況非常有用,例如選擇大於或小於特定大小的檔案。

  3. 與其他命令的結合應用forfiles 命令可以與其他命令(如 movecopydel 等)結合使用,以實現更復雜的檔案處理任務。例如,可以使用 forfiles 命令選擇一組檔案,並將它們複製到另一個目錄中。

  4. 定時任務: 可以將 forfiles 命令與 Windows 的任務計劃程式結合使用,建立定時任務來執行特定的檔案處理操作。這使得可以自動化一些重複性的檔案管理任務,無需手動干預。

  5. 批次處理檔案內容forfiles 命令可以與其他文字處理工具(如 findstrsed 等)結合使用,對一組檔案的內容進行批次處理。例如,可以使用 forfiles 命令選擇一組文字檔案,並在它們的內容中查詢特定的字串。

  6. 生成檔案清單: 可以使用 forfiles 命令生成檔案清單,將選定的檔案資訊輸出到文字檔案中。這對於需要記錄檔案資訊或生成報告的情況非常有用。

  7. 與 PowerShell 指令碼結合應用forfiles 命令可以與 PowerShell 指令碼結合使用,利用 PowerShell 的更強大的指令碼編寫和處理能力,實現更復雜的檔案處理任務。

這些高階應用場景需要一定的命令列和指令碼編寫技能,但可以幫助使用者更靈活、高效地處理和管理檔案。

forfiles /?

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

Description:
Selects a file (or set of files) and executes a
command on that file. This is helpful for batch jobs.

Parameter List:
/P pathname Indicates the path to start searching.
The default folder is the current working
directory (.).

/M searchmask Searches files according to a searchmask.
The default searchmask is '*' .

/S Instructs forfiles to recurse into
subdirectories. Like "DIR /S".

/C command Indicates the command to execute for each file.
Command strings should be wrapped in double
quotes.

The default command is "cmd /c echo @file".

The following variables can be used in the
command string:
@file - returns the name of the file.
@fname - returns the file name without
extension.
@ext - returns only the extension of the
file.
@path - returns the full path of the file.
@relpath - returns the relative path of the
file.
@isdir - returns "TRUE" if a file type is
a directory, and "FALSE" for files.
@fsize - returns the size of the file in
bytes.
@fdate - returns the last modified date of the
file.
@ftime - returns the last modified time of the
file.

To include special characters in the command
line, use the hexadecimal code for the character
in 0xHH format (ex. 0x09 for tab). Internal
CMD.exe commands should be preceded with
"cmd /c".

/D date Selects files with a last modified date greater
than or equal to (+), or less than or equal to
(-), the specified date using the
"yyyy-MM-dd" format; or selects files with a
last modified date greater than or equal to (+)
the current date plus "dd" days, or less than or
equal to (-) the current date minus "dd" days. A
valid "dd" number of days can be any number in
the range of 0 - 32768.
"+" is taken as default sign if not specified.

/? Displays this help message.

Examples:
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 +2024-3-30 /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"

FORFILES [/P 路徑名] [/M 搜尋掩碼] [/S] [/C 命令] [/D [+ | -] {yyyy-MM-dd | dd}]

說明: 選擇一個檔案(或一組檔案)並對該檔案執行命令。這對於批處理作業很有用。

引數列表: /P 路徑名 指示開始搜尋的路徑。 預設資料夾是當前工作目錄(.)。

/M    搜尋掩碼       根據搜尋掩碼搜尋檔案。
                     預設搜尋掩碼是'*'。

/S                   指示 forfiles 遞迴進入子目錄。類似於 "DIR /S"。

/C    命令           指示對每個檔案執行的命令。
                     命令字串應該用雙引號括起來。

                     預設命令是 "cmd /c echo @file"。

                     可以在命令字串中使用以下變數:
                     @file    - 返回檔案的名稱。
                     @fname   - 返回檔名(不包括副檔名)。
                     @ext     - 返回檔案的副檔名。
                     @path    - 返回檔案的完整路徑。
                     @relpath - 返回檔案的相對路徑。
                     @isdir   - 如果檔案型別是目錄,則返回 "TRUE",對於檔案則返回 "FALSE"。
                     @fsize   - 返回檔案的大小(以位元組為單位)。
                     @fdate   - 返回檔案的上次修改日期。
                     @ftime   - 返回檔案的上次修改時間。

                     要在命令列中包含特殊字元,請使用字元的十六進位制程式碼,格式為 0xHH(例如,製表符的程式碼是 0x09)。內部 CMD.exe 命令應該以 "cmd /c" 開頭。

/D    日期           選擇上次修改日期大於或等於(+)指定日期,或小於或等於(-)指定日期的檔案,使用 "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 +2024-3-30 /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"

相關文章