在IF语句WinXP批处理脚本中使用OR

时间:2011-09-01 16:34:54

标签: windows batch-file if-statement cmd conditional

有没有办法通过IF语句传递OR?

如:

SET var=two
IF "%var%"=="one" OR "two" OR "three" ECHO The number is between zero and four.

3 个答案:

答案 0 :(得分:13)

没有

if "%var%"=="one" goto foo
if "%var%"=="two" goto foo
if "%var%"=="three" goto foo
goto afterfoo
:foo
echo The number is between one and three (technically incorrect, since it includes the end points and thus is not between).
:afterfoo

如果您需要更有条理的方法:

if "%var%"=="one" set OneToThree=1
if "%var%"=="two" set OneToThree=1
if "%var%"=="three" set OneToThree=1
if defined OneToThree (
    echo Foo
) else (
    rem something
)

答案 1 :(得分:0)

游戏中有点晚了,但是假设这可能有助于任何人绊倒这个问题。我这样做的方法是使用echo piped到findstr的组合,这样:

(echo ":one: :two: :three:" | findstr /i ":%var%:" 1>nul 2>nul) && (
    echo The number is between zero and four
)

由于findstr是一个外部命令,我建议不要在一个可能经历1000次迭代的循环中使用它。如果不是这种情况,这应该解决您尝试做的事情,而不是使用多个ifs。此外,选择“:”没有什么特别之处,只需使用一个不太可能成为var变量值的一部分的分隔符。

感谢其他人指向另一个似乎有类似问题的链接,我也会在那里发布这个回复,以防万一有人偶然发现这个问题并且不能到达这里。

答案 2 :(得分:0)

请参见重复的问题IF... OR IF... in a windows batch file,其中@Apostolos提出了以下解决方案

FOR %%a in (item1 item2 ...) DO IF {condition_involving_%%a} {execute_command}  

例如

FOR %%a in (1 2) DO IF %var%==%%a ECHO TRUE

在批处理脚本中,我发现这是最直接,最简单的用例。