If - If mit anschließendem goto funktioniert nicht
Moin, ich bins schon wieder 
Ich kämpfe mit einer doppelten IF abfrage und anschließendem GOTO.
stark abgespeckt sieht das Script so aus:
Wenn manuell auf YES gesetzt ist läuft das sauber durch. Sobald ich das jedoch auf NO setze bekomme ich die Fehlermeldung (goto wäre an dieser Stelle syntaktisch nicht verarbeitbar.
Irgendwie mache ich bei der Verschachtelung einen Fehler und ich bekomme den nicht in den Griff. Ich stehe auf den Schlauch. Wenn ich alles für NO optimiere läuft nacher bei YES nix mehr ...
Was ist mein Fehler?
Viele Grüße
Nagus
Ich kämpfe mit einer doppelten IF abfrage und anschließendem GOTO.
stark abgespeckt sieht das Script so aus:
rem @echo off
color 1F
set manuell=no
if /I %manuell% EQU NO goto Var10
set/A Var10=0
set/A Var12=1
:Var10
REM +++++++++++++++++++++++++++++++ Var 10 +++++++++++++++++++++++++++++++++++++++++
if /I %manuell%==yes if %Haus10%==0 (goto Var12)
pause
goto ende
:Var12
REM +++++++++++++++++++++++++++++++ Var 12 +++++++++++++++++++++++++++++++++++++++++
echo Var12
pause
goto ende
:ende
Wenn manuell auf YES gesetzt ist läuft das sauber durch. Sobald ich das jedoch auf NO setze bekomme ich die Fehlermeldung (goto wäre an dieser Stelle syntaktisch nicht verarbeitbar.
Irgendwie mache ich bei der Verschachtelung einen Fehler und ich bekomme den nicht in den Griff. Ich stehe auf den Schlauch. Wenn ich alles für NO optimiere läuft nacher bei YES nix mehr ...
Was ist mein Fehler?
Viele Grüße
Nagus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 158155
Url: https://administrator.de/forum/if-if-mit-anschliessendem-goto-funktioniert-nicht-158155.html
Ausgedruckt am: 06.04.2025 um 06:04 Uhr
7 Kommentare
Neuester Kommentar
moin Nagus,
das mag ja zum Testen in der CMD-Line gehen und keinen syntatischen Fehler hervorrufen, aber in der CMD-Line werden nicht gesetzte Variablennamen mit Prozent drumrum dargestellt siehe Umgang mit Variablen
vom Batch-Parser wird ja erst die komplette Zeile eingelesen daher der Fehler
gestalte Deine Vergleiche mal so
eine Klammer brauchst Du nur wenn mehrere Anweisung als eine Zeile angesehen werden sollen oder vor der else Klausel
[edit] mathe war schneller ...[/edit]
Gruß Phil
...bekomme ich die Fehlermeldung (goto wäre an dieser Stelle syntaktisch nicht verarbeitbar...
da ist entweder die Variable %Haus10% oder %Manuell% nicht gesetzt ich tendiere auf %Haus10%das mag ja zum Testen in der CMD-Line gehen und keinen syntatischen Fehler hervorrufen, aber in der CMD-Line werden nicht gesetzte Variablennamen mit Prozent drumrum dargestellt siehe Umgang mit Variablen
vom Batch-Parser wird ja erst die komplette Zeile eingelesen daher der Fehler
gestalte Deine Vergleiche mal so
if /i "%manuell%" EQU "NO" goto :Var10
....
if "%Haus10%"=="0" goto :Var12
[edit] mathe war schneller ...[/edit]
Gruß Phil
Du solltest beim zuweisen von Werten darauf achten das diese keine Leerzeichen danach enthalten, sonst gibts Probleme.
Vergleiche funktionieren "besser" wenn beide Seiten in Anführungszeichen sind:
Allgemein:
Ich finde es etwas "schwierig" Variablen und Sprungmarken die gleichen Namen zu geben.
Für die Fehlersuche kannst du ja die Zeile:
set manuell=no -> set "manuell=no"
set/A var10=0 -> set /A "var10=0"
set/A var10=0 -> set /A "var10=0"
Vergleiche funktionieren "besser" wenn beide Seiten in Anführungszeichen sind:
if "%Var10%"==0 -> if "%Var10%"=="0"
Es können beim == Probleme entstehen wenn Leerzeichen am Anfang oder am Ende enthalten sind. Daher nehme ich für vergleiche immer equ:If /I "%manuell%"=="yes" -> If /I "%manuell%" equ "yes"
Allgemein:
Ich finde es etwas "schwierig" Variablen und Sprungmarken die gleichen Namen zu geben.
Für die Fehlersuche kannst du ja die Zeile:
If /I "%manuell%"=="yes" if "%Var10%"==0 (goto :Var12)
aufteilen in:If /I "%manuell%"=="yes" (
if "%Var10%"==0 (
goto :Var12
)
)
if "%Var10%"==0 (
goto :Var12
)
)
Hallo Nagus,
wie miniversum schon geschrieben hat, sollte man beide Seiten eines Vergleich "gleich" halten.
In deinem Beispiel also if "%Var10%"=="0" (goto :Var12)
weil Zeichenweise verglichen wird. Also hinteher "0" mit "0".
Bei deinem Code wurde aber "0" mit 0 verglichen, was niemals gleich sein kann.
Gruß
jeb
wie miniversum schon geschrieben hat, sollte man beide Seiten eines Vergleich "gleich" halten.
In deinem Beispiel also if "%Var10%"=="0" (goto :Var12)
weil Zeichenweise verglichen wird. Also hinteher "0" mit "0".
Bei deinem Code wurde aber "0" mit 0 verglichen, was niemals gleich sein kann.
Gruß
jeb