windows – What is the most appropriate way to test the ERRORLEVEL in batch?

Question:

I've seen several ways of testing the ERRORLEVEL in batch scripts. Some of them are dangerous and some are wrong, but sometimes they go unnoticed. Here are some examples I know of:

Dangerous: the test works as "greater than or equal to 1", ignoring negative returns (used in "C" programs). Here you don't have to worry about the block expansion limitation.

if errorlevel 1 (
   echo Comando executado com problema
)

Wrong: the test works as "greater than or equal to 0", indicating true for return with or without error

if errorlevel 0 (
   echo Comando executado com sucesso
)

Doubtful: tests the result of executing a command or batch with success and error, respectively. This form is interesting, but it has the issue of limiting expansion in IF/FOR blocks, etc.

if "%ERRORLEVEL%"=="0" (
   echo Comando executado com sucesso
)

if not "%ERRORLEVEL%"=="0" (
   echo Comando executado com problema
)
  • Which of these ways is more suitable?
  • Is there an even better way not mentioned?

Answer:

Probably the last option because of readability and being able to deal with negative returns.

IF %ERRORLEVEL% EQU 0 ( 
  echo OK
) ELSE ( 
  echo ERRO
)

Another alternative with conditional :

IF %ERRORLEVEL% EQU 0 echo OK || echo ERRO

Bonus : To specify the return of a subroutine, use exit /b [n] , where n is the return code.

Scroll to Top