if "%VAR1%"=="VALUE" if "%VAR2%"=="VALUE" *do something*
或者>如果//如果
set BOTH=0
if "%VAR1%"=="VALUE" if "%VAR2%"=="VALUE" set BOTH=1
if "%BOTH%"=="0" if "%VAR1%"=="VALUE" *do something*
if "%BOTH%"=="0" if "%VAR2%"=="VALUE" *do something*
我知道还有其他答案,但我认为我的更简单,更容易理解 . 希望这对你有所帮助! ;)
47
您可以使用嵌套条件执行 and :
if %age% geq 2 (
if %age% leq 12 (
set class=child
)
)
要么:
if %age% geq 2 if %age% leq 12 set class=child
您可以使用单独的变量执行 or :
set res=F
if %hour% leq 6 set res=T
if %hour% geq 22 set res=T
if "%res%"=="T" (
set state=asleep
)
3
IF 语句不支持逻辑运算符( AND 和 OR ),级联 IF 语句构成隐式连接 .
IF Exist File1.Dat IF Exist File2.Dat GOTO FILE12_EXIST_LABEL
De Morgan's laws允许我们仅使用连词("AND")和否定("NOT")将析取("OR")转换为逻辑等价物 . 这意味着我们可以将析取("OR")链接到一行 .
这意味着如果名字是“Yakko”或“Wakko”或“Dot”,那么回声“华纳兄弟或姐妹” .
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
Athul Prakash(当时16岁)通过否定IF语句中的条件,然后使用ELSE子句作为放置需要执行的代码的位置,给出了如何实现OR测试的逻辑思路 . 我认为,由于他建议使用两个IF语句,因此通常需要两个其他子句,因此执行的代码需要写成 twice . 但是,如果使用GOTO跳过所需的代码,而不是编写ELSE子句,则只需要编写执行代码 once .
这是一个可测试的例子,说明如何实现Athul Prakash的负逻辑来创建 OR .
在我的例子中, someone is allowed to drive a tank if they have a tank licence OR they are doing their military service . 在两个提示输入 true 或 false ,您将能够看到逻辑是否允许您驾驶坦克 .
@ECHO OFF
@SET /p tanklicence=tanklicence:
@SET /p militaryservice=militaryservice:
IF /I NOT %tanklicence%==true IF /I NOT %militaryservice%==true GOTO done
ECHO I am driving a tank with tanklicence set to %tanklicence% and militaryservice set to %militaryservice%
:done
PAUSE
@echo off
setlocal
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
exit /b 0
:IF_OR
( ( if %A% EQU 1 ( type nul>nul ) else type 2>nul ) || ( if %B% EQU 2 ( type nul>nul ) else type 2>nul ) || ( echo.FALSE-& type 2>nul ) ) && echo TRUE+
exit /b 0
:IF_AND
( ( if %A% EQU 1 ( type nul>nul ) else type 2>nul ) && ( if %B% EQU 2 ( type nul>nul ) else type 2>nul ) && echo.TRUE+ ) || echo.FALSE-
exit /b 0
11 回答
它就像以下一样简单:
AND>如果是
或者>如果//如果
我知道还有其他答案,但我认为我的更简单,更容易理解 . 希望这对你有所帮助! ;)
您可以使用嵌套条件执行
and
:要么:
您可以使用单独的变量执行
or
:IF
语句不支持逻辑运算符(AND
和OR
),级联IF
语句构成隐式连接 .如果存在
File1.Dat
和File1.Dat
,则跳转标签FILE12_EXIST_LABEL
.另见:IF /?
De Morgan's laws允许我们仅使用连词("AND")和否定("NOT")将析取("OR")转换为逻辑等价物 . 这意味着我们可以将析取("OR")链接到一行 .
这意味着如果名字是“Yakko”或“Wakko”或“Dot”,那么回声“华纳兄弟或姐妹” .
这是paxdiablo的"OR"示例的另一个版本,但条件被链接到一行 . (注意,
leq
的反面是gtr
,而geq
的反面是lss
. )以下示例显示如何创建AND语句(用于设置变量或包含命令的参数) .
要关闭CMD窗口并启动记事本:
如果变量'a'等于blah,则将变量x,y和z设置为值 .
希望有所帮助!
也包括在内
"120} How do I use AND/OR/XOR/NOT operators in an IF statement?"
http://www.netikka.net/tsneti/info/tscmd120.htm
或者有点棘手,但并不过分 . 这是一个例子
另一种方法是寻找一个unix shell,它可以为你提供逻辑运算符和更多功能 . 如果您不想使用cygwin路由,可以获得Bourne shell here的本机win32实现 . 可以找到本地bash here . 我很确定你可以轻松谷歌其他好的替代品,如zsh或tcsh .
ķ
尝试否定操作数 - '不'!
好吧,如果您可以使用嵌套的'if'(请参阅之前的答案)对if语句执行'AND'操作,那么您可以使用'if not'执行相同的操作来执行'或'操作 .
如果您还没有完成这个想法,请继续阅读 . 否则,不要浪费你的时间并重新开始编程 .
就像嵌套的'if'只有在所有条件都满足时才满足一样,只有当所有条件都为假时,才会满足嵌套的'if not' . 这类似于你想用'或'操作数做的,不是吗?
即使嵌套的'if not'中的任何一个条件为真,整个语句仍然不满意 . 因此,如果所有嵌套条件都为假,则可以通过记住条件语句的主体应该是您想要做的事情来连续使用否定的'if' . 你真正想要给予的身体应该在else声明之下 .
如果你仍然没有得到这个东西的小说,抱歉,我16岁,这是我能解释的最好的 .
Athul Prakash(当时16岁)通过否定IF语句中的条件,然后使用ELSE子句作为放置需要执行的代码的位置,给出了如何实现OR测试的逻辑思路 . 我认为,由于他建议使用两个IF语句,因此通常需要两个其他子句,因此执行的代码需要写成 twice . 但是,如果使用GOTO跳过所需的代码,而不是编写ELSE子句,则只需要编写执行代码 once .
这是一个可测试的例子,说明如何实现Athul Prakash的负逻辑来创建 OR .
在我的例子中, someone is allowed to drive a tank if they have a tank licence OR they are doing their military service . 在两个提示输入 true 或 false ,您将能够看到逻辑是否允许您驾驶坦克 .
如果你有兴趣在一个语句中写一个
if
AND
/OR
,那么就没有任何一个 . 但是,您仍然可以将if
与&&
/||
和(
/)
语句分组,以便在一行中实现您想要的任何其他变量和没有if-else
块复制(单个echo
命令用于TRUE
和FALSE
代码段):Output :
诀窍是在
type
命令中删除/设置errorlevel
等处理通往下一个命令的方式 .对Andry的答案进行了轻微修改,减少了重复类型命令: