Batch goto errorlevel fail

Rastalocke

Cadet 3rd Year
Registriert
Nov. 2010
Beiträge
57
Hey Leute,
Ich habe ein kleines Langeweileoprojekt in der Mache.
Ich will eine kleine Pseudo-Kommandozeile programmieren.
Zur Befehlseingabe benutze ich den goto Befehl:
set /p set1="<0>"
goto %set1%
if errorlevel 1 goto set1fail

Alle verfügbaren Befehle sind als Sprungmarken im Script.

Jetzt das Problem: wenn ich einen unbekannten Befehl eingebe sollte ja theoretisch die if - Sicherung anspringen. allerdings meldet es mir sprungmarke nicht gefunden beendet sofort das ganze script.

Wo liegt der Fehler?
 
Naja da bleibt wohl nur zu prüfen, ob es ne gültige Sprungmarke ist... zudem ist es sowieso krass, die Sprungmarken direkt ungeprüft aus der Eingabe zu verwenden...
 
If Anweisungen müssen vor dem Goto stehen.

Richtig wäre zB.

Code:
:Input
set /p set1="Press 1"
If "%set1%"=="1" (goto Next) Else Goto Input

:Next
 
Kann man recht einfach prüfen:

Code:
@echo off
set /p set1="<0>"
findstr /n /b /i /c:":%set1%" "%~f0" >NUL
if errorlevel 1 goto set1fail
goto %set1%

:com1
echo Executing Command1
goto EOF

:com2
echo Executing Command2
goto EOF

:set1fail
echo Command "%set1%" not found !

:EOF
 
thanks Lynxx! sorry bin eher ein noob mit cmd hab das nähmlich nich in der schule gelernt sondern mir selbst mehr oder weniger beigebracht
 
lynxx schrieb:
Code:
if errorlevel 1 goto set1fail
Aber aufpassen, if errorlevel x prüft ob errorlevel >= x ist, nicht ==. Wenn man also korrekt auf ein Errorlevel prüfen will, dann ist if errorlevel 1 if not errorlevel 2 korrekt. Bringt sonst böse Seiteneffekte zustande. Bzw. würde ein if errorlevel EQ 1 auch funktionieren.
 
Dann gib als Kommando mal "c" oder "co" oder "com" ein, dann gauch das von lynxx gepostete nicht..

Die Lösung könnte etwa so aussehen:
Code:
@echo off
set /p set1="<0>"
findstr /n /b /i /c:"^:%set1%$" "%~f0" >NUL
if errorlevel 1 goto set1fail
goto %set1%Mark

:com1
echo Executing Command1
goto EOF

:com2
echo Executing Command2
goto EOF

:set1fail
echo Command "%set1%" not found !

:EOF

@Yuuri:
http://ss64.com/nt/findstr.html schrieb:
When an item is not found FINDSTR will return an errorlevel >0
So viel zum Thema Seiteneffekte... wenn auf der Seite kein Unsinn steht, dann ist die Abfrage genau so richtig...

Alternative wäre wie auf der Seite gezeigt auf EQU 0 prüfen und dann den GOTO zur Marke zu machen und sonst die Fehlerbehandlung durchführen...
 
Zuletzt bearbeitet:
Zurück
Oben