出力をファイルにリダイレクトして、バッチスクリプトでコンソールに強制的に出力する


1

環境をセットアップしてビルドを行うバッチファイルがあります。stdout(スクリプト出力)とstderr(コンパイラエラー)は、別々のファイルにリダイレクトされます。バッチファイルのリダイレクトに関係なく、バッチファイルが特定のコマンドの出力をコンソールに強制的に送信することは可能ですか?

これは、リダイレクトすべきではない重要なメッセージの場合があります。より具体的には、colorコンソールの前景色と背景色を設定するコマンドをスクリプトに入れて、(環境が変更されたために)コンソールを他のものに再利用しないように警告します。stdoutがリダイレクトされるとcolor、コンソールの色は変更されません。


このようなタスクにはpowershellを使用しますsuperuser.com/a/74128/164837
アレックス

2
デバイスへのリダイレクト>CON:
-LotPings

回答:


2

私のコメントを示すには:

:: 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

2

LotPingsがコメントと回答で述べているように、いつでもコンソールに出力を送ることができます>con(注、末尾:は不要です)。

ただし、すべての機能がに向けられconたときに正しく機能するわけではありません。たとえばcls、画面を適切にクリアしません。

別のオプションは、ファイルにリダイレクトする前に元の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は元のstdout(コンソール)を指すので、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がまだ使用されていないことを保証できないため、暗黙の保存に依存するのは好きではありません。そのため、正しい結果が得られない可能性があります。指定した未使用のハンドルに明示的に保存するのが最善です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.