如何用批处理获取SVN用户列表?无需第三方工具
解决批处理提取SVN日志中用户名的问题
你的问题出在两个关键地方:一是findstr的正则语法不支持你用的非贪婪匹配和捕获组,二是for /f的默认分隔符会拆分匹配结果,导致拿不到正确内容。咱们一步步来修复:
问题分析
findstr的局限性:批处理自带的findstr只支持基础正则规则,不支持(.*?)这种非贪婪匹配语法,而且在/r模式下|是特殊的“或”运算符,你原来的写法根本没法正确匹配|之间的内容。for /f的默认行为:即使findstr能匹配到目标行,for /f默认会把空格、制表符当成分隔符,%%a只会拿到第一个分隔符前的内容(也就是日志编号),自然看不到用户名。
正确的批处理实现
我们可以利用for /f的delims和tokens参数直接拆分目标行,不需要依赖复杂的正则:
方法1:用延迟扩展去除空格
@echo off for /f "tokens=2 delims=|" %%a in ('svn log -q ^| findstr "|"') do ( set "username=%%a" setlocal enabledelayedexpansion echo !username: =! endlocal )
方法2:嵌套for /f去除前导空格(无需延迟扩展)
@echo off for /f "tokens=2 delims=|" %%a in ('svn log -q ^| findstr "|"') do ( for /f "tokens=*" %%b in ("%%a") do echo %%b )
代码解释
svn log -q ^| findstr "|":先过滤出包含|的行(也就是实际的日志条目行,排除那些全是横线的分隔线)。"tokens=2 delims=|":把每行按|分割,提取第2个部分(也就是前后带空格的用户名,比如John Doe)。- 内层的处理(延迟扩展或嵌套
for):用来去除用户名前后的空格,得到干净的nameOfPerson。
这样就能准确提取出你需要的用户名了!
内容的提问来源于stack exchange,提问作者Kyle Donaldson
相关产品推荐
相关产品推荐

