Warum „Das System kann nicht das Batch-Label findet angegeben“ wird ausgelöst, auch wenn Etikett vorhanden ist?

StackOverflow https://stackoverflow.com/questions/232651

  •  04-07-2019
  •  | 
  •  

Frage

Während eine Batch-Datei in Windows XP ich zufällig auftretende Fehlermeldung gefunden habe:

  

Das System kann nicht die Batch-Etikett angegeben name_of_label finden

Natürlich Label existiert. Was sind die Ursachen dieser Fehler?

War es hilfreich?

Lösung

Eigentlich benötigen Sie 2 Bedingungen dies geschehen kann:

  • die Batch-Datei darf nicht CRLF Zeilenende
  • verwenden
  • das Etikett Sie springen zu müssen Blockgrenze erstrecken (im Gegensatz zu und: Endlabels weicht ist nur eine Verknüpfung zum Ende des Skripts)

Sehen. Das System kann das nicht finden Batch-Etikett angegeben und Batch-as-Batch-Dose!

Andere Tipps

Ich habe vor das gleiche Problem bekommt. Allerdings war die Ursache überhaupt nicht CRLF. Es war, weil in dem Skript, das ich ein externes Programm wie Ant ausgeführt, aber keinen CALL vor Ant gelegt hat. Also, stellen Sie sicher, dass Sie jedes externes Programm CALL in Batch-Skript verwendet wird.

Hier ist das Problem und wie es zu beheben. Das Problem ist ein Bug oder ein Feature in DOS Batch-cmd-Programm. Zunächst wird die klare Problemstellung. Wenn Sie eine DOS-Batch-Datei mit Ziel Labels wie haben „: DoThis“, und am Ende des Etiketts Sie haben keinen Platz, dann wird die Batch-Datei nicht funktioniert, wenn die Zeilenende UNIX sind Zeilenende. Das heißt, Sie haben unix2dos auf die Datei ausführen, bevor Sie es verwenden können.

Die Ursache ist der DOS-Eingabezeilenprozessor (Shell-Programm), nimmt das UNIX-end-of-line-Zeichen als Teil des Etiketts. Da der Sprung zu Teil nie als Label verwendet, wird es nie wirklich existiert nicht, da ein solches Etikett gefunden. Die Lösung ist ein extra Raum am Ende eines jeden Zielmarke zu setzen, oder noch besser jeder Zeile. Nun UNIX Ende der Leitungen kommt nicht zu spielen, da der Raum wirkt als Trennzeichen und alles funktioniert.

Wenn Batch-Datei hat Unix-Zeilenende (Zeilenseparatoren) kann dies manchmal passieren.

Just unix2dos es und Problem gelöst werden sollte.

Sie sollten auch sicherstellen, dass, wenn andere Skripte aufrufen CALL verwenden, anstatt sie in die Anrufer Umgebung aufrufen.

Ich traf ein ähnliches Problem gerade jetzt mit einer .cmd-Datei und Windows 8. Die Lösung bestand darin, alle Zeilenende CR + LF DOS-Stil zu ändern. Das Problem war verwirrend, weil die Batch-Datei meist gearbeitet und Neuanordnung Linien verändert die Wirkung.

Die .cmd-Datei sah aus wie:

call:function_A "..\..\folderA\"
call:function_B "..\..\folderB\"
call:function_C "..\..\folderC\"
call:function_D "..\..\folderD\"
goto:eof

:function_A
rem do stuff
goto:eof

...etc...

Funktion C würde dazu führen, Fehler „Das System kann nicht das Batch-Etikett angegeben finden“. Merkwürdiger könnte es durch Neuanordnung der Anrufe gehen weg. Ändern Zeilenenden von 0x0A zu 0x0d0a scheint es behoben zu haben.

Vielleicht VonC bedeutet "die Batch-Datei CRLF Zeilenenden verwenden müssen".

Ich hatte dieses Problem nach einem Startbefehl von Wort zu kopieren und in das Befehlsfenster einfügen. Es gab eine Option mit „-“ auf der Vorderseite, und dachte, das das gleiche wie das DOS aussieht „-“ es nicht Nach der Eingabe der :) wurde „-“ von mir das Problem gelöst wurde und der Ansatz gearbeitet ... ein harter finden Problem ....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top