Warum funktioniert dieser Batch code nicht?
set /p code=Code:
if %code% == 219038724366473 goto ugbday
if %code% == h4ck3r goto codehacker
goto nichtgultig
:nichtgultig
(ist ein ausschnitt aus meinem programm,)
Sobald ich Nichts eingebe und enter drücke oder ein leerzeichen stürzt das programm ab, wie kann ich das beheben
LG
1 Antwort
Wieder mal die Sache mit den "Gänsefüßchen"
Wenn die Variable Code Leer ist oder Leerzeichen enthält, wird die if-Zeile folgendermaßen interpretiert:
If ==string Befehl
...Die linke Seite des Vergleichs fehlt quasi, was zu einem schweren Sytaxfehle mit Abbruch der Batch führt.
Setze beide Seiten in "Doublequotes" da ist der Vergleich nie Leer!
If "%code%"=="irgendwas" Befehl
...wird wenn %code% leer ist so interpretiert:
If ""=="irgendwas" Befehl
...saubere Sache. Hinzu kommt das Sonderzeichen: ?|<> innerhalb von " " als normaler Text gelten! Das gilt auch für dein set /p , du weißt nie was der Nutzer eingibt. Deshalb sollte für jede Variablenzuweisung der Parameter von set in Quotes stehen.
Set /p var=das geht in die Hose & wie...
Set /p "var=klappt...gib nun mal mal &<> ein"
Rem das Folgende gibt einen Crash wenn var Steuerzeichen enthält!
Set var2=%var%
Rem so ist es Richtig:
Set "var2=%var%"
...um bei set/p auf ein nacktes Enter zu reagieren, kannst du für diesen Fall einen Defaultwert definieren:
Set "var=defaultwert irgendwas"
Set /p "var=druecke nur Enter>"
Echo %var%
...die irre Welt der BatchSyntax...
Als Batch erfunden wurde waren die Entwickler gerade auf LSD...