|
|
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 1 will return TRUE for an errorlevel of 2
Normal completion of a command will return ERRORLEVEL=0
Any test made using the compare-op syntax will always be a "string"
comparison,
so when comparing numbers note that "026" > "26"
IF NULL
To test for the existence of a command line paramater - 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 v_example ECHO Value Missing
IF DEFINED will return true if the variable contains any value (even if the
value is just a space)
BRACKETS
The use of brackets is only required
if the command is run over several lines e.g.
IF EXIST filename (
del filename
) ELSE (
echo The file was not found.
)
Do not use brackets or quotes if you are comparing numeric values
e.g.
IF(2) GEQ (15) echo "bigger"
or
IF"2" GEQ "15" echo "bigger"
Will perform a character comparison and will echo "bigger"
however the command
IF2 GEQ 15 echo "bigger"
Will perform a numeric comparison and works as expected - notice that this is
opposite to the SET /a command where quotes are required.
CMDEXTVERSION
If Command Extensions are disabled CMDEXTVERSION will
return FALSE otherwise it will return "1".
If command extensions are significantly enhanced in a future version of Windows
then CMDEXTVERSION will be incremented.
Examples:
IF EXIST C:\install.log (echo Installation complete) ELSE (echo The Installation
failed)
IF DEFINED v_department ECHO Got the department variable
IF DEFINED v_commission SET /A v_salary=%v_salary% + %v_commission%
IF CMDEXTVERSION 1 GOTO :start_process
IF ERRORLEVEL EQU 0 goto :okay
:: Capture a specific errorlevel like this
FOR %%G in (0 1 2 3 4 5 6 7 8 9) DO if errorlevel==%%G set v_err=%%G
IF [%v_err%]==[2] echo Errorlevel is 2
:: Wildcards are not supported by IF but you can spoof the same thing using
SET:
:: This won't Work
IF %COMPUTERNAME%==ABZ* GOTO :s_matched
:: This will work
SET v_part_name=%COMPUTERNAME:~0,3%
IF NOT %v_part_name%==ABZ GOTO :s_matched
Notes:
When piping commands, the expression is evaluated from left to right, so
IF... | ... is equivalent to (IF ... ) | ...
you can use the explicit syntax IF (... | ...)
Testing ERRORLEVEL correctly
It is possible to create a string variable called %ERRORLEVEL%
if present such a variable will prevent the real ERRORLEVEL from being tested
successfully.
Both ECHO %errorlevel% and IF %errorlevel% will respond
to a string variable %ERRORLEVEL% in preference to a real ERRORLEVEL.
To test for this problem use SET errorlevel, or IF DEFINED
ERRORLEVEL
If you want to deliberately raise an ERRORLEVEL in a batch script use the command
"COLOR 00"
If Command Extensions are disabled IF will only support
direct comparisons: IF ==, IF EXISTS, IF ERRORLEVEL
You see things; and you say 'Why?' But I dream things that never were; and
I say 'why not?' - George
Bernard Shaw
Related commands:
Conditional execution syntax (AND
/ OR)
SET - Display, or Edit Windows NT environment variables
ECHO - Display message on screen
IFMEMBER - NT Workgroup member (Resource kit)
SC - Is a Service running (Resource kit)
Equivalent Linux BASH commands:
case - Conditionally perform a command
if - Conditionally perform a command
until - Execute commands (until error)
while - Execute commands