Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ERRORLEVEL inside IF

Just stumbled into a weird thing with %ERRORLEVEL% and wanted to see if anyone knows why and if there's a way to fix it. Essentially, it seems as if commands executed inside if statements don't set the %ERRORLEVEL% variable. The ERRORLEVEL (as in IF ERRORLEVEL 1, which is different from IF %ERRORLEVEL% EQU 1 ) check seems to still work fine though, so I can probably work around it, but it would still be nice to be able to print the error level. For debugging or whatever.

@echo off Set TESTVAR=1  tasklist | find /I "IsntRunning.exe" > NUL echo OUTSIDE_IF %ERRORLEVEL%  ThisWillSetErrorLevelTo9009ieNotRecognizedCommand  tasklist | find /I "IsntRunning.exe" > NUL echo OUTSIDE_IF %ERRORLEVEL%  ThisWillSetErrorLevelTo9009ieNotRecognizedCommand  IF %TESTVAR% EQU 1 (     Set ERRORLEVEL=     tasklist | find /I "IsntRunning.exe" > NUL     echo INSIDE_IF  ERRORLEVEL %ERRORLEVEL%      IF ERRORLEVEL 1 (         echo INSIDE_IF2  ERRORLEVEL GREQ 1 %ERRORLEVEL%     )     IF ERRORLEVEL 2 (         echo INSIDE_IF2  ERRORLEVEL GREQ 2 %ERRORLEVEL%     )     IF ERRORLEVEL 3 (         echo INSIDE_IF2  ERRORLEVEL GREQ 3 %ERRORLEVEL%     ) )  tasklist | find /I "IsntRunning.exe" > NUL echo OUTSIDE_IF ERRORLEVEL %ERRORLEVEL%  @echo on 

Putting that in a batch file and running it produces this output:

C:\Users\username\Documents\work>test.bat
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' is not recognized as an internal or external command, operable program or batch file.
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' is not recognized as an internal or external command, operable program or batch file.
INSIDE_IF ERRORLEVEL 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9009
OUTSIDE_IF ERRORLEVEL 1

Relevant articles:

  • http://blogs.msdn.com/b/oldnewthing/archive/2008/09/26/8965755.aspx
  • http://support.microsoft.com/kb/69576
like image 874
Srekel Avatar asked Dec 06 '10 15:12

Srekel


People also ask

What is Errorlevel in batch file?

Batch file error level: %ERRORLEVEL% is an environment variable that contains the last error level or return code in the batch file – that is, the last error code of the last command executed. Error levels may be checked by using the %ERRORLEVEL% variable as follows: IF %ERRORLEVEL% NEQ 0 ( DO_Something )

What is == in batch file?

[ == ] (Double Equals) The "IF" command uses this to test if two strings are equal: IF "%1" == "" GOTO HELP. means that if the first parameter on the command line after the batch file name is equal to nothing, that is, if a first parameter is not given, the batch file is to go to the HELP label.

What is Errorlevel?

Updated: 06/06/2021 by Computer Hope. In Microsoft Windows and MS-DOS, an errorlevel is the integer number returned by a child process when it terminates. Errorlevel is 0 if the process was successful. Errorlevel is 1 or greater if the process encountered an error.


1 Answers

Try using setlocal enabledelayedexpansion at the start of your batch file, and !ERRORLEVEL! inside your IF. This seems to work for me:

@echo off setlocal enabledelayedexpansion dir nul echo %ERRORLEVEL% if .1.==.1. (   urklbkrlksdj - not a command   echo %ERRORLEVEL%   echo !ERRORLEVEL! ) 
like image 186
Jim Davis Avatar answered Oct 07 '22 18:10

Jim Davis