如何批量组合IF语句

时间:2016-03-30 01:26:06

标签: batch-file cmd

我想把这一行放在我的批处理程序中:

IF eventValue GTR 800 IF eventValue LEQ 805 SET eventEffect=tax

要么我的语法错误,要么其他错误。我的问题是,如果我希望event value介于800805之间,eventEffect设置为tax,这是正确的语法吗?或者有不同的方法设置两个IF周长?

提前致谢!

2 个答案:

答案 0 :(得分:2)

获得相同结果的另一种方法:

set /A "test=0, aux=(800-eventValue)*(eventValue-805), test=(aux-1)/aux" 2>NUL
if %test% equ 0 echo The value is in 800-805 range

说明:

set /A (lowLimit-value)                            is negative or zero if value >= lowLimit
set /A (value-UpLimit)                             is negative or zero if value <= upLimit
set /A (lowLimit-val)*(val-UpLimit)                is positive or zero if value is in range,
                                                   negative otherwise, and
set /A aux=(Low-val)*(val-Up), test=(aux-1)/aux    set test=0 if value is in range,
                                                   test=1 otherwise

这是测试数字值是否在给定范围内的非常有效的方法,甚至可以扩展为测试多个范围 in the same expression ;如果值恰好是其中一个限制,则需要一个小的特殊管理作为防止可能被零除的预防措施。

答案 1 :(得分:1)

好吧,除了将变量作为@somethingDark提到之外,还有其他几个选项;

:: On one line with parentheses:
if %eventValue% gtr 800 (if %eventValue% leq 805 (set eventEffect=%tax%))

:: Code blocks across multiple lines;
if %eventValue% gtr 800 (
    if %eventValue% leq 805 (
        set eventEffect=%tax%
    )
)

:: An odd, but occasionally useful in difficult code blocks check method;
set "isTax=true"
if not %eventValue% gtr 800 set "isTax=false"
if not %eventValue% leq 805 set "isTax=false"
if %isTax% equ true set eventEffect=%tax%