batch-fileIf statements

Syntax

  • if [/i] StringToCompare1 == StringToCompare2 (commandA) else (commandB)

  • if errorlevel 1 (commandA) else (commandB)

  • if %errorlevel% == 1 (commandA) else (commandB)

  • if exist Filename (commandA) else (commandB)

  • if defined VariableName (commandA) else (commandB)

Remarks

There are a few syntax to choose from in an if statement. We will use if string1==string2 as an example.

1-Line Syntaxes

  • if string1==string2 commandA
  • if string1==string2 (commandA)
  • if string1==string2 (commandA) else (commandB)
  • if string1==string2 (commandA) else commandB
  • if string1==string2 (commandA)else (commandB)
  • if string1==string2 (commandA)else commandB

Multiline Syntaxes

if string1==string2 (
    commandA
)

Or

if string1==string2 (
    commandA
) else (
    commandB
)

There are still some extra syntaxes available.

Comparing numbers with IF statement

SET TEST=0

IF %TEST% == 0 (
    echo TEST FAILED
) ELSE IF %TEST% == 1 (
    echo TEST PASSED
) ELSE (
    echo TEST INVALID
)

Comparing strings

IF "%~1" == "-help" (
    ECHO "Hello"
)

where %1 refers to the first command line argument and ~ removes any quotes that were included when the script was called.

Comparing Errorlevel

If Errorlevel 1 (
    Echo Errorlevel is 1 or higher
    
    REM The phrase "1 or higher" is used because If Errorlevel 1 statement means:
    REM                                          If %Errorlevel% GEQ 1
    REM                                      Not If %Errorlevel% EQU 1
)

or

If "%Errorlevel%"=="1" (
    Echo Errorlevel is 1
)

The script above would check the variable Errorlevel(built-in). The not operator can be used.

Set "Test=%Errorlevel%"

If "%Test%" == "1" (
    Echo Errorlevel is 1
)

This one also works.

Please note that some commands do not affect the errorlevel:

  • Break
  • Echo
  • Endlocal
  • For
  • If
  • Pause
  • Rem
  • Rd / Rmdir
  • Set
  • Title

The following commands set but not clear errorlevel:

  • Cls
  • Goto
  • Keys
  • Popd
  • Shift

The following commands set exit codes but not the errorlevel:

  • Rd / Rmdir

The following commands set errorlevel but not the exit codes:

  • Md / Mkdir

Check if file exists

If exist "C:\Foo\Bar.baz" (
    Echo File exist
)

This checks if the file C:\Foo\Bar.baz's existence. If this exist, it echos File exist The Not operator can also be added.

If variable exists / set

If Defined Foo (
    Echo Foo is defined
)

This would check if a variable is defined or not. Again, the Not operator can be used.