Windows 批处理文件:多个 if 条件
Posted
技术标签:
【中文标题】Windows 批处理文件:多个 if 条件【英文标题】:Windows batch files: multiple if conditions 【发布时间】:2011-08-28 22:30:42 【问题描述】:有什么办法可以说
如果 %1 == 1 或 %1 == 2在批处理文件中?或者,更好的是,如果我可以指定一组候选值,例如
如果 %1 在 [1, 2, 3, 4, ... 20]【问题讨论】:
完全重复:***.com/questions/2772180/cmd-exe-complex-conditions 所以我猜这是不可能的? 是否可以实现相同的功能?是的。是否可以使用问题中列出的语法?没有。 【参考方案1】:事实证明,“and”很简单——只是不是您期望的语法: 这 3 个例子说明了这一点。
字面意思:如果 1==1 AND 2==2 则回显“hello”
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
s 充其量只是一种技巧【参考方案2】:
实现逻辑或的一种方法是使用多个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
是数值相等运算符。
【讨论】:
@Joey:他们通常行为相同,但并非总是如此:if 5 equ 05 echo yes
打印“是”,但 if 5 == 05 echo yes
不打印。
啊,前导零。对于那些 9 equ 09
失败,因为它尝试将它们解释为八进制。没关系最初的评论,然后:-)【参考方案3】:
我知道这已经过时了,但我只是想让你知道,这确实是可能的,不像之前的帖子所说的那样。基本上,您将两个 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 通过/失败
【讨论】:
刚刚注意到这一点。很高兴知道有一种方法可以做到这一点(并且可能导致其他用途),但是语法使它看起来非常混乱!在这种情况下,对一组候选值进行 for 循环会更干净。【参考方案4】:在游戏中有点晚了,但假设这是否可以帮助任何偶然发现这个问题的人。我这样做的方法是使用管道的 echo 组合到 findstr,这样:
(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
echo Input is either 1 or 2
)
由于 findstr 是一个外部命令,我建议不要在可能经过 1000 次迭代的循环中使用它。如果不是这种情况,这应该解决您尝试做的事情,而不是使用多个 if。另外,“:”的选择没有什么特别之处,只需使用不太可能成为 %1 值一部分的分隔符即可。
感谢其他人指向另一个似乎有类似问题的链接,我也会在此处发布此回复,以防万一有人偶然发现该问题并且没有完全到达这里。
【讨论】:
此解决方案是否可以针对大量有效元素进行扩展(例如:扩展列表) @Keikoku:只是为了让我更好地理解,例如,在上面原始问题中概述的情况下,您是否正在寻找可以是 1、2、3、...等的输入(直到一个巨大的数字)?在那种情况下是不可行的。但当然,我们可以探索更好的方法来适应它。简要说明您的情况会有所帮助 - 如果您已经提出问题,可以提供问题链接。 我不记得我在打开问题时遇到的问题。我想在某些时候我想检查输入是什么并根据输入做了一些事情(我可以选择编写 exe 或批处理文件)以上是关于Windows 批处理文件:多个 if 条件的主要内容,如果未能解决你的问题,请参考以下文章