2005年10月30日

for ループ(その2)

さあ、for コマンドの /f オプションだね。

これは、うまく使うと色々出来て便利なんだ。
構文については、help for を実行して参照してね。


まず、このオプションは、in で与えられたセットから
ひとつずつの文字列を受け取り、これを解析してから、
変数に格納するんだ。

ファイルセットが指定された場合には、
ファイルの内容を1行ごとに受け取る。

リテラル文字列で与えられた場合には、引数の受け取りと
同様に、スペースで区切られた文字列単位で受け取る。
usebackq を使う形式では、2重引用符が使用できるので、
スペースを含む文字列も扱える。

コマンドで与えられた場合には、通常、画面に出力される
結果を、1行ずつ受け取ってくれる。


これだけでも、かなり融通が利くようになるのだが、
受け取ったデータを更に解析してくれるのが嬉しい。

キーワードを含まないデフォルトの解析では、
スペース区切りで、最初の文字列を変数に格納する。

ここでは、スペースを判りやすく (SP) と記すが、
例えば、名前(SP)性別(SP)年齢(SP)・・・ といった
データファイルがあったとしよう。

この場合、デフォルトの解析では、名前のフィールドのみを
変数に格納してくれる。


たびたび言ってしまうが、これだけでもかなり便利だ。
でも、更に細かい解析をしてくれる。

まずは、eol キーワード

例えデータファイルであっても、コメントなどが
書かれている場合もあるだろう。行頭にある決まった
文字を挿入することでコメントとして扱うのが一般的だ。
この文字を指定することで、コメント行と判断してくれる。

eol=#

を指定した場合、先頭に # が書かれた行はスキップする
ということだ。「+Lhaca でサブホルダ毎に一括圧縮」 では
ホルダ名の先頭に _ (アンダースコア) の付いたものを
圧縮処理をしないホルダにすることを、このキーワード
を利用して実現している。

次に、skip キーワード

これについても、ファイルの先頭には、コメント的な様々な
情報が書かれている場合も多い。これらをまとめてスキップ
するために使用するのであろうが、実を言うとは、筆者は
このキーワードを重宝して使用した経緯はない。

次に、delims キーワード

デフォルトではスペース区切りだと話したが、このキーワード
で変更することが出来る。一般的なデータベース形式の CSV
では、区切りに , (カンマ) が使用されている。その場合

delims=,

を指定すれば、区切り文字が変更できる。また、データ形式
によっては、複数の区切り文字を指定したい場合もあるだろう。
その時には指定したい区切り文字を続けて指定してやればいい。
逆に、スペースで区切らず、1行全部を変数に格納したい場合、
このキーワードで区切り文字として何も指定せずに与えると、
スペース区切りをキャンセルして、1行全部を格納できる。
「+Lhaca でサブホルダ毎に一括圧縮」 で使用しているので、
参考にしてみてください。

次は、tokens キーワード

これはややこしいが、非常に便利だ。

前記と同様に、名前(SP)性別(SP)年齢(SP)・・・ というデータから
性別と年齢のデータが欲しいような場合、これで実現できる。

しかし、for 文の変数に指定できるのはひとつだけだ。
どうやって複数のデータを取得するのだろうか?

まあ、これは暗黙的・・・っていうか、勝手に決めて格納してきます。
この場合、2番目、3番目 が欲しいので

tokens=2,3

と指定します。受け取る変数は2つ必要になりますよね。
変数に i を指定した場合には、その上の j が暗黙的に確保されます。
4つ必要で、変数に a を指定した場合には a b c d になりますね。


実際に試したほうが判りやすいでしょう。

for /f "usebackq tokens=2,3 delims=/ " %i in (`date /t`) do echo i=%i j=%j
(改行せずに入力してくださいね)


date /t のコマンドをセットに指定しています。
これも実行してみて、比較するといいですね。

スラッシュ と スペース を区切り文字として指定したので
i には月が、j には日が格納されていますよね。

まあ、この例では1行より出力のないコマンドを使用しましたが、
dir /b コマンドなんか使うと便利ですよ。

このあたりが使えるようになると、あんなことや、
こんなことまで、出来ちゃいますよ。


あんなこと? こんなこと??

そんな言い方じゃ分んね〜よ〜



あはは・・・^^; そうですね。
それじゃぁ、次回からは少し実用的に行きましょうか。

FTP で自動バックアップ なんていうのはどうですか?




応援ポチ  お願いしま〜す。

posted by Woody at 19:40 | 静岡 ☔ | Comment(0) | TrackBack(0) | コマンドプロンプト
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.seesaa.jp/tb/8770629
※特に許可した場合を除き、一方的な TrackBack は
  SPAM として削除いたします。ご了承ください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。