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


11

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

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

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

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


オペレーティングシステムも指定していません。
マイケルハンプトン

回答:


10

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

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

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

:LOG
[ your script goes here ]

優れたありがとう!(もちろん、ここでは%LOGFILE%は実際には必要ありません。:P)
Andrew

1
私のスクリプトは質問を投げかけます-これが使用された場合、私はそれを見ません。すべてをログに記録し、実行中に画面に表示する方法は?
Simon

ええ、あなたはそれがあなたの画面上にある間あなたがそれを見ることができるようにどのようにそれをしますか?
karl-police

3

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

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

プログラムが実行中であり、その出力がファイルに入れられていると言うので、「実行」ではなく「表示」を意味しているのではないかと思いました。

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

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

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

(tl; drバージョン:次のように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>&1」「2」で示されています。

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

0

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

exec >log.txt 2>&1
ls

ログは実行されません。


1
これはUnix / Linuxを前提としていますが、私の推測では、OPはWindowsについて語っています。また、スクリプトを実行していませんが、入力したコマンドの出力をログに記録し、狂気を止める方法の重要な情報を省略しています...
Sven

私は確かにWindowsについて話している。ありがとう:)
Dempsey FoxDie Van Assche 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.