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)

【讨论】:

这是真正的答案。使用gotos 充其量只是一种技巧【参考方案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 条件的主要内容,如果未能解决你的问题,请参考以下文章

如果...或如果...在 Windows 批处理文件中

批处理文件 IF 条件

cmd中if条件“and”/“or”的批处理文件问题

如何检查批处理文件中是不是存在文件[重复]

在批处理文件中,如果满足一个条件而不是周围的 for 循环,如何突破嵌套的 if 语句?

一个 IF 语句,用于检查并执行 Windows 批处理文件中每个设置变量的命令