目次
その他の関連しそうな記事
「goto」コマンドとラベルを使ったループ処理
ループ処理と言えば「for」コマンドですが、「for」コマンドではある一定回数のループ処理しかできず、条件判断でのループ処理は行えません。
条件を判断してループを繰り返したり抜けたりするには「goto」コマンドと「if」コマンドを使います。
まず、「goto」コマンドとラベルを使ってループ処理を作ったバッチファイル例(goto_loop.bat)を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem カウンターの初期値を0に設定 set count=0 :loop rem カウンターを+1する set /a count+=1 echo %count%回目のループです。 rem 「loop」ラベルに戻る goto :loop |
最終行(14行目)の「goto」コマンドで7行目の「:loop」ラベルまで戻ってループ処理を実現しています。これによって「goto」と「:loop」の間に書かれてある処理が繰り返し実行されることになります。
ここでは、変数「count」に1を足していき、何回目のループかを表示するコマンドを書いています。
このバッチファイルを実行すると無限にループしてしまいますので注意して下さい(下図)。
プログラムが暴走した場合は、「Ctrl+C」キーを押して停止させましょう。
「if」コマンドによる条件判断でループを抜ける
次に、「if」コマンドを使ってある条件を満たしたらループを抜けるように前節のバッチファイルを書き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@echo off rem カウンターの初期値を0に設定 set count=0 :loop rem カウンターを+1する set /a count+=1 echo %count%回目のループです。 rem カウンターが10より大きくなったらプログラムを終了する if %count% gtr 10 goto :EOF rem 「loop」ラベルに戻る goto :loop |
14行目に「if」コマンドを使って変数「count」が10より大きくなったらループを出るようにコードを加えました。これで、10回目のループでプログラムが終了します。
以下、バッチファイルの実行結果です。
これで、条件判断によるループ処理は実現できました。
ただし、次節で紹介するように「if」コマンドをどこに置くかで条件判断ループの性質が変わってきます。この違いを理解して、使い分けることが大切です。
2種類のループ処理
条件判断に使用する「if」コマンドですが、ループの末尾に置くか、ループの先頭に置くかでその性質が異なってきます。
例として以下のバッチファイルを考えましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem カウンターの初期値を10に設定 set count=10 :loop echo ここはループ内です rem ループの末尾に「if」による条件判断を記述 if %count% geq 10 goto :EOF goto :loop |
条件判断をループ末尾に置いた場合です。変数「count」が10以上になればループを出るような条件になっています。
4行目の「set」コマンドで変数「count」の初期値を「10」に設定していますので、変数「count」はループに入る前に既に10以上です。しかし、条件判断はループ末尾ですので、「echo ここはループ内です」が一度実行されることになります。
以下、実行結果です。
次に、条件判断をループ先頭に置いた場合です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem カウンターの初期値を10に設定 set count=10 :loop rem ループの先頭に「if」による条件判断を記述 if %count% geq 10 goto :EOF echo ここはループ内です goto :loop |
この場合は初めに条件判断が行われますので、「echo ここはループ内です。」の行まで行かずにループが終了します(下図)。
このように、条件判断「if」をどこへ置くかでループ処理の挙動が変化してきます。特に、ループ末尾で条件判断を行う場合は、必ず1回はループ内の処理が行われることに注意して下さい。