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