久しぶりにコマンドプロンプト(cmd)のバッチファイルを作成し、goto文やcall文を書いたのですが、
EOF(Eond of File)ラベルの使い方を忘れてしまい、確認しましたので、確認結果を共有したいと思います。
レジュメ
環境・前提条件
Windows Server 2016
で確認しました。
結論、暗黙の終了ラベルはEOFではなく:EOF
gotoコマンドのヘルプを読むと、:EOFについての説明が書かれています。
gotoコマンドのターゲットラベルとして:EOFを指定するとラベルを定義しないでバッチスクリプトが終了するようになると。
例えば、gotoコマンドのターゲットラベルをEOFとする
@echo off
echo 1
goto EOF
:EOF
echo 2
のバッチファイルを実行すると以下の結果になります。
これは、goto文のターゲットラベルが:EOFではなく、EOFだからEOFラベルの下の「echo 2」が実行されました。
gotoコマンドのターゲットラベルを:EOFとする
@echo off
echo 1
goto :EOF
:EOF
echo 2
のバッチファイルを実行すると以下の結果になります。
これは、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
この両方とも、バッチファイルの出力は以下のようになります。
同じ結果を得ますが、やはり正式な方でバッチファイルは記載したいですね。
覚えておきましょう。