1. ホーム
  2. windows

[解決済み] batスクリプトでコンソール出力をファイルにエコーして送信するには?

2022-05-10 07:42:03

質問

タスクを実行し、出力をテキストファイルに送信するバッチスクリプトを持っています。 その出力をコンソール・ウィンドウにも表示させる方法はありますか?

例として

c:\Windows>dir > windows-dir.txt

を出力させる方法はありますか? dir をコンソールウィンドウに表示させるとともに、テキストファイルに入れることはできますか?

解決方法は?

いいえ、純粋なリダイレクトではできません。

しかし、いくつかのトリック(例えば tee.bat )ができます。

リダイレクトの説明を少ししてみる。

10個のストリームのうち1個をリダイレクトするには ファイル または < ファイル

リダイレクトがコマンドの前か後かは重要ではありません。 ということで、この2行はほぼ同じです。

dir > file.txt
> file.txt dir

この例のリダイレクトは、あくまでショートカットで 1> これは、ストリーム1(STDOUT)がリダイレクトされることを意味します。

つまり、以下のように番号を先頭に付ければ、どんなストリームでもリダイレクトできるわけです。 2> err.txt また、1行で複数のストリームをリダイレクトすることも可能です。

dir 1> files.txt 2> err.txt 3> nothing.txt

この例では、標準出力は files.txt に、すべてのエラーは err.txt に、ストリーム 3 は nothing.txt に入ります (DIR はストリーム 3 を使いません)。

ストリーム0はSTDIN

ストリーム1がSTDOUT

ストリーム2がSTDERR

ストリーム3-9は使用しません

しかし、同じストリームを複数回リダイレクトしようとするとどうなるでしょうか?

dir > files.txt > two.txt

そして、それは常に最後の1つです。

ということは、イコール dir > two.txt

OK、もう1つ可能性があります、ストリームを別のストリームにリダイレクトすることです。

dir 1>files.txt 2>&1 

2>&1 はストリーム2をストリーム1にリダイレクトし 1>files.txt にすべてリダイレクトします。 ファイル.txt .

ここでは順番が重要です!

dir ... 1>nul 2>&1
dir ... 2>&1 1>nul

は異なります。最初のものは、すべて(STDOUTとSTDERR)をNULにリダイレクトします。

が、2行目はSTDOUTをNULに、STDERRを"empty"STDOUTにリダイレクトしているのです。

結論として、Otávio Décioやandynormancxの例がなぜうまくいかないかは明らかです。

command > file >&1
dir > file.txt >&2

どちらもstream1を2回リダイレクトしようとしますが、"There can be only one"で、常に最後の1回になります。

そのため、次のようになります。

command 1>&1
dir 1>&2

また、最初のサンプルではstream1からstream1へのリダイレクトは許可されていません(あまり有用ではありません)。

お役に立てれば幸いです。