使用 for 與 forfiles 命令來篩選多種檔案類型

記一個小技巧:搭配 for 命令來讓 forfiles 篩選多種檔案類型。


Windows 的 forfiles 命令有一個 /M 參數可以指定搜尋檔案時的遮罩,以便篩選檔案名稱,但是它允許一個遮罩,例如以下命令將列出當前目錄下的所有 *.docx 類型的檔案名稱:


forfiles /M *.docx 


實際應用時,比如說,我可能想要用這個命令來建立一個檔名列表 filelist.txt,然後把這個 filelist .txt 喂給 7-zip 來執行壓縮,以便執行一些日常的簡易備份工作。


為了產生這個「需要備份的檔名列表」,在單純使用 forfiles 命令的情況下,批次檔案中必須寫一堆相似的命令,像這樣:



除了剛才提到的 /M 參數,這次還加上了兩個參數:
  • /S 代表要搜尋子目錄。
  • /D 代表要指定日期篩選條件。上述範例的 "+2021/01/01" 意思是只撈 2021/01/01 那天以及之後有修改的檔案。官方文件有更詳細的說明與範例。

如果搭配 for 命令,上面一堆重複的命令就可以縮減為一行。以下範例為了排版美觀而刻意寫成兩行命令:


有兩個地方要特別注意:
  1. 如果是把 for 命令寫在批次檔(.bat)裡面,那麼上面範例中的 %m 要寫成 %%m,也就是用兩個連續的 % 符號。
  2. for 命令的 <set> 參數,也就是上面範例中的 (.txt, .pdf, .xls,....),裡面的檔案類型不可加上 * 號,否則 for 命令會把它們當成檔案來處理。在這個範例當中,我們需要在 for 的集合參數中使用單純字串,而不希望把它當成檔案來處理。在第 4 行,也就是 for 命令的 do 子句當中,會再加上 * 號來組成檔名遮罩。

需要備份的檔名列表建立好之後,便可以喂給壓縮工具,例如:

"c:\Program Files\7-Zip\7z" a -r -y backup.7z @filelist.txt

完成!

沒有留言:

技術提供:Blogger.
回頂端⬆️