こんにちは!今回はバッチファイルの基礎の一つ、処理を無限ループするバッチの作成例を紹介します。
バッチファイルはWindowsを管理しようとするときに非常に役に立つ技術ではあるのですが、ただ資料(リファレンス)を読んでも意外と身につかないものです。
今回つかうのはラベルという機能ですが、ちょっとした使い方の工夫でいろんなことに使えます。
その例として無限ループさせてみようと思います♪
やりたいこと
ラベルを使って無限ループさせてみたい。
せっかくなのでループの回数を数えてみよう。
スクリプト例
@echo off
set kaisuu=0
:Label
set /a kaisuu=%kaisuu%+1
echo %kaisuu%回目です。
pause
goto :Label
解説
内容を簡単に説明していきたいと思います。
ラベルを使ったループ
バッチファイルのラベルには実行中に強制的にジャンプすることが出来ます。
「:ラベル名」で一行作っておくと、そこへ「goto ラベル名」で飛ばすことが出来ます。
goto :Label スキップしたい処理 :Label
通常は、バッチファイルのテストを行う時などに途中の処理を飛ばしたり、あらかじめ処理をまとめておいてまた元の位置に戻す(:サブルーチン)にしたりするときに使います。(本当はCallとExit /bを使うべきですが)
ですが、処理の後ろへだけでなく、前にも飛ばすことができます。
これを利用して無限ループを作り出すわけですね。
:Label 無限ループした処理 goto :Label
setコマンドを使った計算
ついでにループ回数を数えていますが、この時使うのが「Set /a」コマンドです。
バッチファイルでは単純な計算にも用意されたコマンドを利用しなくてはなりません。
なぜなら、「計算機能を使う」という命令を自動でやってくれないからですね。
そのため、「Set /a」という、「計算をした後に計算結果を保存してね」という命令をハッキリ書かないといけません。
set /a kaisuu=%kaisuu%+1 echo %kaisuu%回目です。
そのため、このような形になるわけですね。
ちなみにkaisuuという変数は%%で囲むと中身の値、囲まないと値の入れ物を表すと思ってください。
計算するときは中身を使うので%%で囲み、計算結果は入れ物に入れるので%は要りません。
あとがき
今回はバッチファイルで無限ループをする作成例を紹介させていただきました。
かなり基礎な部分ではあるのですが、ちょっと質問があったので回答として書いてみました。
ラベルとgotoコマンドはとてもシンプルなものですが、使い方が小技的にたくさん存在します。
gotoで前側に飛ばすのもその一つかと思います。
これで出来るかな?と色々トライしていくうちに身につくものだと思いますので、いろいろ試してみるのが良いと思います。
この無限ループでよく使われるのはパスワードなどの入力を促す画面でしょうか。
Yes/Noの対話型インプットでもよく使われる印象です。
:input set /p PASSWORD="パスワード=" set /p PASSWORD="もう一度入力してください=" if %PASSWORD% neq %PASSWORD_C% ( echo 入力が間違っています pause cls goto :input ) echo 入力OK pause
常時実行したいコマンドや、特定の処理が終わるまで監視したりするのにもよく使いますね。
アイディア次第でいろんなことに使えますので、これを活かしていただければ嬉しいです。
何かのお役に立てれば幸いです。
コメント
[…] […]