前言

公司使用SVN作为版本管理工具,所以本地磁盘上不可避免地存在了N个项目目录。每天写代码前update这些目录实在太麻烦了,于是试图让一切自动化起来。

思路

  1. 只要是svn项目路径,其根节点下肯定有一个名为.svn的隐藏文件夹,其中就保存着相关数据。
  2. 在根节点下,即与.svn同级的目录下,即可执行svn相关命令进行操作。
  3. 遍历所有.svn目录并进入同级目录,执行相应命令,即可满足自动对机子上所有SVN文件夹做操作的需求了。

实现

  1. 确定查找范围
    幸运的是,我的所有SVN目录都归类在同一个大文件夹中。以此文件夹作为起始点即可。
  2. 如何定位.svn目录
    定位目录,首先想到经典的dir命令,阅读命令说明,发现有这样几个参数会派上用场。
  • 显示隐藏目录/adh/a为显示指定属性文件,d代表目录,h代表隐藏。
  • 显示当前目录和子目录所有文件/文件夹/s
  • 不显示信息和摘要/b
  • 分类按字母顺序列出/on/o为分类列出,/n为按字母顺序。

因此,使用dir /adh/s/b/on .svn即可找到当前目录内所有.svn目录。

  1. 对获取到的.svn路径进行操作。
  • 循环并对文本进行操作for /f
  • 切分字符串for /f "delims="
  • 循环打印路径for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i

如此,就可以把上一步获取到的.svn目录路径全部保存在变量中并打印出来。

  1. 进入.svn目录中for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i。使用cd进入变量中的目录,用&&与上一步做拼接,即上一语句执行完毕后再执行本语句。
  2. 返回上一级目录。因现在我们处于.svn目录内,需要返回上一级即.svn同级目录才可做SVN相应命令操作。for /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i&&cd ../,在上一步的结果后拼接上cd ../即可满足。
  3. 执行SVN相关命令,在上一步结果后继续拼接上svn updatefor /f "delims=" %%i in ('dir /adh/b/s/on .svn') do echo %%i&&cd %%i&&cd ../&&svn up
  4. 完成实现,最终步骤是:找到.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语句从入门到精通