2016-03-30 11 views
1

における記述のうち、私は私のバッチプログラムでは、この行を配置する場合どのように組み合わせるか:バッチ

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

をどちらか私が間違っている構文または他の何かが間違っています。私の質問は、event value800805の間にして、eventEffecttaxに設定したいのですが、これは正しい構文ですか?または、2つを別々に設定する方法がありますか?IF

ありがとうございます!

+1

どのようなエラーが表示されますか?その文法は私にとって正しいものです。 –

+1

私は本当の "エラー"自体を得ていませんが、プログラムはすぐに 'echo%eventEffect%'と 'echo%eventValue%'を実行し、パラメータ内に収まっていても 'eventEffect'文字列 "nothing" – tjbushra

+4

変数名のまわりに '%'がありません。 '%eventvalue%gtr 800 if%eventvalue%leq 805 set eventEffect = tax'です。 – SomethingDark

答えて

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% 
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つである場合には、0による可能な除算に対する予防措置として小規模な特別管理が必要です。