如何在DOS批处理文件中实现逻辑操作符?
当前回答
只有OR部分是棘手的,但对于一个包含NOT OR AND的普通布尔表达式,唯一好的解决方案是:
REM if A == B OR C == C then yes
(call :strequ A B || call :strequ C C) && echo yes
exit /b
:strequ
if "%1" == "%2" exit /b 0
exit /b 1
其他回答
许多人似乎忽略了OR最明显的解决方案,即使用标签。
if "%a%" == "ONE" goto do_thing
if "%a%" == "TWO" (
:do_thing
echo a is equal to ONE or TWO
)
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
德摩根定律允许我们只使用连词(“与”)和否定(“非”)将析取(“或”)转换为逻辑等价。这意味着我们可以将析取(“OR”)链到一行上。
这意味着如果名字是“Yakko”或“Wakko”或“Dot”,那么就呼应“Warner兄弟或姐妹”。
set warner=true
if not "%name%"=="Yakko" if not "%name%"=="Wakko" if not "%name%"=="Dot" set warner=false
if "%warner%"=="true" echo Warner brother or sister
这是paxdiablo的“OR”示例的另一个版本,但条件被链接到一行上。(注意leq的反义词是gtr, geq的反义词是lss。)
set res=true
if %hour% gtr 6 if %hour% lss 22 set res=false
if "%res%"=="true" set state=asleep
下面的例子展示了如何创建AND语句(用于为命令设置变量或包含参数)。
启动记事本并关闭CMD窗口:
start notepad.exe & exit
如果变量'a' = blah,则设置变量x、y和z的值。
IF "%a%"=="blah" (set x=1) & (set y=2) & (set z=3)
希望有帮助!
只有OR部分是棘手的,但对于一个包含NOT OR AND的普通布尔表达式,唯一好的解决方案是:
REM if A == B OR C == C then yes
(call :strequ A B || call :strequ C C) && echo yes
exit /b
:strequ
if "%1" == "%2" exit /b 0
exit /b 1
推荐文章
- Windows批处理文件的隐藏特性
- 在Windows批处理脚本中格式化日期和时间
- 如何在windows中使用命令提示符(cmd)列出文件。我试过在Linux中使用“ls”,但它显示一个错误?
- BAT文件执行后保持CMD打开
- 如何在命令提示符中使用空格?
- 如何从批处理文件运行PowerShell脚本
- 如何自动提升批处理文件,以便在需要时请求UAC管理员权限?
- 批处理文件:查找子字符串是否在字符串中(不是在文件中)
- 为什么JavaScript中没有逻辑异或?
- “npm config set registry https://registry.npmjs.org/”在Windows bat文件中不工作
- 如何从批处理文件创建空文本文件?
- cmd /C是什么意思?
- Windows批处理:无新行回显
- 在批处理文件中测试参数是否为空的正确方法是什么?
- 批处理文件,将文件从一个文件夹复制到另一个文件夹