Evitando a expansão de: no arquivo em lote para loop

1

Tentando criar uma ferramenta cmdline para revisar os conjuntos de alterações do TFS. Atualmente eu tenho isso:

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

O que dá o seguinte resultado:

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

Eu nem sei ao certo porque o: está se transformando em "curr", mas se eu remover / formatar, fico com a mesma coisa acontecendo na / version.

Secundariamente, se eu apenas substituir o: com espaços assumindo que eu lidarei com isso mais tarde, eu recebo este erro

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.

É hora de escrever tfdiffchangeset.pl?

Versão final:

@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
    
por Tom 30.08.2010 / 19:59

1 resposta

1

Tente:

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

De HELP FOR :

To use the FOR command in a batch program, specify %%variable instead
of %variable. Variable names are case sensitive, so %i is different
from %I.

    
por 30.08.2010 / 22:10