Batch file 如何获得';基数';编号为';svn信息&x27;命令由';查找';在Windows批处理文件中筛选?

Batch file 如何获得';基数';编号为';svn信息&x27;命令由';查找';在Windows批处理文件中筛选?,batch-file,svn,Batch File,Svn,我想通过Windows批处理文件中的“svn info”命令获取“BASE”编号,作为以下批处理脚本: svn update for /f "tokens=2" %%i in ('svn info -rBASE^|find "Revision"') do ( @echo %%i set svn_rev=%%i ) 但我总是得到我的svn管理项目代码的“头”号。所以我直接在控制台中尝试了这个命令: >svn info -rBASE Path: AliceAgent4.0b5856 U

我想通过Windows批处理文件中的“svn info”命令获取“BASE”编号,作为以下批处理脚本:

svn update

for /f "tokens=2" %%i in ('svn info -rBASE^|find "Revision"') do (
 @echo %%i
 set svn_rev=%%i
)
但我总是得到我的svn管理项目代码的“头”号。所以我直接在控制台中尝试了这个命令:

>svn info -rBASE
Path: AliceAgent4.0b5856
URL: https://192.168.1.116:3443/svn/ProjectAliceVR/AliceOperationAgent/branches/AliceAgent4.0b5856
Relative URL: ^/AliceOperationAgent/branches/AliceAgent4.0b5856
Repository Root: https://192.168.1.116:3443/svn/ProjectAliceVR
Repository UUID: 794566ed1-6640e-7746-860d-66136dce9e99a
Revision: 5936
Node Kind: directory
Last Changed Author: yuanhui.he
Last Changed Rev: 5933
Last Changed Date: 2019-03-21 15:10:43 +0800 (周四, 21 3月 2019)
版本是
5936
,而不是
5933
。然后,我尝试了
svn
HEAD
参数,它输出了与
BASE
相同的结果:

> svn info -rHEAD
Path: AliceAgent4.0b5856
URL: https://192.168.1.116:3443/svn/ProjectAliceVR/AliceOperationAgent/branches/AliceAgent4.0b5856
Relative URL: ^/AliceOperationAgent/branches/AliceAgent4.0b5856
Repository Root: https://192.168.1.116:3443/svn/ProjectAliceVR
Repository UUID: 794566ed1-6640e-7746-860d-66136dce9e99a
Revision: 5936
Node Kind: directory
Last Changed Author: yuanhui.he
Last Changed Rev: 5933
Last Changed Date: 2019-03-21 15:10:43 +0800 (周四, 21 3月 2019)
编辑:

我尝试了
'svn info-rBASE^| find“Last Changed Rev:”
,但它在批处理脚本中只得到了
Changed
字符串


那么,我如何才能在上次更改的版本号5933行中获得编号?基本上,这个问题有两个问题:

  • 如何获取
    提交的
    编号,而不是
    标题
    编号
  • 如何更正Windows批处理文件中的
    find
    参数以查找正确的结果
老实说,这个问题并没有解决我的问题,但有人回答了我的问题

我想任何人都会发现我的问题,因为他们和我面临着同样的问题。省略时间对他们来说总是很有价值的,所以我把答案安排在这里:

A1:将
BASE
HEAD
更改为
COMMITTED
可以直接获得您想要的:

svn update

for /f "tokens=2" %%i in ('svn info -rCOMMITTED^|find "Revision"') do (
 @echo %%i
 set svn_rev=%%i
)
A2:将循环的
标记的
值更改为
4
,然后将
find
参数更改为
上次更改版本:
。这可以纠正
for
循环的操作,以找到正确的编号。我不熟悉windows批处理纸条,是我的错,@Compo

svn update

for /f "tokens=4" %%i in ('svn info -rHEAD^|find "Last Changed Rev:"') do (
 @echo %%i
 set svn_rev=%%i
)
根据我的评论,

  • 在冒号处拆分输入
  • 使用每个文本文件的模拟输入
  • 将findstr与它的正则表达式功能一起使用
    ^
    在行开始处定位和多个搜索字符串
  • 从行首设置变量名(删除空格)并
  • 使用set/A从数字中删除尾随空格
    (08xx/09xx被解释为八进制时可能会失败)

样本输出:

> SO_55291828.cmd
svn info -rBASE
_LastChangedRev=5933
_Revision=5936

svn info -rHEAD
_LastChangedRev=5933
_Revision=5936

标记的数量
和字符串更改为
find
。可能重复我已看到您的编辑,您似乎没有使用我之前关于更改
标记
或链接副本中显示的代码的评论中的建议,其中至少包含一个
For/F
循环,使用适当的字符串
查找
,并更正
标记数
@Compo,因为我正在尝试您的链接答案并查找一些有用的信息。基本上,这是解决这个问题的两种方法。我建议继续使用
tokens=2
,但使用
delims=:
,然后执行
set/a svn\u rev=%%I
以去掉前导空格。
> SO_55291828.cmd
svn info -rBASE
_LastChangedRev=5933
_Revision=5936

svn info -rHEAD
_LastChangedRev=5933
_Revision=5936