Windows批处理文件:多个if条件

时间:2011-05-19 14:13:54

标签: windows-xp batch-file

有没有办法说出类似

的内容
if %1 == 1 or %1 == 2

在批处理文件中?或者,更好的是,如果我可以指定一组候选值,如

if %1 in [1, 2, 3, 4, ... 20]

4 个答案:

答案 0 :(得分:25)

“和”结果很简单 - 只是没有你期望的语法: 这3个例子说明了这一点。

用词:如果1 == 1 AND 2 == 2那么回声“你好”

if 1==1 echo hello
hello

if 1==1 if 2==2 echo hello
hello

if 1==1 if 2==1 echo hello
(nothing was echoed)

答案 1 :(得分:23)

实现逻辑的一种方法 - 或者使用goto相同标签的多个条件。

if %1 == 1 goto :cond
if %1 == 2 goto :cond
goto :skip
:cond
someCommand
:skip

要测试集合成员资格,可以使用for循环:

for %%i in (1 2 3 4 ... 20) do if %1 == %%i someCommand

请注意==是字符串相等运算符。 equ是数字相等运算符。

答案 2 :(得分:9)

我知道这已经过时了,但我只是想让你知道,这确实是可能的,不像之前的帖子所说的那样。基本上你将两个IF命令绑定到一个。

语法:IF equation (cmd if true)else command if false

尝试使用两个变量(执行IF xx AND xx语句)

set varone=1
set vartwo=2

if %varone% equ 1 (if %vartwo% equ 2 (echo TRUE)else echo FALSE)else echo FALSE

使用一个变量(执行OR语句 - 注意您也可以使用多个变量)

if %a% equ 1 (echo pass)else if %a equ 2 (echo pass)else echo false

您可以使用命令

替换Echo pass / fail

答案 3 :(得分:0)

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

(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
    echo Input is either 1 or 2
)

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

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