Warum funktioniert dieser Batch code nicht?

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...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Butzibu 
Fragesteller
 06.10.2020, 21:32

Danke :) hat funktioniert

0