前言
公司使用SVN
作为版本管理工具,所以本地磁盘上不可避免地存在了N个项目目录。每天写代码前update
这些目录实在太麻烦了,于是试图让一切自动化起来。
思路
- 只要是
svn
项目路径,其根节点下肯定有一个名为.svn
的隐藏文件夹,其中就保存着相关数据。 - 在根节点下,即与
.svn
同级的目录下,即可执行svn
相关命令进行操作。 - 遍历所有
.svn
目录并进入同级目录,执行相应命令,即可满足自动对机子上所有SVN
文件夹做操作的需求了。
实现
- 确定查找范围
幸运的是,我的所有SVN
目录都归类在同一个大文件夹中。以此文件夹作为起始点即可。 - 如何定位
.svn
目录
定位目录,首先想到经典的dir
命令,阅读命令说明,发现有这样几个参数会派上用场。
- 显示隐藏目录
/adh
,/a
为显示指定属性文件,d
代表目录,h
代表隐藏。 - 显示当前目录和子目录所有文件/文件夹
/s
。 - 不显示信息和摘要
/b
。 - 分类按字母顺序列出
/on
,/o
为分类列出,/n
为按字母顺序。
因此,使用dir /adh/s/b/on .svn
即可找到当前目录内所有.svn
目录。
- 对获取到的
.svn
路径进行操作。
- 循环并对文本进行操作
for /f
- 切分字符串
for /f "delims="
- 循环打印路径
for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i
如此,就可以把上一步获取到的.svn
目录路径全部保存在变量中并打印出来。
- 进入
.svn
目录中for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i
。使用cd
进入变量中的目录,用&&
与上一步做拼接,即上一语句执行完毕后再执行本语句。 - 返回上一级目录。因现在我们处于
.svn
目录内,需要返回上一级即.svn
同级目录才可做SVN
相应命令操作。for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i&&cd ../
,在上一步的结果后拼接上cd ../
即可满足。 - 执行
SVN
相关命令,在上一步结果后继续拼接上svn update
。for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i&&cd ../&&svn up
。 - 完成实现,最终步骤是:找到
.svn
隐藏目录 -> 打印路径 -> 进入其中 -> 返回上一级目录 -> 执行svn update
。
完整批处理脚本
@echo off
#首先进入到所有SVN目录所处的顶层路径
D:&&cd D:\TOP_SVN_DIR
#开始执行查找 -> 遍历 -> 更新
for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i&&cd ../&&svn up
pause
总结
磨刀不误砍柴工
参考资料
[系列教程]批处理for语句从入门到精通