とりわけ環境をセットアップしてビルドを行うバッチファイルがあります。 stdout(スクリプト出力)とstderr(コンパイラエラー)の両方が別々のファイルにリダイレクトされます。バッチファイルのリダイレクトに関係なく、バッチファイルが特定のコマンドの出力をコンソールに強制的に送信することは可能ですか?
これは、リダイレクトしてはならない重要なメッセージの場合があります。または、より具体的には、スクリプトにcolor
コマンドを挿入して、コンソールの前景色と背景色を設定し、コンソールを他の目的に再利用しないように警告します(環境が変更されたため)。 stdoutがリダイレクトされるとき、color
はコンソールの色を変更しません。
私のコメントを示すために:
:: Q:\Test\2018\08\10\SU_1347898.cmd
@Echo off
cls
( Echo normal output 1 redirected with the code block
net file returns an error
Echo *** this line should go directly to Console *** >CON:
Echo normal output 2 redirected with the code block
) 1>SU_1347898_.txt 2>SU_1347898_Error.log
echo(
findstr "^" %~n0_*
サンプル出力:
*** this line should go directly to Console ***
SU_1347898_Error.log:Die Syntax dieses Befehls lautet:
SU_1347898_Error.log:
SU_1347898_Error.log:NET FILE
SU_1347898_Error.log:[id [/CLOSE]]
SU_1347898_Error.log:
SU_1347898_.txt:normal output 1 redirected with the code block
SU_1347898_.txt:normal output 2 redirected with the code block
LotPingsがコメントと回答で述べているように、いつでも>con
を介してコンソールに出力を送信できます(末尾の:
は必要ありません)。
ただし、con
に送信すると、すべての機能が正しく機能するわけではありません。たとえば、cls
は画面を適切にクリアしません。
もう1つのオプションは、ファイルにリダイレクトする前に元のstdoutのコピーを保存してから、保存したハンドルに特別なコマンドを送信することです。
@echo off
9>&1 1>stdout.txt 2>stderr.txt (
echo Most output goes to a file
echo Hello world
>&9 echo But this goes to the original definition of stdout - the console
)
既存のハンドルをリダイレクトするたびに、リダイレクトが実行される前に、元の定義が最初に使用可能な未定義のハンドルに保存されることに注意してください。したがって、以前にリダイレクトがなかったとすると、以下の&3は元の標準出力(コンソール)を指すため、9に明示的に保存する必要はありません。
@echo off
1>stdout.txt 2>stderr.txt (
echo Most output goes to a file
echo Hello world
>&3 echo But this normally goes to the original definition of stdout - the console
)
ただし、3がまだ使用されていないことを保証できないため、暗黙的な保存に依存するのは好きではありません。そのため、正しい結果が得られない可能性があります。指定した未使用のハンドルに明示的に保存することをお勧めします。