Pergunta

Eu tenho um arquivo de lote que analisa um monte de nomes de arquivos a partir de um arquivo de texto e concatena-los em uma forte único - foi previamente discutida aqui . No entanto, eu não quero a corda para conter um arquivo se o arquivo de lançar um erro quando eu executá-lo através de alguns comandos (como um cheque VCS, por exemplo). Aqui está a minha tentativa:

set FILE_LIST=
for /f %%x in (temp.txt) do (

:: perform a VCS test
accurev diff -b %%x

:: skip concatenation if error level is > 2
IF errorlevel 2 GOTO NEXT

:: perform the concatenation
set FILE_LIST=!FILE_LIST! %%x

:NEXT
:: print a message if here due to an error above
IF errorlevel 2 echo VCS problem with this file: %%x
)

O problema é - o roteiro parece parar de executar todo o ciclo for, logo que ele encontrar um maior errorlevel que 2. Se houver cinco arquivos na lista e um terceiro tem um problema VCS - o script apenas alças os dois primeiros.

Foi útil?

Solução

setlocal ENABLEDELAYEDEXPANSION
set FILE_LIST=
for /f %%x in (temp.txt) do (
    accurev diff -b "%%~x"
    IF errorlevel 2 (
        echo VCS problem with this file: %%~x
    ) ELSE (
        set FILE_LIST=!FILE_LIST! %%x
    )
)

Outras dicas

IF ERRORLEVEL construction has one strange feature... it returns TRUE if the return code was equal to or higher than the specified errorlevel.

Reference this link to understand how to deal with that "feature".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top