if

IF

Conditionally perform a command.

File syntax

IF [NOT] EXIST filename command IF [NOT] EXIST filename (command) ELSE (command) String syntax

IF [/I] [NOT] item1==item2 command IF [/I] item1 compare-op item2 command IF [/I] item1 compare-op item2 (command) ELSE (command) Error Check Syntax IF [NOT] DEFINED variable command IF [NOT] ERRORLEVEL number command IF CMDEXTVERSION number command key item : May be a text string or an environment variable a variable may be modified using either

Substring syntax or Search syntax command : The command to perform NOT : perform the command if the condition is false. == : perform the command if the two strings are equal. /I : Do a case Insensitive string comparison. compare-op : may be one of EQU : equal NEQ : not equal LSS : less than < LEQ : less than or equal <= GTR : greater than > GEQ : greater than or equal >= This 3 digit syntax is necessary because the > and < are recognised as redirection symbols

IF EXIST filename will return true if the file exists (this is not case sensitive).

IF ERRORLEVEL statements should be read as IF Errorlevel >= number

i.e.

IF ERRORLEVEL 0 will return TRUE when the errorlevel is 64

IF ERRORLEVEL 1 will return TRUE when the errorlevel is 2

IF ERRORLEVEL 1 will return FALSE when the errorlevel is 0

Examples:

IF EXIST C:\install.log (echo complete) ELSE (echo failed) IF DEFINED _department ECHO Got the department variable IF DEFINED _commission SET /A _salary=%_salary% + %_commission% IF CMDEXTVERSION 1 GOTO start_process IF ERRORLEVEL EQU 2 goto sub_problem2

Does %1 exist?

To test for the existence of a command line parameter - use empty brackets like this

IF [%1]==[] ECHO Value Missing

or

IF [%1] EQU [] ECHO Value Missing

In the case of a variable that may be NULL - a null variable will remove the variable definition altogether, so testing for NULLs becomes easy:

IF NOT DEFINED _example ECHO Value Missing

IF DEFINED will return true if the variable contains any value (even if the value is just a space)

Test the existence of files and folders

IF EXIST name - will detect the existence of a file or a folder - the script empty.cmd will show if the folder is empty or not.

Brackets

You can improve the readability of a batch script by writing a complex IF...ELSE command over several lines using brackets

e.g.

IF EXIST filename (

del filename

) ELSE (

echo The file was not found.

)

The IF statement does not use any great intelligence when evaluating Brackets, so for example the command below will fail:

IF EXIST MyFile.txt (ECHO Some(more)Potatoes)

This version will work:

IF EXIST MyFile.txt (ECHO Some[more]Potatoes)

Testing Numeric values

Do not use brackets or quotes when comparing numeric values

e.g.

IF (2) GEQ (15) echo "bigger"

or

IF "2" GEQ "15" echo "bigger"

These will perform a character comparison and will always echo "bigger"

however the command

IF 2 GEQ 15 echo "bigger"

Will perform a numeric comparison and works as expected - notice that this behaviour is exactly opposite to the SET /a command where quotes are required.

Any test made using the compare-op syntax will always be a "string" comparison,

so when comparing numbers note that "026" > "26"

Wildcards

Simple wildcards are not supported by IF, so ==SS6* will not match SS64

The workaround is to spoof a wildcard using SET to retrieve the substring

SET _part_name=%COMPUTERNAME:~0,3%

IF NOT %_part_name%==SS6 GOTO they_matched

Pipes

When piping commands, the expression is evaluated from left to right, so

IF... | ... is equivalent to (IF ... ) | ...

you can also use the explicit syntax IF (... | ...)

ERRORLEVEL

To deliberately raise an ERRORLEVEL in a batch script use the EXIT /B command.

It is possible (though not a good idea) to create a string variable called %ERRORLEVEL% (user variable)

if present such a variable will prevent the real ERRORLEVEL (a system variable) from being used by commands such as ECHO and IF.

To test for the existence of a user variable use SET errorlevel, or IF DEFINED ERRORLEVEL

If Command Extensions are disabled IF will only support direct comparisons: IF ==, IF EXIST, IF ERRORLEVEL

also the system variable CMDEXTVERSION will be disabled.

You see things; and you say 'Why?' But I dream things that never were; and I say 'why not?' - George Bernard Shaw

Related:

Conditional execution syntax (AND / OR)

SET - Display or Edit environment variables

ECHO - Display message on screen

EXIT - Set a specific ERRORLEVEL

IFMEMBER - NT Workgroup member (Resource kit)

SC - Is a Service running (Resource kit)

Powershell: if - Conditionally perform a command

Equivalent bash command (Linux): if - Conditionally perform a command