DOS批处理中的逻辑运算符("and"、"or")

312

你如何在DOS批处理文件中实现逻辑运算符?


7
我为您的观赏愉悦提交:pi.bat :) http://thedailywtf.com/Articles/Stupid-Coding-Tricks-A-Batch-of-Pi.aspx - Scott Arrington
14个回答

1

试试否定运算符-'not'!

好的,如果您可以使用嵌套的“if”执行“AND”操作(请参见先前的答案),那么您也可以使用“if not”执行“or”操作。

如果您还没有完全理解这个想法,请继续阅读。否则,请不要浪费时间并回到编程中。

就像嵌套的“if”只有在所有条件都为真时才满足一样,嵌套的“if not”只有在所有条件都为假时才满足。这与您想要使用“or”运算符的操作类似,是吗?

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

如果您仍然没有理解这件事情的要点,很抱歉,我只有16岁,这是我能做出的最好的解释。


x=2或x=3 => !! (x=2或x=3) => !(x!=2且x!=3)我认为您不能否定整个if结构以应用必要的外部“not”运算符。已经过去3年了,@Athul-prakash,您有什么想法? - Azeroth2b

0
如果您需要else子句,那么可以使用以下语法:
AND:
if %v1% == a (if %v2% == b (echo yes) else echo no) else echo no

或:

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

0

另一种选择是寻找一个提供逻辑运算符和更多功能的unix shell。如果您不想使用cygwin路线,可以在这里获得Bourne shell的本地win32实现here。本地bash可以在此处找到here。我相信您能轻松地在谷歌上找到其他好的替代品,例如zsh或tcsh。

K


4
如果你要花力气使用另一个命令行界面,至少选择PowerShell:http://microsoft.com/powershell - Eclipse
21
有很多比DOS更好的shell。我之所以要使用DOS批处理文件,是因为它不需要任何外部工具。如果您的客户需要自动化一些简单的东西,您真的希望他们安装特殊工具(如Cygwin、Perl、PowerShell等),当一个BAT文件就足够了吗? - Mark Lakata
4
大多数情况下,BAT已经足够了。人们编写的90%的Unix shell脚本并不是纯shell,而是包含许多coreutils、sed、awk等调用。GNU已经在其他操作系统中实现了UNIX工具,包括Windows。因此,请看一下http://getgnuwin32.sourceforge.net/ ,cmd.exe/bash/zsh再加上它应该足以完成大部分任务。如果您有BAT/UNIX Shell经验,没有必要学习所谓的PowerShell。 - MeaCulpa

0
稍微修改Andry的答案,减少重复的类型命令:
set "A=1" & set "B=2" & call :IF_AND
set "A=1" & set "B=3" & call :IF_AND
set "A=2" & set "B=2" & call :IF_AND
set "A=2" & set "B=3" & call :IF_AND

echo.

set "A=1" & set "B=2" & call :IF_OR
set "A=1" & set "B=3" & call :IF_OR
set "A=2" & set "B=2" & call :IF_OR
set "A=2" & set "B=3" & call :IF_OR

goto :eof

:IF_OR

(if /i not %A% EQU 1 (
   if /i not %B% EQU 2 (
      echo FALSE-
      type 2>nul
   )
)) && echo TRUE+

goto :eof

:IF_AND


(if /i %A% EQU 1 (
   if /i %B% EQU 2 (
      echo TRUE+
      type 2>nul
   )
)) && echo FALSE-

goto :eof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接