Es ist möglich, die bitweisen Berechnungen und den Vergleich in einer einzigen Anweisung durchzuführen. Der Trick besteht darin, absichtlich einen Fehler beim Dividieren durch Null zu erzeugen, wenn das Ergebnis das ist, was Sie suchen. Natürlich sollte stderr auf nul umgeleitet werden, und die ||
Operator wird verwendet, um auf die Fehlerbedingung zu testen (mit der Angabe TRUE).
Diese Technik macht jede Zwischenvariable überflüssig.
@echo off
:enter-input
set "input="
echo(
echo Please enter a number between 1 and 15:
echo 1 = Selection one
echo 2 = Selection two
echo 4 = Selection three
echo 8 = Selection four
echo x = Quit
set /P INPUT=Type number:
if not defined input goto enter-input
if /i "%input%" == "X" exit /b
2>nul (
set /a "1/(1-(input&1))" || echo Selection one
set /a "1/(2-(input&2))" || echo Selection two
set /a 1/(4-(input^&4^)^) || echo Selection three
set /a 1/(8-(input^&8^)^) || echo Selection four
)
pause
goto enter-input
In der akzeptierten Antwort wurde das Offensichtliche nie erwähnt: Sonderzeichen wie &
y )
muss innerhalb der SET /A-Berechnung entweder in Anführungszeichen gesetzt werden. In dem obigen Beispiel habe ich absichtlich beide Techniken demonstriert.
EDIT : Die Logik kann noch einfacher gestaltet werden, indem man die Logik umkehrt (durch Null dividieren, wenn falsch) und die &&
Betreiber.
2>nul (
set /a "1/(input&1)" && echo Selection one
set /a "1/(input&2)" && echo Selection two
set /a 1/(input^&4^) && echo Selection three
set /a 1/(input^&8^) && echo Selection four
)