Bat errorlevel echo

bat errorlevel echo

D:test>cmd /q /c bug.cmd before first if D:test>echo %errorlevel% 0. I get the same behavior if I rename the script to “bug.bat”. ERRORLEVEL and %ERRORLEVEL% are two different variables. That means your code with echo return code is %errorlevel% and if %errorlevel% NEQ 0 >>output.txt. › errorlevel.

Apologise, can: Bat errorlevel echo

Bat errorlevel echo
Bat errorlevel echo
Bat errorlevel echo

Read these next.

Thanks guys,

To give a little more context, effectively at this point in the file there is about 40-ish times that this happens in one go one after the other.
The SET, ECHO, and 2x CALL change for each inidividual one (marked with an x below) so imagine this goes on for around 40 is times.


IFERRORLEVEL16(setfieldErrorCode=E5 echo%fieldErrorCode% - FATAL ERROR - ERRORLEVEL is %ERRORLEVEL%call:RESULTFAILUREcall:FAILENDGROUPgoto:EOF)IFERRORLEVEL17(setfieldErrorCode=x echo%fieldErrorCode% - x call:xcall:xgoto:EOF)IFERRORLEVEL18(setfieldErrorCode=x echo%fieldErrorCode% - x call:xcall:xgoto:EOF)IFERRORLEVEL19(setfieldErrorCode=x echo%fieldErrorCode% - x call:xcall:xgoto:EOF)

I was hoping there was some coding trick that I couldn't find that would help fix this without making the file way larger.
The closest I think I could get to what Sm0k3y175 suggested would be to do the following:


IFERRORLEVEL16(call:ERR16Acall:ERR16Bcall:RESULTFAILUREcall:FAILENDGROUPgoto:EOF) {Rest of code for that function goes here} exit /b :ERR16AsetfieldErrorCode=E5 exit /b :ERR16Becho%fieldErrorCode% - FATAL ERROR - ERRORLEVEL is %ERRORLEVEL%exit /b :ERR17A {etc etc etc}

As you can imagine this is going to add at least 6 lines per IF for this section so I would be looking at around another 240 lines of code to maintain in the long run, I was kinda hoping I was just missing some trick to not make it as long, otherwise I'll just have to do it this way.


  • Article
  • 3 minutes to read

Performs conditional processing in batch programs.


If command extensions are enabled, use the following syntax:


notSpecifies that the command should be carried out only if the condition is false.
errorlevel Specifies a true condition only if the previous program run by Cmd.exe returned an exit code equal to or greater than number.
Specifies the command that should be carried out if the preceding condition is met.
Specifies a true condition only if string1 and string2 are the same. These values can be literal strings or batch variables (for example, ). You do not need to enclose literal strings in quotation marks.
exist Specifies a true condition if the specified file name exists.
Specifies a three-letter comparison operator, including:
  • EQU - Equal to
  • NEQ - Not equal to
  • LSS - Less than
  • LEQ - Less than or equal to
  • GTR - Greater than
  • GEQ - Greater than or equal to
/iForces string comparisons to ignore case. You can use /i on bat errorlevel echo form of if. These comparisons are generic, bat errorlevel echo, in that if both string1 and string2 are comprised of numeric digits only, the strings are converted to numbers and bat errorlevel echo numeric comparison is performed.
cmdextversion Specifies a true condition only if the internal version number associated with the command extensions feature of Cmd.exe is equal to or greater than the number specified. The first version is 1. It increases by increments of one when significant enhancements are added to the command extensions. The cmdextversion conditional is never true when command extensions are disabled (by default, command extensions are enabled).
defined Specifies a true condition if variable is defined.
Specifies a command-line command and any parameters to be passed to the command in an else clause.
/?Displays help at the command prompt.
  • If the condition specified in an if clause is true, the command that follows the condition is carried out, bat errorlevel echo. Bat errorlevel echo the condition is false, the command in the if clause is ignored and the command executes any command that is specified in the else clause.

  • When a program stops, it returns an bat errorlevel echo code. To use exit codes as conditions, use the errorlevel parameter.

  • If you use defined, the following three variables are added to the environment: %errorlevel%, %cmdcmdline%, and %cmdextversion%.

    • %errorlevel%: Expands into a string representation of the current value of the ERRORLEVEL environment variable, bat errorlevel echo. This variable assumes that there isn't already an existing environment variable with the name ERRORLEVEL. If there is, bat errorlevel echo get that ERRORLEVEL value instead.

    • %cmdcmdline%: Expands into the original command line that was passed to Cmd.exe prior to any processing by Cmd.exe. This assumes that there isn't already an existing environment variable with the name CMDCMDLINE. If there is, you'll get that CMDCMDLINE value instead.

    • %cmdextversion%: Expands into the string representation of the current value of cmdextversion. This assumes that there isn't already an existing environment variable with the name CMDEXTVERSION, bat errorlevel echo. If there is, you'll get that CMDEXTVERSION value instead.

  • You must use the else clause on the same line as the command after the if.


To display the message Cannot find data file if the file Product.dat cannot be found, bat errorlevel echo, type:

To format a disk in drive A and display an error message if an error occurs during the formatting process, type the following lines in a batch file:

To delete the file Product.dat from the current directory or display a message if Product.dat is not found, type the following lines in a batch file:


These lines bat errorlevel echo be combined into a single line as follows:

To echo the value of the ERRORLEVEL environment variable after running a batch file, type the following lines in the batch file:

To go to the okay label if the value of the ERRORLEVEL environment variable is less than or equal to 1, type:

Additional References

Echo An error was found

This allows you to trap errors that can be negative numbers, you can also test for specific errors:

When ending a subroutine, bat errorlevel echo, you can use EXIT /b N to set a specific ERRORLEVEL N.

Raymond Chen [MSFT] explains: ERRORLEVEL is not the same as the %ERRORLEVEL% environment variable.

Error Message/Error Stream

In addition to setting an ERRORLEVEL, many utilities will output an error message on the error stream (STDERR), bat errorlevel echo, by default these messages php handler error appear on the console, bat errorlevel echo, but they can be redirected with 2>.

Many utilities set an ERRORLEVEL and also output some error text, bat errorlevel echo, some utilities set an ERRORLEVEL but don’t display error text and some will display error text without setting an ERRORLEVEL. Some utilities behave differently depending on the severity of the error.

Error messages are likely to be different for each language/locale so it is generally more robust to just test the ERRORLEVEL rather than any text message output.

Error level vs Exit code

When an external command is run by CMD.EXE, it will detect the executable's Return or Exit Code and set the ERRORLEVEL to match. In most cases the ERRORLEVEL will be the same as the Exit code, but there are some cases where they can differ.

An Exit Code can be detected directly with redirection operators (Success/Failure ignoring the ERRORLEVEL) this can often be more reliable than trusting the ERRORLEVEL which may or may not have been set correctly.

Old style .bat Batch files vs .cmd Batch scripts.

Although the differences are minor, there are no advantages to the .BAT extension, bat errorlevel echo, so I recommend using .CMD exclusively.

There is a key difference between the way .CMD and .BAT batch files set errorlevels:

A .CMD batch script will set/reset the ERRORLEVEL after every command that you run [source] Mark Zbikowski (MSFT).

A .BAT batch script running the internal commands: APPEND, ASSOC, bat errorlevel echo, PATH, PROMPT, bat errorlevel echo, FTYPE and SET will only change the ERRORLEVEL if an error occurs. Other internal and external commands do not follow this rule.

So if you have two commands in a .BAT script and the first command fails but the second succeeds, bat errorlevel echo, the ERRORLEVEL may or may not remain set depending on which command was run.

This lack of consistency in the ERRORLEVELs raised makes debugging a .BAT script more difficult than an equlvalent .CMD script.

Even bat errorlevel echo the CMD shell, bat errorlevel echo, some commands don’t follow the rules

Even though a CMD batch script should set or reset ERRORLEVEL after every command, there are a few exceptions:

Commands that do NOT affect the ERRORLEVEL:

Commands that will set but not clear an ERRORLEVEL:
CLS, GOTO, bat errorlevel echo, KEYS, POPD, SHIFT

Commands that set an Exit Code but not the ERRORLEVEL:

Commands that set an ERRORLEVEL but not the Exit Code (SO explanation):

Set or Force an exit code

You can make a batch file return a non-zero exit code by using the EXIT command.

Exit 0
Exit /B 5

To force an ERRORLEVEL bat errorlevel echo 1 to be set without exiting, run a small but invalid command like COLOR 00 or run (CALL) which does nothing other than set the ERRORLEVEL to 1.

To clear the ERRORLEVEL back to 0, run (call ), which does nothing except set the ERRORLEVEL to 0.

You should never attempt to SET the %ERRORLEVEL% because that will create a user variable named %ERRORLEVEL% which then takes precedence over the internal pseudo variable %ERRORLEVEL%.
You can clear any such user variable with the following two commands at the start of your script, but really the best practice is to never set a variable with that name in the first place:
Set "errorlevel=1"
Set "errorlevel="


In PowerShell $? contains True if last operation succeeded and False otherwise.

The exit code of the last Win32 executable execution is stored in the automatic variable $LASTEXITCODE

To read exit codes (other than 0 or 1) launch the PowerShell script and return the $LASTEXITCODE in a single line like this:

powershell.exe -noprofile C:\scripts\script.ps1; exit $LASTEXITCODE

“I’d rather wake up in the middle of nowhere than in any city on earth” ~ Steve McQueen

Related commands:

Robocopy exit codes
Conditional Execution - if succeeds then execute
HowTo: Error Handling in a batch file
List of ERRORLEVEL values set by internal cmd.exe commands - Stackoverflow /Aacini.
ERRORLEVEL is not %ERRORLEVEL% - The old new thing blog.


Copyright © 1999-2022
Some rights reserved