You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用批处理获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:04:33