Почему «Система не может найти указанную метку партии» выбрасывается, даже если метка существует? - PullRequest
52 голосов
/ 24 октября 2008

При запуске командного файла в Windows XP я обнаружил случайное сообщение об ошибке:

Система не может найти указанную метку партии name_of_label

Конечно, ярлык существовал. Что вызывает эту ошибку?

Ответы [ 7 ]

55 голосов
/ 24 октября 2008

На самом деле, вам нужно 2 условия для этого:

  • пакетный файл не должен использовать окончания строки CRLF
  • метка, к которой вы переходите, должна охватывать границу блока (в отличие от and: end label, которая является просто ярлыком до конца вашего скрипта)

См. Система не может найти указанную метку партии и Пакет как партия!

32 голосов
/ 21 июня 2011

У меня раньше была такая же проблема. Тем не менее, основной причиной не был CRLF вообще. Это потому, что в скрипте я выполнил внешнюю программу, такую ​​как Ant, но не поставил CALL перед Ant. Поэтому убедитесь, что CALL каждая внешняя программа используется в вашем пакетном скрипте.

11 голосов
/ 19 августа 2010

Вот проблема и как ее исправить. Проблема заключается в ошибке или функции пакетной cmd-программы DOS. Сначала четкое постановка проблемы. Если у вас есть пакетный файл DOS с целевыми метками, такими как ": dothis", и в конце метки у вас нет места, то пакетный файл не будет работать, если конец строки является окончанием строки UNIX. Это означает, что вы должны запустить unix2dos для файла, прежде чем сможете его использовать.

Основной причиной является процессор командной строки DOS (программа оболочки), принимающая символ конца строки UNIX как часть метки. Поскольку go to part никогда не использует это как метку, она никогда не будет найдена, поскольку такой метки действительно не существует. Решение состоит в том, чтобы поставить дополнительный пробел в конце каждой целевой метки или, что еще лучше, в каждой строке. Теперь конец строк UNIX не вступает в игру, так как пробел действует как разделитель, и все это работает.

9 голосов
/ 24 октября 2008

Если пакетный файл имеет окончание строки Unix (разделители строк), это иногда может произойти.

Просто unix2dos это и проблема должна быть решена.

5 голосов
/ 06 декабря 2008

Вы также должны убедиться, что при вызове других сценариев вы используете CALL, а не вызываете их в среде вызывающего.

3 голосов
/ 13 декабря 2013

Я только что столкнулся с подобной проблемой с файлом .cmd и Windows 8. Решением было изменить все окончания строк в стиле CR + LF DOS. Проблема приводила в замешательство, потому что командный файл в основном работал, и перестановка строк изменила эффект.

Файл .cmd выглядел следующим образом:

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

Функция C может вызвать ошибку «Системе не удается найти указанную метку партии». Странно это могло уйти, переставляя звонки. Изменение концов строки с 0x0A на 0x0D0A, похоже, исправило это.

Возможно, VonC имел в виду "командный файл должен использовать окончания строк CRLF".

2 голосов
/ 14 января 2013

У меня возникла эта проблема после копирования команды запуска из word и вставки ее в командное окно. Был вариант с "-" на передней панели, и он думал, что выглядит так же, как DOS "-" это не так :). После ввода "-" самостоятельно проблема была решена, и пакет работал ... трудно найти проблему ....

...