问题来源
曾经有一个师弟帮我做了一个简单的加密程序,是一个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