如何在Windows批处理文件中通过'find'过滤器使用'svn info'命令获取'BASE'号码?

问题描述 投票:1回答:2

我想在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之外,59365933。然后,我尝试了HEADsvn参数,它输出与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的数字?

batch-file svn base info
2个回答
1
投票

基本上,这个问题有两个问题:

  • 如何获得COMMITTED数字以外的HEAD数字。
  • 如何更正Windows批处理文件中的find参数以查找正确的结果。

老实说,问题How do you determine the latest SVN revision number rooted in a directory?并没有解决我的问题,但有些机构回答了我的问题。

我想有人在这里找到我的问题是因为他们面临着同样的问题。省略时间总是有价值的,所以我在这里安排了答案:

A1:将BASEHEAD改为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
)

0
投票

根据我的评论,

  • 将输入分割为冒号
  • 使用每个文本文件的模拟输入
  • 使用findstr的RegEx功能^锚在第一行和多个搜索字符串
  • 从行首开始设置变量名(删除空格)和
  • 使用set / A从数字中删除尾随空格 (可能会因08xx / 09xx被解释为八进制而失败)

:: 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
© www.soinside.com 2019 - 2024. All rights reserved.