【问题标题】:How to set the latest TFS repo changeset number into a variable in windows batch file如何将最新的 TFS 存储库变更集编号设置为 Windows 批处理文件中的变量
【发布时间】:2019-06-24 21:19:53
【问题描述】:

我正在从 TFS 获取我的项目的最新更改并运行静态代码分析。我想用结果保存最新的变更集。我想在 Windows 批处理文件中使用它。

这是我获取最新版本的方式:

"%VSINSTALLDIR%Common7\IDE\TF.exe" get $/%ProjectName% /recursive

我检查最新的变更集编号:

"%VSINSTALLDIR%Common7\IDE\TF.exe" localversions %ProjectName%

上述命令的输出如下:

C:\Projects\VeriPark:
ProjectName;C23456

1 item(s)

我想将版本变量设置为最新的变更集编号。 (根据上面的输出,版本=23456)。如果可能的话,我不喜欢将输出保存到临时文件中。即使我将其保存到 version.txt 文件中,我也无法获得第二行。

当输出到一个文件中时,我可以用 for 语句读取它。但是我无法获得第二行。得到第二行后,我可以解析版本号,如下所示:

SET Version=%Line:~14,5%

我需要帮助解决两个问题:

  1. 如何在不使用临时文件的情况下在批处理文件中获取命令的输出(第二个 localversion 命令)?
  2. 如何解析多行变量以获取请求的行(获取第二行,或以项目名称开头的行)?

提前谢谢你

【问题讨论】:

  • 我很难测试这个,但你可以运行一个循环,我会发布一个答案,你必须为我测试它。
  • 感谢@GerhardBarnard 对其进行调查。我找到了第一个问题的答案。计算行并输出它们我可以得到第一行和最后一行,但不是中间行。我正在研究 for 循环的 delims 和 token。

标签: shell batch-file tfs command-line


【解决方案1】:

您可以从 cmdline 执行类似的操作:

for /f "skip=1 tokens=1,* delims=;" %i in ('"%VSINSTALLDIR%Common7\IDE\TF.exe" localversions %ProjectName%') do echo %j

如果你想创建一个批处理文件,那么:

@echo off
for /f "skip=1 tokens=1,* delims=;" %%i in ('"%VSINSTALLDIR%Common7\IDE\TF.exe" localversions %ProjectName%') do echo %%j

要将其设置为永久环境变量,您可以查看setx,但请注意不要使用现有的系统或用户环境变量。应该是这样的:

@echo off
for /f "skip=1 tokens=1,* delims=;" %%i in ('"%VSINSTALLDIR%Common7\IDE\TF.exe" localversions %ProjectName%') do setx SOMEVAR %%j

最后,如果它没有达到预期的效果,我们跳过第 1 行,然后在我们得到第二行(技术上现在是第 1 行)后退出循环:

@echo off
for /f "skip=1 tokens=1,* delims=;" %%i in ('"%VSINSTALLDIR%Common7\IDE\TF.exe" localversions %ProjectName%') do setx SOMEVAR %%j & goto :EOF

总结:

  1. 可以循环输出命令而不保存到临时文件。
  2. 以下会将确切的行放入变量中。

    for /f "tokens=1* delims=:" %%G in ('"%VSINSTALLDIR%Common7\IDE\TF.exe" localversions %ProjectName%') do if %%G equ 3 set Line=%%H
    SET Version=%Line:~11,5%
    ECHO %Version%
    

此代码将读取第 3 行并将其设置为我从中解析版本号的 Line 变量。以上行将显示从 TFS 获取的版本号。

【讨论】:

  • 谢谢@GerhardBernard。我首先尝试了与此类似的版本,但我无法得到我想要的确切线路。正如你回答的那样,delims 部分丢失了。我将编辑您的答案以提供更多信息。请随时再次编辑。
  • 只需检查最终更改,然后随意编辑,我会在需要的地方进行修改。
  • 将最终工作代码添加到您的答案中并设置为已接受的答案。
猜你喜欢
  • 2012-07-07
  • 2018-03-07
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多