如何将最新的TFS回购变更集编号设置为Windows批处理文件中的变量

时间:2019-01-31 12:01:41

标签: shell batch-file tfs command-line

我正在从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)

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

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

SET Version=%Line:~14,5%

我需要两个问题的帮助:

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

提前谢谢

1 个答案:

答案 0 :(得分: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,然后在获得第二行(技术上现在是第一行)后退出循环:

@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获取版本号。