なぜ“指定されたバッチラベルが見つからないのか”ラベルが存在する場合でもスローされますか?

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

  •  04-07-2019
  •  | 
  •  

質問

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

  

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

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

役に立ちましたか?

解決

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

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

参照。 システムが見つかりません指定されたバッチラベルおよび Batch-as-batch-can!

他のヒント

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

問題とその修正方法を以下に示します。問題は、DOSバッチcmdプログラムのバグまたは機能です。まず、明確な問題の説明。 ":dothis"のようなターゲットラベルを持つDOSバッチファイルがあり、ラベルの最後にスペースがない場合、行末が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行末記号を使用する必要がある」ことを意味していました。

iは、wordから開始コマンドをコピーしてコマンドウィンドウに貼り付けた後にこの問題を抱えていました。 "-"のオプションがありました。フロントで、DOSと同じように見える"-" :)を入力した後ではありませんでした。自分で問題は解決され、バッチは機能しました...問題を見つけるのは困難でした....

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top