Here is a windows .bat file:
@echo off
call :label
echo %errorlevel%
pause >nul
exit
:label
exit /b 1Works as expected and outputs 1.
but on changing the code to:
@echo off
if 1==1 ( call :label echo %errorlevel% )
pause >nul
exit
:label
exit /b 1the output is 0 instead of 1.
The if 1==1 is just to show the result but I need to use another if statement in the actual script. Why is this happening and what is the solution? If delayed expansion is the solution, how to use it?
1 Answer
If delayed expansion is the solution, how to use it?
As follows:
@echo off
setlocal enabledelayedexpansion
if 1==1 ( call :label echo !errorlevel! )
pause >nul
endlocal
exit
:label
exit /b 1Delayed Expansion will cause variables within a batch file to be expanded at execution time rather than at parse time, this option is turned on with the
SETLOCAL EnableDelayedExpansioncommand.
Source: - EnableDelayedExpansion - Windows CMD - SS64.com
You need to replace % with ! to take advantage of delayed expansion.