递归地对目录中的所有文件做同一操作 | DOS脚本

问题来源

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

使用方法

  1. 在文本编辑器中输入上述代码,然后将文件保存为.bat文件,比如,try.bat
  2. 在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放在同一个目录下。

使用方法

  1. 在文本编辑器中输入上述代码,然后将文件保存为.bat文件,比如,try.bat
  2. try.bat拷贝到你想要操作的那个文件夹。
  3. 双击try.bat即可对当前目录及其子目录中的所有文件做同一操作。

测试结果

  • WinXP
    部分可用,对于较长串的文件名有Bug

TODO

不知道DOS脚本是否支持正则表达式,应该借助正则表达式将这个脚本更新为只对某些类型的文件做操作。


灵感来源

  • 感谢脚本之家佚名作者的《dos下遍历目录和文件的代码(主要利用for命令)》
  • 感谢作者Eurry的《[Markdown 语法说明]》,让我在1小时内排出这篇优雅的笔记

感想

天下代码一大抄,为我所用即为高,_

你可能感兴趣的:(递归地对目录中的所有文件做同一操作 | DOS脚本)