¿Cómo verificar el código de salida del último comando en el archivo por lotes?

Respuestas:

78

Pruebe un código de retorno mayor o igual a 1:

if ERRORLEVEL 1 echo Error

o

if %ERRORLEVEL% GEQ 1 echo Error

o prueba un código de retorno igual a 0:

if %ERRORLEVEL% EQU 0 echo OK

Puede usar otros comandos como GOTOdonde muestro echo.

Dennis Williamson
fuente
Probé tu código. Recibí el siguiente error:0 was unexpected this time.
Misha Moroshko el
2
@Misha: Es posible que lo hayas probado con los signos de porcentaje como lo publiqué originalmente. Pruébelo sin ellos o pruebe las otras versiones que agregué.
Dennis Williamson
2
Se encontraron casos donde %ERRORLEVEL%es 0 a pesar de que ocurrió un error. Sucedió al registrar %ERRORLEVEL%un archivo cmd. Intentar start /waitno funcionó. Lo único que funcionó esif errorlevel 1 (...)
AlikElzin-kilaka
44
Tenga en cuenta que errorlevel no es una variable de entorno . Aquí hay un buen resumen de las trampas y sutilezas .
Nick Westgate
¿Puedo sugerir usar en NEQlugar de EQUpara apoyar la detección de códigos de retorno negativos? No tengo idea si Windows XP hace eso, pero es una cosa en Windows moderno ...
binki
10

Esto realmente funciona cuando tiene: llamadas App1.exe -> .bat que se ejecuta -> app2.exe

App2 devuelve el nivel de error 1 ... pero debe detectarlo en el .bat y volver a subirlo a la aplicación1 ... de lo contrario .bat come el nivel de error y app1 nunca lo sabe.

Método:

En .bat:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

Esta es una comprobación después de app2 para errorlevel. Si> 0, el .bat se cierra y establece el nivel de error en 1 para la aplicación que llama1.

Sam Jones
fuente
44
podría ser aún mejor si devolvieras el mismo error a app1. No he intentado esto, pero debería funcionar: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic
2
Al menos en Windows,% ERRORLEVEL% puede ser un número negativo (por ejemplo, tengo un programa que devuelve -1 en caso de errores). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%Podría ser una mejor opción. Pero realmente necesita saber qué devuelve el programa en caso de errores. Algunos programas devuelven ciertos códigos distintos de cero para tipos especiales de éxito.
Euro Micelli
Si app2 es lo último que ejecuta en el archivo bat, el código de error se propagará.
AnrDaemon