我想在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托管项目代码的'HEAD'号码。所以我直接在控制台中尝试了这个命令:
>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)
除了Revision
之外,5936
是5933
。然后,我尝试了HEAD
的svn
参数,它输出与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
线上得到Last Changed Rev: 5933
的数字?
基本上,这个问题有两个问题:
COMMITTED
数字以外的HEAD
数字。find
参数以查找正确的结果。老实说,问题How do you determine the latest SVN revision number rooted in a directory?并没有解决我的问题,但有些机构回答了我的问题。
我想有人在这里找到我的问题是因为他们面临着同样的问题。省略时间总是有价值的,所以我在这里安排了答案:
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:将for
循环的tokens
值更改为4
,然后将find
参数更改为Last Changed Rev:
。这可以纠正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
)
根据我的评论,
^
锚在第一行和多个搜索字符串:: Q:\Test\2019\03\22\SO_55291828.cmd
@Echo off&Setlocal EnableDelayedExpansion
::svn update
Echo svn info -rBASE
for /f "tokens=1-2delims=:" %%i in ('
type svn_info-rBASE ^|findstr "^Last.Changed.Rev ^Revision"
') do (
Set "var=%%i"
set /A "_!var: =!=%%j"
)
Set _
Echo:
Echo svn info -rHEAD
for /f "tokens=1-2delims=:" %%i in ('
type svn_info-rHEAD ^|findstr "^Last.Changed.Rev ^Revision"
') do (
Set "var=%%i"
set /A "_!var: =!=%%j"
)
Set _
样本输出:
> SO_55291828.cmd
svn info -rBASE
_LastChangedRev=5933
_Revision=5936
svn info -rHEAD
_LastChangedRev=5933
_Revision=5936