pax*_*blo 276

您可以and使用嵌套条件:

if %age% geq 2 (
    if %age% leq 12 (
        set class=child
    )
)
Run Code Online (Sandbox Code Playgroud)

要么:

if %age% geq 2 if %age% leq 12 set class=child
Run Code Online (Sandbox Code Playgroud)

您可以or使用单独的变量:

set res=F
if %hour% leq 6 set res=T
if %hour% geq 22 set res=T
if "%res%"=="T" (
    set state=asleep
)
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用`set res =`或`set res = 1`然后使用`if defined res`这对于拼写错误更加强大,甚至可以在没有明确启用延迟扩展的块中工作. (14认同)
  • 只是为了改善你的答案......你不需要明确地嵌套"if"语句......你可以"链接"它们,正如Dave Jarvis在下面演示的那样 (5认同)

Dav*_*vis 66

IF语句不支持逻辑运算符(ANDOR),级联IF语句构成隐式连接.

IF Exist File1.Dat IF Exist File2.Dat GOTO FILE12_EXIST_LABEL
Run Code Online (Sandbox Code Playgroud)

如果File1.Dat File1.Dat存在,则跳转标签FILE12_EXIST_LABEL.

也可以看看: IF /?


ano*_*mal 52

De Morgan的定律允许我们仅使用连词("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
Run Code Online (Sandbox Code Playgroud)

这是paxdiablo的"OR"示例的另一个版本,但条件被链接到一行.(请注意,相反leqgtr,和的对面geqlss).

set res=true
if %hour% gtr 6 if %hour% lss 22 set res=false
if "%res%"=="true" set state=asleep
Run Code Online (Sandbox Code Playgroud)


小智 7

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
Run Code Online (Sandbox Code Playgroud)


小智 5

以下示例说明如何制作AND语句(用于设置变量或包括命令的参数)。

要启动记事本并关闭CMD窗口,请执行以下操作:

start notepad.exe & exit
Run Code Online (Sandbox Code Playgroud)

如果变量“ a”等于等等,则将变量x,y和z设置为值。

IF "%a%"=="blah" (set x=1) & (set y=2) & (set z=3)
Run Code Online (Sandbox Code Playgroud)

希望有帮助!