如何在DOS批处理文件中实现逻辑操作符?


当前回答

OR有点棘手,但也不过分。这里有一个例子

set var1=%~1
set var2=%~2
::
set or_=
if "%var1%"=="Stack" set or_=true
if "%var2%"=="Overflow" set or_=true
if defined or_ echo Stack OR Overflow

其他回答

试试否定操作数“not”!

好吧,如果你可以使用嵌套的“if”对if语句执行“AND”操作(参考前面的答案),那么你可以对“if not”做同样的事情来执行“or”操作。

如果你还没有完全明白,继续往下读。否则,就不要浪费时间,回到编程中去。

就像嵌套的“if”只有在所有条件为真时才被满足一样,嵌套的“if not”只有在所有条件为假时才被满足。这类似于你想要对'or'操作数做的事情,不是吗?

即使嵌套的“if not”中的任何一个条件为真,整个语句仍然不满足。因此,你可以连续使用否定的“if”,记住条件语句的主体应该是你想要做的,如果所有嵌套的条件都是假的。你真正想要给出的主体应该在else语句下。

如果你还是不明白事情的真相,对不起,我16岁了,我只能解释这么多了。

如果你需要else子句,你可以使用下面的语法:

AND:

if %v1% == a (if %v2% == b (echo yes) else echo no) else echo no

OR:

if %v1% == a (echo yes) else (if %v2% == b (echo yes) else echo no)

下面的例子展示了如何创建AND语句(用于为命令设置变量或包含参数)。

启动记事本并关闭CMD窗口:

start notepad.exe & exit

如果变量'a' = blah,则设置变量x、y和z的值。

IF "%a%"=="blah" (set x=1) & (set y=2) & (set z=3)

希望有帮助!

另一种选择是寻找unix shell,它可以提供逻辑操作符和更多的功能。如果您不想走cygwin路线,您可以在这里获得Bourne shell的本地win32实现。本地bash可以在这里找到。我很确定你可以很容易谷歌其他好的替代品,如zsh或tcsh。

K

OR有点棘手,但也不过分。这里有一个例子

set var1=%~1
set var2=%~2
::
set or_=
if "%var1%"=="Stack" set or_=true
if "%var2%"=="Overflow" set or_=true
if defined or_ echo Stack OR Overflow