我能否在批处理文件的if
块中使用多个条件,如“或”/“与”?
如果不是太复杂,我至少可以使用类似以下的语法:
if value1 < value < value2
我的目的是检查当前系统时间是否在某个时间间隔内(确切地说是凌晨2点05分至早晨7点55分之间),如果是,则执行特定的命令。
我能否在批处理文件的if
块中使用多个条件,如“或”/“与”?
如果不是太复杂,我至少可以使用类似以下的语法:
if value1 < value < value2
我的目的是检查当前系统时间是否在某个时间间隔内(确切地说是凌晨2点05分至早晨7点55分之间),如果是,则执行特定的命令。
在dbenham的回答基础上,你可以使用if
和goto
语句的组合来模拟逻辑运算符(AND,OR)。
要测试condition1 AND codition2:
if <condition1> if <condition2> goto ResultTrue
:ResultFalse
REM do something for a false result
goto Done
:ResultTrue
REM do something for a true result
:Done
测试条件1或条件2:
if <condition1> goto ResultTrue
if <condition2> goto ResultTrue
:ResultFalse
REM do something for a false result
goto Done
:ResultTrue
REM do something for a true result
:Done
批处理中没有逻辑运算符。但是可以用两个IF语句轻松模拟AND。
if value1 lss value if value lss value2 REM do something
批处理IF语句不知道如何比较时间。批处理IF只能比较整数和字符串。
其中一个选择是将时间转换为从午夜开始的分钟或秒。
另一个选择是使用两位宽度格式化时间(如果需要,包括秒),每个数字都应该有2位(需要前导零)。小时应该是24小时制的(军事时间)。
if %value% GTR %value1% (
echo Value is greater that %value1% ) else call :Error
if %value% LSS %value2% (
echo Value is less than %value2% ) else call :Error
::Write your Command if value lie under specified range
exit
:Error
echo Value doesn't lie in the range
::Write your command for if value doesn't lie in the range
exit
Set "IF=Set "or_=" & (If"
Set "OR=set "or_=1" )& (If "
Set "AND= If "
Set "THEN= set "or_=1" ) & If defined or_ "
Echo: Sample 1
%IF% 1 EQU 2 %OR% 6 NEQ 3 %OR% /I "stp" EQU "Stp" %THEN% Echo Pass
Echo: Sample 2
%IF% 1 EQU 2 %OR% 6 EQU 3 %AND% "stp" EQU "Stp" %THEN% (
Echo Pass
) Else Echo Faill
您可以混合使用,但需要记住:
因此,示例2将被视为: 如果 (ex1) 或者 (ex2 并且 ex3) 那么
set and=if
,if c1 %and% c2 goto AndTrue
。你必须注意这些结构不能有ELSE部分!!! - AaciniResultFalse
部分有一个 "else" 情况。 - Eitan Tset "OR=" & ((if <condition1> set "OR=1") & if <condition2> set "OR=1") & if defined OR (echo TRUE) else (echo FALSE)
。使用这种方法而不是GOTO的原因之一是如果你的OR测试在一个带括号的代码块内 - 你不能在一个带括号的代码块内跳转到一个标签。 - dbenham