web-dev-qa-db-ja.com

バッチファイル出力全体をログに記録する

コマンドラインスクリプトを使用して、コンピューターの複数の設定を調整しています。ただし、出力全体を.txtファイルまたは.logファイルにも記録する必要があります。

ロギングシステムの基本的な知識を使用すると、出力はファイルに書き込まれますが、実際には実行されません。私の場合、それを実行し、後で参照するためにファイルにログインする必要があります。

誰かがこれを行う方法を教えてもらえますか?

前もって感謝します!デンプシー

質問でスクリプトの「実行」を求められ、バッチファイル全体がWindows 8.1のログファイルに出力される場合、簡単な答えは次のとおりです。

これをバッチファイルの先頭に含めます...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]
10
Ingrid

あなたの質問では、あなたは次のように述べています:

「...出力はファイルに入れられますが、実際には実行されません。私の場合、実行して後で参照するためにファイルにログインする必要があります。」

プログラムが実行中であり、その出力がファイルに書き込まれていると言ったので、あなたは "displayed"の代わりに- "実行"

それがあなたの意図したものではない場合、おそらくいくつかのサンプル出力で、それがよりよく説明されていればおそらく役立つでしょう。

いずれにせよ、この質問/回答が役に立ったと思う人がいる場合に備えて、この回答を投稿しています。

つまり、基本的には、スクリプトの出力をファイルにキャプチャし、スクリプトの実行中に画面上でスクリプトの出力を確認できるようにする必要があるようです。

(tl; dr version: wintee を次のように使用します:

script 2>&1 | wtee logfile.txt


この投稿では、小さなテストバッチファイルを使用しますが、スクリプトは必要に応じて大きく複雑にすることも、単純にすることもできます。

C:\>type a.cmd
@echo off

echo Command: "dir /b a*"
dir /b a*
echo.

echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.


これは、このバッチスクリプトを実行するとどうなるかです。

C:\>a.cmd
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

テストスクリプトでは、「dir」コマンドの最初の実行は成功し、2番目の実行は失敗することに注意してください。これを行うのは、スクリプトを実行したときに「エラーメッセージ」がどうなるかを示すためだけです。

スクリプトを実行し、リダイレクト(">")を使用して出力をキャプチャすると、これが表示されます

C:\>a.cmd > log.txt
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"

C:\>

スクリプトの実行時にエラーメッセージ "ファイルが見つかりません"が画面に表示され、実際にはファイルにキャプチャされていないことに注意してください。 ">"は、STDOUTストリームに送信された「通常の出力」をキャプチャするためです。 「エラーメッセージ」は通常、STDERRストリームに送信されます。

「通常の出力」と「エラーメッセージ」をキャプチャするには、STDERRストリームもキャプチャする必要があります。これは"2" in "2>&1" inで示されますここのコマンド:

C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

UNIXでは、標準のコマンドがあります:"tee"

「tee」コマンドを使用すると、プログラムからの出力をキャプチャし、同時に出力を画面に表示できます。

「tee」コマンドはWindowsでは標準ではありませんが、Windows用の「tee」の無料バージョンをここからダウンロードできます: wintee 。ダウンロードしたプログラムの名前は"wtee.exe"です。

以下に示すように、「wtee.exe」プログラムを使用します。

これにより、以前のようにスクリプト出力が"log.txt"という名前のファイルにキャプチャされ、スクリプトの実行中に画面に出力も表示されます。

C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found
3
Kevin Fegan

このスクリプトはlsを実行し、その出力をlog.txtというファイルに記録します。

exec >log.txt 2>&1
ls

ログは実行されません。

0
Thorsten Staerk