setting ERRORLEVEL to 0
Solution 1:
You are redefining the system variable into a regular one. When you do this, the system will not use it until the command session is closed.
The best way would be to use
exit /b 0
in another batch file and call it from your primary script. Where the number 0 is your wanted errorlevel
. Either that or use a command that resets the errorlevel
for you, such as echo, findstr etc.
For example the following commands would all set ERRORLEVEL
to 0 within your batch-file:
VERIFY > nul
cmd /c "exit /b 0"
ver > nul
Solution 2:
You should never assign your own value to dynamic system variables like ERRORLEVEL, PATH, CD, DATE, TIME, etc. Doing so will prevent code from seeing the dynamic value. You can restore the dynamic value by simply undefining the user defined value. For example:
set "errorlevel="
If you want to force the errorlevel to 0, then you can use this totally non-intuitive, but very effective syntax: (call )
. The space after call is critical. If you want to set the errorlevel to 1, you can use (call)
. It is critical that there not be any space after call.
(call)
echo %errorlevel%
(call )
echo %errorlevel%
A more intuitive, but less convenient method to set the errorlevel is to use a dedicated subroutine in a batch file:
call :setErr 1
echo %errorlevel%
call :setErr 0
echo %errorlevel%
exit /b
:setErr
exit /b %1
Or if on the command line, you could use
cmd /c exit 1
echo %errorlevel%
cmd /c exit 0
echo %errorlevel%