Note: | The parts of this text that are displayed in magenta are valid for Windows 2000 and XP only |
Performs conditional processing in batch programs.
IF | [NOT] ERRORLEVEL number command |
IF | [NOT] string1==string2 command |
IF | [NOT] EXIST filename command |
NOT | Specifies that Windows should carry out the command only if the condition is FALSE |
ERRORLEVEL number | Specifies a TRUE condition if the last program run returned an exit code equal to or greater than the number specified. |
string1==string2 | Specifies a TRUE condition if the specified text strings match. |
EXIST filename | Specifies a TRUE condition if the specified filename exists. |
command | Specifies the command to carry out if the condition is met. command can be followed by ELSE command2 which will execute command2 if the specified condition is FALSE |
The ELSE clause must occur on the same line as the command after the IF.
For example:
IF EXIST filename ( del filename ) ELSE ( echo filename missing. )
The following would NOT work because the del command needs to be terminated by a newline:
IF EXIST filename DEL filename ELSE ECHO filename missing
Nor would the following work, since the ELSE command must be on the same line as the end of the IF command:
IF EXIST filename DEL filename ELSE ECHO filename missing
The following would work if you want it all on one line:
IF EXIST filename (DEL filename) ELSE (ECHO filename missing)
If Command Extensions are enabled IF changes as follows:
IF [/I] string1 compare-op string2 command IF CMDEXTVERSION number command IF DEFINED variable command
where 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 |
and the /I switch, if specified, says to do case insensitive string compares.
The /I switch can also be used on the string1==string2
form of IF.
These comparisons are generic, in that if both string1
and string2
are both comprised of all numeric digits, then the strings are converted to numbers and a numeric comparison is performed.
The CMDEXTVERSION conditional works just like ERRORLEVEL, except it is comparing against an internal version number associated with the Command Extensions.
The first version is 1 (NT 4), in Windows 2000 and XP CMDEXTVERSION is 2.
It will be incremented by one when significant enhancements are added to the Command Extensions.
CMDEXTVERSION conditional is never true when Command Extensions are disabled.
The DEFINED conditional works just like EXISTS except it takes an environment variable name and returns true if the environment variable is defined.
%ERRORLEVEL% will expand into a string representation of the current value of ERRORLEVEL, provided that there is not already an environment variable with the name ERRORLEVEL, in which case you will get its value instead. Using this and the above numerical comparison operators, you can do the following (note: CHOICE is not part of Windows NT /Windows 2000's standard distribution):
CHOICE GOTO answer%ERRORLEVEL% :answer0 ECHO You typed Y for yes :answer1 ECHO You typed N for no
you can also using the numerical comparisons above:
IF %ERRORLEVEL% LEQ 1 goto okay
%CMDCMDLINE% will expand into the original command line passed to CMD.EXE prior to any processing by CMD.EXE, provided that there is not already an environment variable with the name CMDCMDLINE, in which case you will get its value instead.
%CMDEXTVERSION% will expand into a string representation of the current value of CMDEXTVERSION, provided that there is not already an environment variable with the name CMDEXTVERSION, in which case you will get its value instead.
page last modified: 2021-01-27; loaded in 0.0015 seconds