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

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

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

На самом деле, чтобы это произошло, нужны 2 условия:

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

Видеть. Система не может найти указанную этикетку партии. и Пакет-как-банка!

Другие советы

У меня была такая же проблема раньше.Однако первопричиной был вовсе не CRLF.Это произошло потому, что в сценарии я выполнил внешнюю программу, например Ant, но не поставил CALL перед Ант.Итак, убедитесь, что вы CALL каждая внешняя программа, используемая в вашем пакетном скрипте.

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

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

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

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

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

Я только что столкнулся с подобной проблемой с файлом .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".

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top