Назад | Перейти на главную страницу

Предотвращение расширения: в пакетном файле для цикла

Попытка создать инструмент cmdline для просмотра наборов изменений TFS. В настоящее время у меня есть это:

rem I know there's redundancy here, but don't care for now
set /A curr=%1
set /A prev=%curr%
set /A prev-=1

for /f "tokens=2" %g in ('tf changeset /noprompt %curr%') do tf diff /noprompt /format:unified /version:C%prev%~C%curr% %g

Что дает следующий результат:

g:\>tfdiffchangeset.bat 2458
currunified was unexpected at this time.

Я даже не уверен, почему: превращается в curr, но если я удалю / format, то же самое происходит и с / version.

Во-вторых, если я просто заменю: на пробелы, предполагая, что с этим разберусь позже, я получаю эту ошибку

g:\>tfdiffchangeset.bat 2458
The following usage of the path operator in batch-parameter
substitution is invalid: %~C%curr% %g

For valid formats type CALL /? or FOR /?
The syntax of the command is incorrect.

Пора писать tfdiffchangeset.pl?

Окончательный вариант:

@ECHO off

set /A CURR=%1
rem Note - just using one changeset less doesn't necessarily work, because branches also use the same changeset numbers
set /A PREV=%CURR%-1

echo diffs for %CURR%

tf changeset /noprompt %CURR%

for /f "tokens=2" %%g in ('tf changeset /noprompt %CURR%') do tf diff /noprompt /format:unified /version:"C%PREV%~C%CURR%" %%g

Пытаться:

for /f "tokens=2" %%g in ('tf changeset /noprompt %curr%') do tf diff /noprompt /format:unified /version:C%prev%~C%curr% %%g

Из HELP FOR:

Чтобы использовать команду FOR в пакетной программе, укажите вместо нее переменную %%
% переменной. Имена переменных чувствительны к регистру, поэтому% i отличается
от% I.