bugger
Goto Top

Batch Choice funktioniert nicht

Hallo,

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

Content-ID: 269245

Url: https://administrator.de/contentid/269245

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

rubberman
Lösung rubberman 15.04.2015, aktualisiert am 16.04.2015 um 18:45:31 Uhr
Goto Top
Hallo Bugger.

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
Bugger
Bugger 16.04.2015 um 07:19:28 Uhr
Goto Top
Hallo rubberman,

vielen Dank für die Antwort, jetzt habe ich es glaube ich.^^ Mein Fehler war, die Zeichen nicht absteigend zu machen, insbesondere die Buchstaben.

Ich habe es jetzt so gemacht:

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

Komischerweise funktioniert nur F nicht, alles andere ist so wie es soll.
114757
114757 16.04.2015 aktualisiert um 09:51:59 Uhr
Goto Top
Moin Bugger,
Zitat von @Bugger:
Komischerweise funktioniert nur F nicht, alles andere ist so wie es soll.
Du hast Rubbermans Antwort nicht genau genug gelesen face-wink
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
Gruß jodel32
Bugger
Bugger 16.04.2015 um 18:45:17 Uhr
Goto Top
Asche über mein Haupt, da war doch tatsächlich ein Fehler im F Teil des Scripts.^^ Aber jetzt funktioniert alles wie es soll, ob mit == oder ist egal, alles läuft face-smile
Vielen lieben Dank face-smile

Gruß
Bugger
rubberman
rubberman 17.04.2015 um 19:10:41 Uhr
Goto Top
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 noch
IF [NOT] ERRORLEVEL Nummer Befehl
IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl
IF [NOT] EXIST Dateiname Befehl
Also würde ich da (auch wenn es mit == funktionieren sollte) eher von undefiniertem Verhalten ausgehen...

Grüße
rubberman