anmelder
Goto Top

Fehler in IF Abfrage

Hallo,

folgender Code macht Probleme:

echo off

:beginn
echo beginn
pause

:anfang
cls

ECHO 01 test
ECHO 02 test2
ECHO 0 beginn
ECHO.
SET Eingabe=""  
SET /p Eingabe= Auswahl: 
IF %Eingabe% EQU 0 GOTO :beginn
IF %Eingabe% LSS 0 GOTO :anfang
IF %Eingabe% GTR 2 GOTO :anfang
IF %Eingabe% EQU "" GOTO :anfang  

echo zahl: %Eingabe%


pause

Die Zahl muß immer zweistellig eingegeben werden damit die Eingabe einheitlich ist, die 0 ist einstellig.

Bei den Eingaben 01-07 und über 10 arbeitet der Code wie erwartet. Bei 08 und 09 wird die Schleife aber verlassen und führt zu Fehlern. Die Lösung ist offenbar folgende Zeile:

IF %Eingabe% GTR 02 GOTO :anfang

Ist das Verhalten der Eingabeaufforderung erklärbar oder handelt es sich um einen Fehler?

Content-Key: 385809

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: Arano
Lösung Arano 08.09.2018 um 18:07:25 Uhr
Goto Top
Hallo

Octal

Ziffernfolgen die mit "0" beginnen werden in einigen Sprachen als Octal interpretiert (Base 8) "08" und "09" sind ungültig weil mit 0-7 die 8 Ziffern der Base 8 ausgeschöpft sind.
https://stackoverflow.com/questions/7218760/why-is-08-not-a-valid-intege ...


~Arano
Mitglied: Penny.Cilin
Penny.Cilin 08.09.2018 um 18:09:39 Uhr
Goto Top
Hallo,

das funktioniert so nicht. Das musst du mit ERRORLEVEL abfangen.
Ungetestet etwa so:
IF ERRORLEVEL  GTR 2 GoTo :Anfang
IF ERRORLEVEL EQU 0  GoTo :Beginn
Die Syntax zum IF Befehl erfährst Du mit
IF/?

Und die Errorlevel müssen absteigen sein!!!
Also 255, 254, 10, 2, 1, 0
D.h. der höchste Wert zu erst und der niedrigste zuletz.
Das hätte man auch selber rausfinden können, ohne eine Frage hier.

Gruss Penny
Mitglied: anmelder
anmelder 08.09.2018 um 20:04:16 Uhr
Goto Top
Was soll denn an meiner obigen Lösung nicht funktionieren? 0-12 habe ich erfolgreich getestet.
Mitglied: Kraemer
Kraemer 08.09.2018 um 22:47:39 Uhr
Goto Top
Zitat von @anmelder:

Was soll denn an meiner obigen Lösung nicht funktionieren?
Funktioniert top. Deswegen stellst du hier auch eine Frage…