Como verificar o código de saída do último comando no arquivo em lotes?

Respostas:

78

Teste para um código de retorno maior ou igual a 1:

if ERRORLEVEL 1 echo Error

ou

if %ERRORLEVEL% GEQ 1 echo Error

ou teste para um código de retorno igual a 0:

if %ERRORLEVEL% EQU 0 echo OK

Você pode usar outros comandos, como GOTOonde eu mostro echo.

Dennis Williamson
fonte
Eu tentei o seu código. Eu recebi o seguinte erro:0 was unexpected this time.
Misha Moroshko
2
@Misha: Você pode ter tentado com os sinais de porcentagem da maneira que eu originalmente postei. Experimente sem eles ou tente as outras versões que adicionei.
Dennis Williamson
2
Casos encontrados em que %ERRORLEVEL%0 é o mesmo que ocorreu um erro. Aconteceu ao fazer o check- %ERRORLEVEL%in de um arquivo cmd. Tentar start /waitnão funcionou. A única coisa que funcionou éif errorlevel 1 (...)
AlikElzin-kilaka 13/04/2015
4
Esteja ciente de que errorlevel não é uma variável de ambiente . Aqui está um bom resumo das armadilhas e sutilezas .
Nick Westgate
Posso sugerir o uso em NEQvez de EQUpara suportar a detecção de códigos de retorno negativos? Não faço ideia se o Windows XP faz isso, mas é uma coisa em Windows moderno ...
binki
10

Isso realmente funciona quando você tem: App1.exe chama -> .bat que é executado -> app2.exe

App2 retorna o nível de erro 1 ... mas você precisa capturá-lo no .bat e aumentá-lo novamente para app1 ... caso contrário, o .bat come o nível de erro e o app1 nunca sabe.

Método:

Em .bat:

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

Esta é uma verificação após app2 para o nível de erro. Se> 0, o .bat sai e define o nível de erro como 1 para o aplicativo de chamada1.

Sam Jones
fonte
4
poderia ser ainda melhor se você retornasse o mesmo erro de volta ao app1. eu não tentar fazer isso, mas ele deve funcionar: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic
2
Pelo menos no Windows,% ERRORLEVEL% pode ser um número negativo (por exemplo, eu tenho um programa que retorna -1 com erros). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%pode ser uma opção melhor. Mas você realmente precisa saber o que o programa retorna com erros. Alguns programas retornam certos códigos diferentes de zero para tipos especiais de sucesso.
Euro Micelli
Se app2 for a última coisa que você executa no arquivo bat, o código de erro será propagado.
AnrDaemon 5/07