【发布时间】:2011-08-28 22:30:42
【问题描述】:
有什么办法可以说
如果 %1 == 1 或 %1 == 2在批处理文件中?或者,更好的是,如果我可以指定一组候选值,例如
如果 %1 在 [1, 2, 3, 4, ... 20]【问题讨论】:
-
所以我猜这是不可能的?
-
是否可以实现相同的功能?是的。是否可以使用问题中列出的语法?没有。
标签: windows-xp batch-file
有什么办法可以说
如果 %1 == 1 或 %1 == 2在批处理文件中?或者,更好的是,如果我可以指定一组候选值,例如
如果 %1 在 [1, 2, 3, 4, ... 20]【问题讨论】:
标签: windows-xp batch-file
事实证明,“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 充其量只是一种技巧
实现逻辑或的一种方法是使用多个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 打印“是”,但 if 5 == 05 echo yes 不打印。
9 equ 09 失败,因为它尝试将它们解释为八进制。没关系最初的评论,然后:-)
我知道这已经过时了,但我只是想让你知道,这确实是可能的,不像之前的帖子所说的那样。基本上,您将两个 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 通过/失败
【讨论】:
在游戏中有点晚了,但假设这是否可以帮助任何偶然发现这个问题的人。我这样做的方法是使用管道的 echo 组合到 findstr,这样:
(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
echo Input is either 1 or 2
)
由于 findstr 是一个外部命令,我建议不要在可能经过 1000 次迭代的循环中使用它。如果不是这种情况,这应该解决您尝试做的事情,而不是使用多个 if。另外,“:”的选择没有什么特别之处,只需使用不太可能成为 %1 值一部分的分隔符即可。
感谢其他人指向另一个似乎有类似问题的链接,我也会在此处发布此回复,以防万一有人偶然发现该问题并且没有完全到达这里。
【讨论】: