是否有办法在批处理文件中实现以下语句的功能:
if %1 == 1 or %1 == 2
或者更好地,如果我可以指定一组候选值,如下所示:
if %1 in [1, 2, 3, 4, ... 20]
是否有办法在批处理文件中实现以下语句的功能:
if %1 == 1 or %1 == 2
或者更好地,如果我可以指定一组候选值,如下所示:
if %1 in [1, 2, 3, 4, ... 20]
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)
goto
最多只能算是一个 hack。 - kayleeFrye_onDeck实现逻辑或的一种方法是使用多个条件语句,这些语句 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
是数值相等运算符。
if 5 equ 05 echo yes
会打印“yes”,但if 5 == 05 echo yes
则不会。 - bk1e9 equ 09
失败了。不过忽略掉最初的注释就好了 :-) - Joey我知道这是旧的,但是我想让你知道,与先前的帖子所说的不同,它确实是可能的。基本上,您正在将两个IF命令绑定为一个。
语法:IF方程(如果是true cmd)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 ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
echo Input is either 1 or 2
)
由于findstr是一个外部命令,我建议不要在可能进行数千次迭代的循环内使用它。如果不是这种情况,那么这应该解决您尝试做的事情,而不是使用多个if语句。此外,在选择“:”时没有什么特别之处,只需使用一个不太可能成为%1值的一部分的分隔符即可。
感谢其他人指向另一个链接,该链接似乎有类似的问题,我也会在那里发布这个响应,以防某人偶然发现那个问题并且没有到达这里。