本文へスキップ
BecomeCoder

バッチファイルコース · 第4章 引数と制御構文 · レッスン13

goto とラベルで流れを変える

導入

goto は、指定した ラベル の場所へ処理を飛ばす命令です。if と組み合わせると、メニューを作ったり、条件次第で処理を打ち切ったりできます。

説明

ラベルは :名前 の形で書き、goto 名前 でそこへジャンプします。

@echo off
set /p num=正の数を入力:

if %num% LSS 0 goto error

echo %num% を受け取りました
goto end

:error
echo エラー: 正の数を入れてください

:end
echo 終了します

この例では、負の数が入ると :error へ飛び、そうでなければ処理を続けてから :end へ飛びます(goto end がないと、正常時でもそのまま :error の行を実行してしまう点に注意)。

特別なラベル :eof(end of file)へ飛ぶ goto :eof は「ここでバッチを終える」という意味で、よく使われます。

簡単なメニューも作れます。

@echo off
:menu
cls
echo 1. あいさつ
echo 2. 終了
set /p sel=番号を選択:

if "%sel%"=="1" (
    echo こんにちは!
    pause
    goto menu
)
if "%sel%"=="2" goto :eof

echo 無効な選択です
pause
goto menu

goto menu で先頭に戻ることで、終了を選ぶまで何度もメニューを表示し続けます。

無限ループに注意 goto で戻り続ける作りは、抜ける条件(この例では 2goto :eof)を必ず用意します。抜け道がないと止まらなくなり、ウィンドウを閉じるしかなくなります。

やってみよう

上のメニューを参考に、選択肢を1つ増やしてみましょう(例: 「3. 現在時刻を表示」で echo %TIME%)。ifgoto menu の流れがつかめます。