バッチファイルの:EOFは暗黙の終了ラベル

久しぶりにコマンドプロンプト(cmd)のバッチファイルを作成し、goto文やcall文を書いたのですが、
EOF(Eond of File)ラベルの使い方を忘れてしまい、確認しましたので、確認結果を共有したいと思います。

環境・前提条件

Windows Server 2016

で確認しました。

結論、暗黙の終了ラベルはEOFではなく:EOF

image

gotoコマンドのヘルプを読むと、:EOFについての説明が書かれています。
gotoコマンドのターゲットラベルとして:EOFを指定するとラベルを定義しないでバッチスクリプトが終了するようになると。

例えば、gotoコマンドのターゲットラベルをEOFとする

@echo off

echo 1

goto EOF

:EOF
echo 2

のバッチファイルを実行すると以下の結果になります。

image

これは、goto文のターゲットラベルが:EOFではなく、EOFだからEOFラベルの下の「echo 2」が実行されました。

gotoコマンドのターゲットラベルを:EOFとする

@echo off

echo 1

goto :EOF

:EOF
echo 2

のバッチファイルを実行すると以下の結果になります。

image

これは、goto文のターゲットラベルが:EOFだったためEOFラベルの下の「echo 2」が実行されずに、ファイルの最後に飛びました。
EOFと:EOFの違いということですね。

gotoコマンドの引数でターゲットラベルは「:」が付いていても付いていなくてもよい

面白いのは、正式にはgotoコマンドの引数であるあるターゲットラベルは、ヘルプを見る限り「:」は付けないのが正式な使い方です。

@echo off

echo 1

goto EOFa

:EOFa
echo 2

しかし、EOF以外は、コロンが付いていても、付いていなくても同じ結果を得ます。

@echo off

echo 1

goto :EOFa

:EOFa
echo 2

この両方とも、バッチファイルの出力は以下のようになります。

image

同じ結果を得ますが、やはり正式な方でバッチファイルは記載したいですね。
覚えておきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です