递归地对目录中的所有文件做同一操作 | 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脚本是否支持正则表达式,应该借助正则表达式将这个脚本更新为只对某些类型的文件做操作。


灵感来源

感想

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


后续

今天(2021年10月29日),又碰到这个知识点哦,看我如何把某个文件夹里所有子文件夹、子子文件夹中的PDF文件全部到当前目录下!!!

源代码

for /R %%s in (*.pdf) do (
copy %%s .
)
pause
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容