有没有办法说出类似
的内容if %1 == 1 or %1 == 2
在批处理文件中?或者,更好的是,如果我可以指定一组候选值,如
if %1 in [1, 2, 3, 4, ... 20]
答案 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值的分隔符。
感谢其他人指向另一个似乎有类似问题的链接,我也会在那里发布这个回复,以防万一有人偶然发现这个问题并且不能到达这里。