我想把这一行放在我的批处理程序中:
IF eventValue GTR 800 IF eventValue LEQ 805 SET eventEffect=tax
要么我的语法错误,要么其他错误。我的问题是,如果我希望event value
介于800
和805
之间,eventEffect
设置为tax
,这是正确的语法吗?或者有不同的方法设置两个IF
周长?
提前致谢!
答案 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%