Как установить последний номер набора изменений репо TFS в переменную в пакетном файле Windows - PullRequest
0 голосов
/ 31 января 2019

Я получаю последние изменения моего проекта из 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. Как проанализировать многострочную переменную, чтобы получить запрошенную строку (получение второй строки или строка начинается с имени проекта)?

Спасибозаранее

1 Ответ

0 голосов
/ 31 января 2019

Вы можете сделать что-то подобное из 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-ю строку и установит в нее переменную строки, с которой я проанализировал номер версии.Над строками отобразится номер версии получения из TFS.

...