Have you ever written a batch file that is more of a “application” than a script? Of course you made sure ERRORLEVEL is set correctly so when your batch file is a part of a larger script,
IF ERRORLEVEL error checking can be used. What could go wrong?
For some crazy reason, cmd.exe does not use the expected logic when you use the
|| syntax. I assume part of the problem is because the batch file is executed by cmd.exe itself and there is no child process and no real process exit code.
Fixing this requires some hacky workarounds and is generally a big pain in the ass.
@echo off setlocal set ec=0 if /I "%~1"=="fail" set ec=1 REM This next line MUST be the last line in the file! @%COMSPEC% /C exit %ec% >nul
@echo off setlocal set ec=0 if /I "%~1"=="fail" set ec=1 goto q :q_ exit /B %1 :q REM To preserve ERRORLEVEL, the next line MUST be the last line in the file! call :q_ %ec%