このループも、とっても利用価値があるんですよ。
前回、goto 文を使った単純なループの話をしました。
出口を作ってあげないと大変なことになるんですよね。
だったら、予め必要な回数だけループしてくれたら
便利だと思いませんか?
それを実現してくれるのが for ループなんです。
与えられた範囲の内、それぞれの値について、指定された
処理を実行します。構文は、
FOR [オプション] %変数名 IN (セット) DO (コマンド)
の形式を取ります。(help for も参照してね^^)
もう、最初の頃から説明もなしに使ってましたよね ^^;
変数名は、基本的に、1文字の英字を使用します。
大文字、小文字が区別されるため、52 種類が存在します。
バッチファイルで使用するときには、コマンドプロンプトに
for コマンドの変数であることを判って貰う必要があります。
% は、バッチファイルの中で変数を展開させるために使用
されてるので、変数名を展開してしまい、うまくいきません。
この場合、% をもうひとつ付けることによって対応します。
%% は、一文字の % に展開されます。%0 〜 %9 が引数に
展開されるのと同様に、このように定義されていると
思えばいいでしょう。なのでバッチファイル内では、
%%変数名 の形になります。
これも、うっかりすると発見しにくいバグになりますよ。
見つけたとき、「なぁ〜〜んだ」 と思うと同時に、
腹立たしくなってきます・・・(経験談より ^^;)
コマンド部には、実際に行いたい処理を記述していきます。
バッチファイルでは、括弧で括ることによって、複数行に
渡って処理を記述することが出来ます。
この処理の間だけ、変数が有効ですので、その値を利用して
処理を書いていくことになります。まあ、変数の使用は
必須じゃないんですけど、殆ど無意味になっちゃいますので・・・
オプションの無い一般的な形式では、セットには
引数を渡すのと同様に、スペース区切りでリストアップするか、
あるいは、ワイルドカードを使ったファイル名を指定します。
例えば、* とすれば、カレントホルダの全てのファイルに
一致しますし、*.txt とすれば、全ての txt 拡張子のファイル
????.* とすれば、4文字以内の名前をもつファイルに一致します。
これらでピックアップされたそれぞれが、変数に格納され、
コマンド部 で定義された処理に渡されます。そして、
すべての値を処理し終わったら、ループを抜けてくれます。
変数に何が代入されているかを確認するには、コマンド部に
@echo %変数名
を指定して実行してみてください。
処理される全ての変数名を列挙してくれますよ。
さて、オプションを指定する場合ですが・・・
/D および /R は、単なるファイルセットの指定ではなく、
ホルダを処理する場合や、指定したホルダ以下のサブホルダを
再帰的に検索し、全ての対象ファイルを処理する場合に使用します。
/L は、セットに 開始数値、ステップ量、終了数値 を指定
することを宣言します。変数には、これらの与えられた数値に
したがって数字が格納されます。
@echo コマンドで実際に試してみればすぐに判りますよ。
/F オプションはチョッとややこしいんですよね。
でも、それだけ色々なことが出来るってことなんですよ。
簡単な解析なら実現できますね。
私の場合、今では、usebackq による形式を基本的に使用します。
usebackq については、help for を参照してくださいね。
なぜなら、usebackq を指定しない形式では、スペースを含む
ファイル名などを2重引用符を使って指定できないので、
その場合だけ usebackq による形式を使用するよりも、
この形式を基本に考えておいたほうが判りやすい
っていう理由なんですがね・・・
おッ、それは 『手抜き』 だね?
うッ・・・否定できませんです・・・ハイ ^^;
この部分は非常に有用なので、次回に改めて
じっくりとお話していきますね。
応援ポチ お願いしま〜す。