【bat】バッチファイルでgotoを使い、好きな位置まで移動する方法

サーバー

batファイルで好きな位置まで移動できると色々と便利です。

そんな事出来ないと思っていませんか?

「goto」コマンドを使用すれば以外と簡単に可能だったので、ここに覚書します。

機嫌のいいワンコ

「goto」を覚えたら、batファイルを綺麗に書いたりインタラクティブなbatファイルにしたり出来ます。

管理人

つまり一段階上のスキルになります。絶対に覚えて下さい。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

目次

batファイルでのgotoコマンドの使い方

ジャンプ

batファイルで「goto」コマンドの基礎構文は以下のコードです。

@echo off

REM gotoコマンドでラベルを指定します
goto :ラベル1

飛ばしたい処理

REM ラベルを作成します
:ラベル1
ここに飛びます。
pause

「@echo off」を使用するとbatファイルに記述したコマンドを表示しなくなり、結果が見えやすくなります。「@echo off」に関しては下の記事をご覧ください。

REMを使用するとbatでコメントアウトする事が出来ます。batのコメントアウトに関しては下の記事をご覧ください!

その他のコメントアウト方法や「:」もコメントアウト方法ですが、ここでの「:」はコメントアウトにならない理由などは以下の記事をご覧ください!

gotoコマンドの後に「:」をおいて自分の好きなラベルを指定します。

「:」の後にラベルを指定すれば、そこまで処理を飛ばす事が可能です。

goto以外でもラベルに飛ぶコマンドで「call」がありますが、今回はgotoの方が使いやすいです。callコマンドについては以下の記事にまとめています。

最後の「pause」は実行したバッチの処理を確認する為に一時停止しています。

batのgotoコマンドで最終行まで移動する方法

ジャンプ

batファイルgotoコマンドでもうひとつ便利な使い方をご紹介します。

ラベルを使用して最後の行まで移動する方法です。

つまりスクリプトを終える事が可能です。

簡単に言うとリレミトを唱えたようなものですね。洞窟というスクリプトから抜け出す事が可能です。

@echo off

REM batの最終行まで飛びます
goto :EOF

飛ばす処理

このようにgotoコマンドでEOFラベルを指定します。

EOFというのはbatファイルの最後の行にある暗黙のラベルです。

EOF(End of File)はファイルの終わりを意味します。

これでファイルの最終行まで飛ぶ(スクリプトを終わらせる)事が可能です。

実践:batファイルでgotoコマンドを使用してみた

では実際にbatファイルを作成して、gotoコマンドを使用して見ます。

@echo off

echo この行が最初の行です!

REM lastのラベルまで飛びます
goto :last

REM ここの行が表示されなければ成功です
:NUL
echo この行は不要です。

REM 最後に表示する文字
:last
echo この行が最後の行です!

REM batの最終行まで飛びます
goto EOF

REM ここの行が表示されなければ成功です
:NUL
echo この行もまた不要です。

gotoコマンドを使用したコード説明

まず「この行が最初の行です!」と表示をします。

gotoコマンド「last」ラベルまで飛びます。

「この行は不要です」が飛ばされて表示されないはずです。

「last」ラベルを作成して「この行が最後の行です」と表示させます。

gotoコマンドで最後の行にある暗黙のEOFラベルを指定します。

最後の行に飛ぶはずなので「この行もまた不要です」が表示されないはずです。

ではbatを実行してみます。

gotoコマンドでエラーが出たので対処してみた

下のように「指定されたバッチ ラベルが見つかりません -EOF」というエラーが出ました。

batでgotoコマンドがエラー

コードをよく見るとEOFの前に「:」がないですね。

これがないとラベルと見てくれないのでしっかり「:」をつけましょう。

という事で修正したコードをもう一度実行します。

@echo off

REM startのラベルを張ります
:start
echo この行が最初の行です!

REM lastのラベルまで飛びます
goto :last

REM ここの行が表示されなければ成功です
:NUL
echo この行は不要です。

REM 最後に表示する文字
:last
echo この行が最後の行です!

REM batの最終行まで飛びます
goto :EOF

REM ここの行が表示されなければ成功です
:NUL
echo この行もまた不要です。

batファイルの実行結果は

batファイルのgotoコマンド成功例

先程のエラーがなくなり想定通りの結果となりました。

応用編:業務でも使えるgotoコマンドを使用したbatファイル

ここでは「goto」コマンドを使用した応用編をお伝えします。

条件分岐が出来る「if」と組み合わせると実務でも使用できるbatファイルが出来ます。

@echo off

:again
set /p suji="数字を入力してください:"

if defined suji (
echo あなたが選んだ数字は%suji%です
) else (
goto :again
)
pause

①ラベルを一番前に持ってきています。今回は「again」というラベルを最初に指定しています。

②次に「set /p」コマンドユーザーに値を入力してもらいます。

③「set /p」コマンドでユーザーに入力してもらった文字列を指定した変数に格納します。

「set /p」コマンドのようにsetを使用して、インタラクティブなバッチファイルを作成したい場合は、下の記事を参考にしてください。

④「if」文で変数に値がはいっているか確認して、入っていればメッセージを表示いなければ一番前に戻るbatファイルです。

この処理を追加するだけで、ユーザーが入力しなかった場合に何回も入力を促す事が可能です。

まとめ:batのgotoコマンドで指定したラベルまで移動する方法

script

batファイルでgotoコマンドの使い方の基礎は以下のコードです。

@echo off

REM gotoコマンドでラベルを指定します
goto :ラベル1

飛ばしたい処理

REM ラベルを作成します
:ラベル1
ここに飛びます。

gotoコマンドの後にラベルを指定する。

ラベルを作成してここまで飛ばせる

ラベルを指定する時は「:」をきっちりつける事!

またbatファイルの最後まで飛ばすには以下のコードを使用すれば簡単です。

@echo off

REM batの最終行まで飛びます
goto :EOF

飛ばす処理

ラベルに暗黙のEOFを指定すれば、コードの最後まで飛べる。

batファイルでgotoコマンドを使えば好きな箇所に飛べるので便利です。

サーバー

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次