無条件ジャンプ

サンプル02のような、入力された内容に従ってプログラムを分岐させるような処理を行う場合、不正な文字列が入力される可能性を考慮しなければなりません。1、2、3 のいずれかの数字を入力して項目を選択するような処理でも、操作ミスなどによって範囲外の数字や文字列が入力される可能性があります。

このとき、不正な文字列が入力されたことを表すエラーメッセージを表示するにはifコマンドで実現できますが、できれば入力画面まで処理を戻してやり直せた方が便利です。そのためには、バッチ処理の制御を強制的に移動させなければなりません。

通常は、バッチファイルのテキストの方向に従って順に処理が進められます。この流れを強制的に変更するにはgotoコマンドを使います。gotoコマンドは、バッチファイル内に記述されている任意の場所に実行制御を移動させます。

goto ラベル

ラベルには、制御の移動先を表す名前を指定します。バッチファイル内の任意の場所に、コロン : から始まるラベルを次のように設定できます。

:ラベル

gotoコマンドを実行すると、指定されたラベルに制御が移動します。状況に応じてコマンドの実行を省略したり、前の処理に戻すことができるようになりますが、あまり無計画に多用するとプログラムの流れが複雑になってしまうので注意が必要です。

サンプル 09

@prompt $G

goto label
echo このコマンドは飛ばされます。

:label
echo ここにジャンプします。

@pause

実行結果

サンプル09の実行結果

サンプル09は、gotoコマンドを使って labelという名前のラベルに強制的に移動させています。実行すると、途中のechoコマンドが実行されておらず、gotoコマンドで指定したラベルまで移動していることが確認できます。

ifコマンドやgotoコマンドを使うことで、ある程度プログラム的に振る舞うバッチ処理が可能となります。状況に応じて処理を変更させて、多様な目的に使えるバッチファイルを作れば、日常的なコンピュータの管理を簡略化できるでしょう。

[Microsoft TechNet コマンド ライン リファレンス]