[BATCH] Wieso funktioniert das Sprungziel nicht?

3 Antworten

Woher sollen wir ersehen wo der Fehler liegt , wenn wir den Code nicht sehen?
Ich persönlich habe zwar einen ganzen Sack Kaffeesatz gesammelt um darin zu lesen. das ist auch nötig, um die vielen unpräzisen Fragen zu beantworten.
Bei Deiner Frage reicht auch aller Kaffeesatz der Welt nicht mehr aus.

Soviel ist schon mal klar: am if-statement liegt es nicht, sonst würde goto nicht aufgerufen.
Möglicherweise hast Du einen Buchstabendreher oder eine anderen Fehler im Labelnamen.
Ich benutze Notepad++ als Editor. Beim markieren eines Wortes werden automatisch alle Gegenstücke im Text angezeigt, dann sieht man sofort ob/wo ein Label zu einem Sprungziel vorhanden ist.

Bei 7000 Zeilen hast Du sicher auch eine ganze Menge Label.
Es kann durchaus möglich sein, das es ein Limit für die Anzahl der SprungLabel in einer Batch gibt und Du bist der erste, welcher es Gefunden hat....
(zB. für setlocal ist die Anzahl der ineinander verschachtelten Ebenen auf 32 begrenzt)
Für Label hat wahrscheinlich noch niemand versucht die Grenzen auszuloten...
Sollten wir dich jetzt in Columbus umbenennen?

Selbst in der monströsesten Batch die ich geschrieben habe komme ich bestenfalls auf eine Handvoll gotos.
Wer mehr nötig hat sollte auf jeden Fall sein Programmkonzept überdenken.

siehe Spagetticode https://de.wikipedia.org/wiki/Spaghetticode

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Dass der IF an anderer Stelle funtioniert, sagt in diesem Zusammenhang nichts. Das kann z.B. bedeuten, dass das Sprungziel von dieser Stelle aus nicht gefunden wurde. Es kommt darauf an, welche Befehle bis zum Erreichen des Sprungzieles durchlaufen werden und was diese bewirken.

Wird z.B. eine andere Prozedur oder Programm aufgerufen, so kann es sein, dass die Steuerung nicht mehr zurückgegeben wird. Nur wenn diese mit call aufgerufen wird, gibt es eine Rückkehr.

Gerade bei großen Prozeduren fehlt oft die Übersicht. Füge vor den GOTO ein echo on ein, dann bekommst Du alles protokolliert und siehst an der letzten Meldung, wohin der Lauf gegangen ist.

Die Anweisungen

proz

weiter

verzweigen z.B auf eine Batchdatei namens proz.bat auf Nimmerwiedersehen. Die nächste Anweisung weiter wird nicht mehr ausgeführt, egal was da steht.

Bei

call proz

weiter

folgt nach Durchlaufen von proz die Ausführung von der Anweisung weiter

schwappo 
Fragesteller
 01.05.2018, 13:14

Also wenn ich an den Anfang der Datei ein Goto einbaue, sodass sie direkt zu dem Label springen. Dann findet er das Label und dazwischen sind ca 200 weitere Befehle mehr. Aber bei dem kurzeren Weg findet er das nicht... ...

0
schwappo 
Fragesteller
 01.05.2018, 13:21

Das interessante ist ja auch, dass es vorher einwandfrei funktioniert hat...

0

Benutze auch Notepad++ Xd
HABE DEN FEHLER GEFUNDEN!
Ich Schupfnudel habe vor einiger Zeit die ABSATZKODIERUNG geändert 😂 (Windows -> Unix)
Und Windows kam deswegen im 20 Schritt nicht mehr mit den Befehlen klar...
Hat sich also alles geklärt.

Aber danke für die Antworten.

wotan38  02.05.2018, 15:02

Es geht nichts über eigene Fehler selber finden. So lernt man dazu und so haben auch die andern gelernt.

1