Batch Choice funktioniert nicht
Hallo,
Ich habe folgenden Choice Befehl:
Doch leider funktioniert es nicht so, wie es sollte. Punkt 1-9 funktioniert problemlos nur alles andere nicht. Ich habe auch schon mit if Befehlen rumprobiert, nur die funktionieren nicht so gut mit dosbox, wofür dieses Auswahlmenü sein soll. Wäre also gut, wenn man es mit choice irgendwie zum laufen bekommen könnte.
Gruß
Bugger
Ich habe folgenden Choice Befehl:
Choice /C:1234567890ABCDQX /N
if ErrorLevel == Q GoTo Ende
if ErrorLevel == X GoTo X
if ErrorLevel == D GoTo D
if ErrorLevel == C GoTo C
if ErrorLevel == B GoTo B
if ErrorLevel == A GoTo A
if ErrorLevel == 0 GoTo 0
if ErrorLevel == 9 GoTo 9
if ErrorLevel == 8 GoTo 8
if ErrorLevel == 7 GoTo 7
if ErrorLevel == 6 GoTo 6
if ErrorLevel == 5 GoTo 5
if ErrorLevel == 4 GoTo 4
if ErrorLevel == 3 GoTo 3
if ErrorLevel == 2 GoTo 2
if ErrorLevel == 1 GoTo 1
Doch leider funktioniert es nicht so, wie es sollte. Punkt 1-9 funktioniert problemlos nur alles andere nicht. Ich habe auch schon mit if Befehlen rumprobiert, nur die funktionieren nicht so gut mit dosbox, wofür dieses Auswahlmenü sein soll. Wäre also gut, wenn man es mit choice irgendwie zum laufen bekommen könnte.
Gruß
Bugger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 269245
Url: https://administrator.de/contentid/269245
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo Bugger.
Als erstes: Du hast mit
Als zweites: Es gibt 2 verschiedene Möglichkeiten, den Rückgabewert zu verarbeiten:
Grüße
rubberman
Als erstes: Du hast mit
/C:1234567890ABCDQX
sechzehn Möglichkeiten definiert. Der zurückgegebene Errorlevelwert liegt also zwischen 1 und 16.Als zweites: Es gibt 2 verschiedene Möglichkeiten, den Rückgabewert zu verarbeiten:
if errorlevel 16 ...
- die klassische Variante. Hier muss der Errorlevelwert absteigend behandelt werden, denn das Verhalten für das Beispiel wäre "Wenn der Wert größer oder gleich 16 ist, dann ..."if %errorlevel%==16 ...
- Arbeiten mit der Variable errorlevel. Hier kann man unabhängig von der Größe des Wertes die entsprechenden Vergleichsoperatoren anziehen. Da diese Variable aber unterdessen durch die Ausführung von anderem Code verändert worden sein könnte, ist es besser nicht direkt mit der errorlevel Variable zu arbeiten, sondern den ursprünglichen Wert direkt nach dem CHOICE Befehl einer Hilfsvariablen zuzuweisen.Punkt 1-9 funktioniert problemlos
Halte ich für ein Gerücht, denn durch das == in deiner Syntax wird ein Vergleich mit der Zeichenfolge (nicht dem Wert von) ErrorLevel ausgeführt.Grüße
rubberman
Moin Bugger,
Du hast Rubbermans Antwort nicht genau genug gelesen
Gruß jodel32
Du hast Rubbermans Antwort nicht genau genug gelesen
Choice /C:123456789ABCDEFQ /N
if ErrorLevel 16 GoTo Ende
if ErrorLevel 15 GoTo F
if ErrorLevel 14 GoTo E
if ErrorLevel 13 GoTo D
if ErrorLevel 12 GoTo C
if ErrorLevel 11 GoTo B
if ErrorLevel 10 GoTo A
if ErrorLevel 9 GoTo 9
if ErrorLevel 8 GoTo 8
if ErrorLevel 7 GoTo 7
if ErrorLevel 6 GoTo 6
if ErrorLevel 5 GoTo 5
if ErrorLevel 4 GoTo 4
if ErrorLevel 3 GoTo 3
if ErrorLevel 2 GoTo 2
if ErrorLevel 1 GoTo 1
ob mit == oder ist egal
Nanu, wann wurde denn das Verhalten von IF geändert? Dokumentiert ist das jedenfalls nicht. Die Hilfe zu IF sagt immer nochIF [NOT] ERRORLEVEL Nummer Befehl
IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl
IF [NOT] EXIST Dateiname Befehl
Grüße
rubberman