Jump to content

Can one IF command be used with multiple conditions? I.E. "If x OR y OR z goto :a"?


Recommended Posts

Posted (edited)

Basically, exactly what the title says.

 

Is it possible?

I know I could just use

if x goto :a
if y goto :a
if z goto :a

but I'm basically trying to shorten/condense as much as possible, so if it could all be done on one line, that'd be great.

 

edit: Using standard batch files/command line

Edited by Garacesh
Posted (edited)

You can do an else command for just two options:

 

IF X (GOTO A) ELSE (GOTO B) 

 

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 XP 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 command which

will execute the command after the ELSE keyword 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. 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. After running a program, the following

illustrates ERRORLEVEL use:

 

goto answer%ERRORLEVEL%

:answer0

echo Program had return code 0

:answer1

echo Program had return code 1

 

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.

Edited by Rawns
Posted

Yeah, I found a fair few websites like that, but none of them really helped amazingly (although the info was indeed useful, just not currently relevant)

So if I have more than two it's not possible?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...