GOTO(ラベルジャンプ)

にメンテナンス済み

バッチファイルを作成していると、「特定の条件を満たしたときに処理をスキップしたい」「エラーが発生したらエラー処理に飛びたい」といった場面に遭遇します。

このような処理の流れの制御を実現するのが GOTO コマンドです。

この記事では、GOTO コマンドの基本からサブルーチンの実現方法まで、具体的なサンプルコードを交えて詳しく解説します。

GOTO コマンドの基本構文

GOTO コマンドは、指定したラベルの位置にジャンプするコマンドです。

構文
GOTO ラベル名

ジャンプ先のラベルは、コロン : で始まる行として定義します。

ラベルの定義
:ラベル名

基本的な使用例

goto_basic.cmd
@echo off
setlocal

echo 処理1を実行します。
GOTO SKIP
echo この行はスキップされます。
:SKIP
echo 処理2を実行します。

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>goto_basic.cmd
処理1を実行します。
処理2を実行します。
C:\users\user>

GOTO SKIP によってラベル :SKIP の位置までジャンプするため、間にある echo は実行されません。

ラベル名について

ラベル名は大文字・小文字を区別しません。:SKIP:skip:Skip はすべて同じラベルとして扱われます。

条件分岐と組み合わせる

GOTO コマンドは IF コマンドと組み合わせて使用されることが多く、条件に応じて処理の流れを変更できます。

エラー処理への分岐

error_handling.cmd
@echo off
setlocal

copy "important.txt" "backup\important.txt" >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ERROR

echo バックアップが完了しました。
GOTO END

:ERROR
echo エラー: バックアップに失敗しました。

:END
endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>error_handling.cmd
エラー: バックアップに失敗しました。
C:\users\user>

コピーが失敗した場合は :ERROR ラベルに、成功した場合は :END ラベルにジャンプします。

GOTO :EOF でバッチを終了する

GOTO :EOF は、バッチファイルの末尾にジャンプしてバッチの実行を終了する特殊な記述です。

goto_eof.cmd
@echo off
setlocal

IF NOT EXIST "config.ini" (
    echo エラー: config.ini が見つかりません。
    GOTO :EOF
)

echo 設定ファイルを読み込みました。
rem 以降の処理...

endlocal
チェック

:EOF は明示的に定義する必要のない特殊なラベルです。コマンド拡張機能が有効な場合(Windows のデフォルト設定)に使用できます。

メニュー選択の実装

GOTO コマンドを使用すると、ユーザーの選択に応じて異なる処理を実行するメニューを作成できます。

menu.cmd
@echo off
setlocal

:MENU
echo.
echo ========== メニュー ==========
echo 1. ファイル一覧を表示
echo 2. ディスク使用量を表示
echo 3. 終了
echo ===============================
set /p CHOICE=番号を入力してください:

IF "%CHOICE%"=="1" GOTO LIST
IF "%CHOICE%"=="2" GOTO DISK
IF "%CHOICE%"=="3" GOTO END
echo 無効な入力です。
GOTO MENU

:LIST
dir /b
GOTO MENU

:DISK
wmic logicaldisk get size,freespace,caption
GOTO MENU

:END
echo プログラムを終了します。
endlocal

この例では、ユーザーが「3」を入力するまでメニューが繰り返し表示されます。

サブルーチンとして使う(CALL :ラベル)

GOTO はジャンプしたら戻ってきませんが、CALL :ラベル を使うとサブルーチン(関数のようなもの)として呼び出し、処理後に元の位置に戻ることができます。

subroutine.cmd
@echo off
setlocal

echo メイン処理を開始します。

CALL :GREET "太郎"
CALL :GREET "花子"

echo メイン処理を終了します。
GOTO :EOF

:GREET
echo こんにちは、%~1 さん!
EXIT /B
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>subroutine.cmd
メイン処理を開始します。
こんにちは、太郎 さん!
こんにちは、花子 さん!
メイン処理を終了します。
C:\users\user>
サブルーチンの終了について

サブルーチンは EXIT /B または GOTO :EOF で終了させる必要があります。これがないと、後続のサブルーチンや処理がそのまま実行されてしまいます。

GOTO コマンドの注意点

過度な使用は避ける

GOTO を多用するとコードの流れが複雑になり、いわゆる「スパゲッティコード」になりがちです。可能な場合は IF/ELSE 文や CALL :ラベル によるサブルーチンで代替することを検討してください。

ループ内では注意が必要

FOR ループの中で GOTO を使用すると、ループが中断されます。ループ内で条件分岐が必要な場合は、IF 文を使用してください。

まとめ

この記事では、GOTO コマンドの使い方について解説しました。

用途書き方
ラベルへジャンプGOTO ラベル名
バッチを終了GOTO :EOF
サブルーチン呼び出しCALL :ラベル
サブルーチンから復帰EXIT /B

関連記事

練習問題

練習問題

GOTO コマンドについて、誤っている説明を選択してください。

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #GOTO #ラベル #コマンド