背景
需要查询svn上特定日期后后修改的文件和文件夹列表。
通过bat脚本的方式。
方式一
通过svn diff 命令获取目录列表
缺点:获取的中文路径为转换字符,需要将路径字符转格式。
svn diff -r {2018-10-30} --summarize http://192.168.xx.xx:xxx/svn/xx/trunk/xx > changedfiles.txt
结果:
http://144.13**/%E6%B2%B3%E5%8C%97/%E5%BB%8A%E5%9D%8A%E4%B8%9C%E6%9D%B0%E7%89%B9%E7%BE%8E%E8%BF%9E%E9%94%81%E8%B6%85%E5%B8%82MIS%E9%A1%B9%E7%9B%AE/doc/06%20MIS%E7%BB%8F%E5%85%B8%E6%A1%88%E4%BE%8B%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A%EF%BC%88%E7%B3%BB%E7%BB%9F%E7%BB%8F%E5%85%B8%E6%B5%8B%E8%AF%95%E6%A1%88%E4%BE%8B%EF%BC%89.xls
参考连接svn diff
方式二
通过svn list 命令
无法直接获取特定时间后的文件列表,需要通过excel手动转化,或者再写个脚本匹配时间
下面的脚本工作原理
1.匹配特定的文件夹,doc结尾
svn list -R %var% --verbose |findstr ".*/doc/$" >>temp.txt
2.分割文件中的一行
for /f "tokens=1-3,*" %%i in (temp.txt)
3.获取分割结果%%l中二次分割的最后一个结果last
for %%A in (%%l) do set last=%%A
4.将分割第一次分割字符串的结果和第二次分割字符串的结果拼接输出
echo %%i,%%j,%%k,%var%/!last!>>list.csv
原代码:
@echo 先删除其他文件
del temp.txt
del list.csv
@echo 开始生成filelist清单
set var=http://******/cyyang1
echo 路径:%var%
svn list -R %var% --verbose |findstr ".*/doc/$" >>temp.txt
for /f "tokens=1-3,*" %%i in (temp.txt) do (
setlocal enabledelayedexpansion
for %%A in (%%l) do set last=%%A
echo %%i,%%j,%%k,%var%/!last!>>list.csv
)
pause
注意:
1.setlocal enabledelayedexpansion 设置局部变量可被其他地方使用,使用方式为!变量名!
2.tokens=1-3,* 将结果分割为四份,其中%%i第一份部分,%%l为第四部分
参考连接:
https://www.cnblogs.com/princessd8251/articles/3859021.html
https://www.cnblogs.com/yajing-zh/p/4702613.html
https://www.jb51.net/article/29323.htm