77

Windows XPでバッチファイルを実行しているときに、ランダムに発生するエラーメッセージが見つかりました。

指定されたバッチラベルが見つかりませんname_of_label

もちろんラベルは存在しました。このエラーの原因は何ですか?

4

9 に答える 9

89

実際、これを行うには2つの条件が必要です。

  • バッチファイルはCRLF行末を使用してはなりません
  • ジャンプ先のラベルはブロック境界にまたがる必要があります(スクリプトの最後へのショートカットである:end labelとは対照的です)

見る。システムは、指定されたバッチラベルを見つけることができません(byおよびBatch-as-batch-can!

David A. Grayは、2014年にMarshal回答が示したもの(おそらくWindows 7または8)を(Windows 10で)見たコメントで言及しています。スクリプト/バッチプログラム(または)を実行せずに実行すると、eol変換がトリガーされます。.bat.cmdCALL

私は過去35年間に何百ものバッチスクリプトを作成しましたが、ラベルが見つからないという問題が発生したのは、ファイルの改行がWindows(CR / LF)から変換されたときだけでした。 Unix(LF)、そうではありません。


2020年2月、kinarはコメントに追加します:

Win7マシンでこの問題が発生しました。そのファイルがシステムに存在しない場合、
別のファイルをCALLしようとしたときにも、このエラーが生成される可能性があることがわかりました。 私の場合、VSがインストールされていないシステムでVisualStudioファイルを呼び出そうとしていました。.bat
vcvarsall.bat

詳細については、 jeb回答を参照してください。これは未定義のラベルの場合でした。


注:Gitリポジトリでは、次.gitattributesのディレクティブを含むファイルをお勧めします。

*.bat   text eol=crlf
于 2008-10-24T06:49:52.940 に答える
49

私は以前に同じ問題を抱えています。ただし、根本的な原因は CRLF ではありませんでした。CALLスクリプトで Ant などの外部プログラムを実行しましたが、 Ant の前に a を付けていなかったためです。CALLそのため、バッチ スクリプトで使用されるすべての外部プログラムを確認してください。

于 2011-06-21T00:26:10.703 に答える
12

バッチファイルにUNIXの行末(行区切り文字)がある場合、これが発生することがあります。

unix2dosだけで、問題は解決するはずです。

于 2008-10-24T06:37:22.497 に答える
11

問題とその修正方法は次のとおりです。この問題は、DOS バッチ コマンド プログラムのバグまたは機能です。まず明確な問題文。":dothis" のようなターゲット ラベルを持つ DOS バッチ ファイルがあり、ラベルの末尾にスペースがない場合、行末が UNIX の行末であると、バッチ ファイルは機能しません。これは、ファイルを使用する前に、ファイルに対して unix2dos を実行する必要があることを意味します。

根本的な原因は、DOS コマンド ライン プロセッサ (シェル プログラム) が UNIX の行末文字をラベルの一部として使用することです。go to パーツはこれをラベルとして使用しないため、そのようなラベルは本当に存在しないため、決して見つかりません。解決策は、各ターゲット ラベルの末尾、またはすべての行に余分なスペースを配置することです。スペースがセパレーターとして機能し、すべて機能するため、UNIX の行末は機能しなくなりました。

于 2010-08-19T19:53:47.260 に答える
5

また、他のスクリプトを呼び出すときは、呼び出し元の環境で呼び出すのではなく、CALL を使用するようにしてください。

于 2008-12-05T21:30:04.783 に答える
3

.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行末を使用する必要がある」ことを意味していました。

于 2013-12-13T02:32:53.880 に答える
2

Wordから開始コマンドをコピーしてコマンドウィンドウに貼り付けた後、この問題が発生しました。前面に「-」が付いたオプションがあり、DOSの「-」と同じように見えると思いましたが、そうではありませんでした:)「-」を自分で入力した後、問題は解決し、バッチは機能しました...ハード問題を見つけるために...。

于 2013-01-14T10:36:01.480 に答える