11

我可以在批处理文件if块中使用“或”/“和”指定多个条件吗?

如果不是那么复杂,我至少可以使用类似的东西:

if value1 < value < value2

基本上我的目的是检查当前系统时间是否在某个时间间隔内(准确地说是 2.05 AM 和 7.55 AM),如果是,则执行某些命令。

4

3 回答 3

31

添加到 dbenham 的答案中,您可以使用ifgoto语句的组合来模拟两个逻辑运算符(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

要测试condition1 OR code2

    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

标签当然是任意的,您可以选择它们的名称,只要它们是唯一的。

于 2012-06-03T18:14:16.067 回答
9

批处理中没有逻辑运算符。但是 AND 很容易用两个 IF 语句来模仿

if value1 lss value if value lss value2 REM do something

批处理 IF 语句不知道如何比较时间。Batch IF 知道如何比较整数和字符串。

一种选择是将时间转换为午夜过后的分钟或秒。

另一个选项是用小时、分钟(和秒,如果需要)来格式化时间,每个都是 2 位宽(0 前缀根据需要)。小时应为 24 小时格式(军用时间)。

于 2012-06-03T05:16:50.800 回答
1

您可以将条件分解为 2 并使用 if 和 if 设置 2 个条件

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
于 2017-04-14T09:53:21.373 回答