previous | start | next


IF

Performs conditional processing in batch programs. Also Conditional symboles

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

  NOT               Specifies that Windows NT 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.
  command           Specifies the command to carry out if the condition is
                    met.
  string1==string2  Specifies a true condition if the specified text strings
                    match.
  EXIST filename    Specifies a true condition if the specified filename
                    exists.

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.  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
comparision operators, you can do the following

    choice
    goto answer%ERRORLEVEL%
    :answer0
    echo You typed Y for yes
    :answer1
    echo You typed N for no

you can also use the numerical comparisons above:

    IF %ERRORLEVEL% LEQ 1 goto okay

As far as I can tell, the only way to reliably set ERRORLEVEL to 0 
(clear it) is to use
    VERIFY > NUL
ERRORLEVEL can be set to 1 with
    FIND > NUL

%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.

Back to the top of this page

 



previous | start | next