home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 February / VPR9602A.ISO / fwindows / archive / tmedt090.lzh / TOOLD101.LZH / MAN.LZH / FOREACH.MAN < prev    next >
Text File  |  1994-11-20  |  5KB  |  115 lines

  1.  
  2.  
  3. FOREACH(1)              Reference Manual                FOREACH(1)
  4.  
  5.  
  6. NAME  
  7.         foreach - コマンドの繰り返し実行
  8.  
  9.  
  10. SYNOPSIS  
  11.         foreach [-inv] var name1 [name2…]
  12.  
  13.  
  14. DESCRIPTION  
  15.  
  16.         foreach は、同じコマンドを引数を変えながら何度も実行したい場合に
  17.         便利なコマンドである。
  18.  
  19.         foreach コマンドの第1引数varには「変数名」として、英字又は「_」で
  20.         始まり、英数字又は「_」ばかりからなる文字列を与える。またその後に
  21.         与えるname1、name2…は任意の文字列であるが、それがワイルドカード
  22.         を含んでいると展開される。nameは1個以上与えねばならない。
  23.  
  24.         foreach を実行すると「?」を表示して端末からのコマンド行入力待ち状
  25.         態になるので、実行させたいコマンドを任意行入力する。CTRL-Zか「en
  26.         d」か「END」を入力すると入力が終了し、コマンドの実行を開始する。
  27.  
  28.         foreach はまず、端末から入力されたコマンド行の実行を順次行うが、
  29.         このとき、コマンド行の中に「$変数名」あるいは「${変数名}」という
  30.         形のものが混ざっていると、それをname1(ワイルドカードの展開が起こ
  31.         っている場合は展開後のname1)に置き換えながら実行する。それが済ん
  32.         だら、次は「$変数名」をname2に置き換えながら同様のことを行い…と
  33.         いうように繰り返す。
  34.  
  35.         また、「$」の後に来る文字列(あるいは「$」に続く「{ }」の中身)が「
  36.         変数名」と一致しない場合、その名の環境変数の値に置き換えられる。
  37.         但し、「{ }」で囲まない場合、英字又は「_」で始まり、英数字又は「
  38.         _」ばかりからなる環境変数名しか扱えない。「$」の後ろに来る文字列
  39.         の大文字小文字は区別され、またMS-DOSでは環境変数名は大文字で扱わ
  40.         れるので、環境変数の値を利用したい場合は、「$」の後ろは大文字で記
  41.         述する必要がある。なお、「$」そのものを記述するには「$$」と書けば
  42.         いいようになっている。
  43.  
  44.         各コマンド行の実行中、コマンドが0以外のリターンコードを返すと、f
  45.         oreach は実行を中断する。但し、command.comの内部コマンドやバッチ
  46.         ファイルを実行する場合、あるいはパイプやリダイレクトを使う場合は、
  47.         command.comを使って実行するためリターンコードがいつも0になるので、
  48.         常に後続のコマンドが実行される。また、「$」の後ろが変数名でも環境
  49.         変数名でもなかった場合も、やはりforeach は実行を中止する。
  50.  
  51.         foreach には次のオプションを指定することもできる。
  52.  
  53.         -i: コマンドのリターンコードが0でなくても実行を中断しない。
  54.         -n: 実行すべきコマンドを(標準出力に)表示するだけで実際には実行し
  55.             ない。
  56.         -v: 実行すべきコマンドを(標準エラー出力に)表示した後実行する。
  57.  
  58.         ここで、-nは-vに優先する。-n指定時には出力が標準出力に出るため、
  59.         それをバッチファイルにリダイレクトしておき、バッチコマンドとして
  60.         実行することも可能である。
  61.  
  62.  
  63. EXAMPLES  
  64.  
  65.                 foreach i readme *.c *.exe
  66.  
  67.         この場合、変数名は「i」であり、name1は「readme」、name2、name3…
  68.         は「*.c」「*.exe」を展開した後の各ファイル名である。
  69.           これを実行すると「?」を表示してコマンド入力待ちとなるので、例え
  70.         ば次のように入力する。
  71.  
  72.                 copy $i $TMP\$i
  73.                 echo $i is copied
  74.                 end
  75.  
  76.         するとまず、入力中の「$i」をname1である「readme」に、「$TMP」を環
  77.         境変数TMPの値に置き換えながら、入力された2つのコマンド(copyとech
  78.         o)を順次実行する。次に、入力中の「$i」をname2に、「$TMP」をやはり
  79.         環境変数TMPの値に置き換えながら、2つのコマンドを実行し…というよ
  80.         うに、以下name3、name4、…が尽きるまで繰り返される。
  81.  
  82.  
  83.  
  84. 注意事項  
  85.  
  86.         バッチファイルや内部コマンドの実行をcommand.comを使って行うため、
  87.         環境変数COMSPECは必ず設定されていなければならない。
  88.  
  89.         例えば変数名が「i」である場合、端末から入力されたコマンド行に「$
  90.         iA」というものが混じっていると、それは「iA」という環境変数の値と
  91.         見なされ、しかも(環境変数名は大文字で扱われるため「iA」という名の
  92.         環境変数はないので)エラーとなってしまう。このような場合「${i}A」
  93.         と書くことによって、意図通り、変数の置き換え+「A」として扱うこと
  94.         ができる。またこの方法なら、英数字・「_」以外を名前に含む環境変数
  95.         も指定できる。
  96.  
  97.  
  98. BUGS  
  99.  
  100.         現在のところ、「}」で終わる名前の環境変数を使うことはできない。
  101.  
  102.         UNIXのcshのforeachと違い、name1~nを( )で囲む必要はない(囲んでは
  103.         ならない)。
  104.  
  105.         ワイルドカード展開ルーチンは、「" "」などで囲まない限り常に「/」
  106.         を「\」に置き換えてしまう(たとえ「*」「,」などが混じっていなくて
  107.         も)ので、name1~nの中に「/」が混じっているとそれは常に「\」に変換
  108.         されてしまう。但し、foreachの実行開始後に端末から入力するコマンド
  109.         ラインに対しては、foreachは自前ではワイルドカード展開を行わないの
  110.         で、そのような問題は起こらない。
  111.  
  112.  
  113. SEE ALSO 
  114.         wild(5), setarg(5)
  115.