2012-11-15 17 views
14

バッチファイルのstdoutとstderrを内部からリダイレクトする方法はありますか?バッチファイル内からstdoutとstderrをリダイレクト

私は両方Some text、およびa.exeb.exec.exeの出力がstdout.log

に行くだろう

set STDOUT=stdout.log 
echo Some text 
a.exe 
b.exe 
c.exe 

のようなものを想像していますこれは可能ですか?

答えて

25

。リダイレクトを初期化するには時間がかかります。いくつかのリダイレクトされたコマンドでは気づかないかもしれませんが、反復回数の多いループで実行された場合はかなり重要になります。

一つの方法は、別のオプションは、サブルーチンであなたのコマンドを入れて、CALL

call :redirect >stdout.log 2>&1 
exit /b 

:redirect 
echo Some text 
a.exe 
b.exe 
c.exe 
exit /b 
+0

ログファイル名を変数に入れる方法は何ですか? – domih

6

はい、あなたはリダイレクトと追加標準出力をファイルに(1>> %STDOUT%)とstdout(2>&1)に標準エラー出力を接続する必要があります。

set STDOUT=stdout.log 
echo Some text 1>> %STDOUT% 2>&1 
a.exe 1>> %STDOUT% 2>&1 
b.exe 1>> %STDOUT% 2>&1 
c.exe 1>> %STDOUT% 2>&1 

が正しくあなたの質問は必ずしも両方の標準エラー出力を書くことを意味するものではないことに注意@EitanT同じファイルにstdoutしてください。だから、完全を期すために、ここで区切りファイルへの書き込みのバージョンがあります:それは(APPENDで)個々のコマンドをリダイレクトするよりも、コマンドのコレクション全体に対して一度リダイレクトする方が効率的である

set STDOUT=stdout.log 
set STDERR=stderr.log 
echo Some text 1>> %STDOUT% 2>> %STDERR% 
a.exe 1>> %STDOUT% 2>> %STDERR% 
b.exe 1>> %STDOUT% 2>> %STDERR% 
c.exe 1>> %STDOUT% 2>> %STDERR% 
+1

+をリダイレクトすることです

括弧内リダイレクトコマンドのブロック全体を囲み、括弧の外に

>stdout.log 2>&1 ( echo Some text a.exe b.exe c.exe ) 
をリダイレクトすることです1: 'stderr'を' stdout'にリダイレクトする必要はありません。もしそれらを別々のログにリダイレクトできればいいです。 –

+1

もちろん、そうする必要はありませんが、私は彼が正確にやりたいと思っていました:_... stdout **と** stderrをリダイレクトする... – zb226

+0

はい、両方をリダイレクトしますが、必ずしも同じではありませんロケーション。決して気にしないで、私はちょうどニックピッキングしています... –

関連する問題