goto文とラベル

gotoコマンドは指定したラベルにバッチファイルの制御を移します。

≪gotoコマンドの使い方≫
goto END ←@
...(実行文などがあって) ←A
:END ←B
←C

上記のように書きます。@のgotoコマンドで、制御を移したいラベル名をENDに指定します。
制御を移したい行(この場合C)の一つ上の行に コロン(:) をつけて END と書くとCに制御が移ります。
したがってA部分の実行文は実行されません。

ラベルはバッチファイルの一番上から探されて、見つかればそのラベルの次の行にバッチファイルの制御を移します。もしバッチファイル中に指定されたラベルが2つ以上書いてある場合は、一番上に書いてあるラベルにバッチファイルの制御が移ります。

≪ラベルが二つある場合≫
@echo off
goto END ←@´
echo 実行しない
:END ←A´
echo 実行する
goto :EOF ←B´
:END ←C´
echo 実行しない

@´でgotoコマンドによりラベルENDに制御を移します。
A´とC´にラベルENDがありますが、gotoコマンドはラベルをバッチファイル中の上から順に探すのでA´でラベルが見つかります。C´のラベルは無視されます。
ラベルの一行下に制御が移るのでechoコマンドが実行され、コマンドプロンプトに「実行する」と表示されます。
B´の:EOFはバッチファイルの末尾を意味する特殊なラベルなので、ここでバッチファイルが終了します。バッチファイルを終了したい場合は、

goto :EOF

と書けば終了できると覚えておくと便利です。

ラベル名について
ラベル名にはセミコロン(;)や等号(=)は使用できないとリファレンスに書いてますが問題なく使えるように思います。文字列中に空白を含むこともできます。
ただしラベル名は最大8文字なので、8文字以上のラベル名にした場合は最初の8文字がラベル名となります。

label0001
label0002

したがって上記のラベル名はいずれも label000 になります。

初版2003/09/12 :最終更新2003/09/12
HOME