2016-03-30 9 views
1

ich diese Zeile in meinem Batch-Programm setzen wollen:Wie kombinieren IF-Anweisungen im Batch

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

Entweder ich habe die Syntax falsch oder etwas anderes ist falsch. Meine Frage ist, wenn ich die zwischen 800 und 805 für die eventEffect auf tax gesetzt haben möchte, ist das die richtige Syntax? Oder gibt es eine andere Möglichkeit, zwei IF Perimeter zu setzen?

Vielen Dank im Voraus!

+1

Welchen Fehler bekommen Sie? Die Syntax sieht für mich richtig aus. –

+1

Ich bekomme keine echten "Fehler" per se, aber das Programm tut sofort 'echo% eventEffect%' und 'echo% eventValue%' afterwords, und selbst wenn es in die Parameter passt, sagt "eventEffect" nur seinen Standard string "nothing" – tjbushra

+4

Ihnen fehlen die '%' s um Ihre Variablennamen. 'if% eventvalue% gtr 800 if% eventvalue% leq 805 gesetzt eventEffect = tax'. – SomethingDark

Antwort

1

Nun, abgesehen von Variablen wie @somethingDark erwähnt, hier sind ein paar andere Optionen;

:: 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

Eine andere Art und Weise das gleiche Ergebnis zu erhalten:

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 

Erläuterung:

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 

Dies ist eine sehr effiziente Methode zu testen, ob ein numerischer Wert innerhalb eines bestimmten ist Bereich, der sogar erweitert werden kann, um auf verschiedene Bereiche zu testenin the same expression; ein kleines spezielles Management ist als Vorsichtsmaßnahme gegen eine mögliche Division durch Null erforderlich, falls der Wert genau einer der Grenzen entspricht.