我正在从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%
我需要两个问题的帮助:
提前谢谢
答案 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
总结:
以下操作会将确切的行放入变量中。
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获取版本号。