問題來源
曾經有一個師弟幫我做了一個簡單的加密程序,是一個BAT文件,也就是下面代碼中引用的CC.bat
。現在,我想把D:\test目錄下所有的文件,包括多級嵌套子目錄的文件,都用這個程序來進行一次處理。該怎么做呢?
V1版本
源代碼
set work_path=D:\test
D:
cd %work_path%
for /R %%s in (*) do (
echo %%s
call D:\BAT\CC.bat %%s
)
cd D:\BAT
pause
使用方法
- 在文本編輯器中輸入上述代碼,然后將文件保存為.bat文件,比如,
try.bat
。 - 在cmd窗口中輸入,
try.bat
即可執行。
測試結果
- WinXP
部分可用,對于較長串的文件名有Bug
TODO
將上例中的work_path
改為命令行參數形式
V2版本
考慮到大家已經不喜歡cmd窗口了,我決心把上面的腳本改造成為一個可在窗口中雙擊啟動的版本。
源代碼
for /R %%s in (*) do (
echo %%s
call D:\\CC.bat %%s
)
pause
備注
至于為什么要將CC.bat
放在一個絕對路徑下面,是因為CC.bat
本身的原因,不能與 try.bat
放在同一個目錄下。
使用方法
- 在文本編輯器中輸入上述代碼,然后將文件保存為.bat文件,比如,
try.bat
。 - 把
try.bat
拷貝到你想要操作的那個文件夾。 - 雙擊
try.bat
即可對當前目錄及其子目錄中的所有文件做同一操作。
測試結果
- WinXP
部分可用,對于較長串的文件名有Bug
TODO
不知道DOS腳本是否支持正則表達式,應該借助正則表達式將這個腳本更新為只對某些類型的文件做操作。
靈感來源
- 感謝腳本之家佚名作者的《dos下遍歷目錄和文件的代碼(主要利用for命令)》
- 感謝簡書作者Eurry的《[Markdown 語法說明]》,讓我在1小時內排出這篇優雅的筆記
感想
天下代碼一大抄,為我所用即為高,:)
后續
今天(2021年10月29日),又碰到這個知識點哦,看我如何把某個文件夾里所有子文件夾、子子文件夾中的PDF文件全部擰到當前目錄下!!!
源代碼
for /R %%s in (*.pdf) do (
copy %%s .
)
pause