Pregunta

Tengo un archivo por lotes que analiza un montón de nombres de archivo de un archivo de texto y los concatena en una única fuerte - se discutió previamente aquí . Sin embargo, no quiero la cadena para contener un archivo si el archivo lanzar un error al ejecutarlo a través de algunos comandos (como un cheque VCS, por ejemplo). Aquí está mi intento:

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
)

El problema es - el guión parece que deja de ejecutar la totalidad de bucle tan pronto como se encuentra una nivel de error mayor que 2. Si hay cinco archivos en la lista y el tercero tiene un problema VCS - el guión sólo mangos los dos primeros.

¿Fue útil?

Solución

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
    )
)

Otros consejos

  

IF ERRORLEVEL construcción tiene una   característica extraña ... que devuelve TRUE si el   código de retorno era igual o mayor   que el errorlevel especificado.

este enlace para entender cómo tratar con esa "característica".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top