2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« ファイル名に!を使うと、環境変数の遅延展開と相性が悪い。 | トップページ | FOR /Fコマンドでファイル更新するときの出力リダイレクト »

2009年3月 7日 (土)

FORコマンドの出力リダイレクト

FORコマンドの出力をファイルにリダイレクトするとき、

for %i in (a b) do echo %i >file

と書くと、doコマンドの繰り返しごとにリダイレクトされます。
この場合、毎回、上書きになってファイルには最後の1行しか入りません。

for %i in (a b) do echo %i >>file

と書くと、追加書きになって、すべて入ります。
しかし、最初からfileが空でないと、その追加書きになります。

もし上書きにしたいときは、最初に空にします。

type nul >file
for %i in (a b) do echo %i >>file

あるいは、forコマンド全体をリダイレクトします。

(for %i in (a b) do echo %i) >file

ただし、このとき、doコマンドのコマンドエコーも一緒にリダイレクトされるので、注意が必要です。

echo off
(for %i in (a b) do echo %i) >file

または、

echo on
(for %i in (a b) do @echo %i) >file

あるいは、

(for %i in (a b) do echo %i >&4) 4>file

とすれば、doコマンドのコマンドエコーはリダイレクトされません。

« ファイル名に!を使うと、環境変数の遅延展開と相性が悪い。 | トップページ | FOR /Fコマンドでファイル更新するときの出力リダイレクト »