導入
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で戻り続ける作りは、抜ける条件(この例では2でgoto :eof)を必ず用意します。抜け道がないと止まらなくなり、ウィンドウを閉じるしかなくなります。
やってみよう
上のメニューを参考に、選択肢を1つ増やしてみましょう(例: 「3. 現在時刻を表示」で echo %TIME%)。if と goto menu の流れがつかめます。