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

Printed on: April 19, 2024 at 19:04 o'clock

Member: Arano
Solution Arano Sep 08, 2018 at 16:07:25 (UTC)
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
Member: Penny.Cilin
Penny.Cilin Sep 08, 2018 at 16:09:39 (UTC)
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
Member: anmelder
anmelder Sep 08, 2018 at 18:04:16 (UTC)
Goto Top
Was soll denn an meiner obigen Lösung nicht funktionieren? 0-12 habe ich erfolgreich getestet.
Member: Kraemer
Kraemer Sep 08, 2018 at 20:47:39 (UTC)
Goto Top
Zitat von @anmelder:

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