Windowsコマンドラインからの出力をテキストファイルにリダイレクトする

Windowsで実行するコマンドまたはバッチジョブの動作をログに記録してトラブルシューティングする最も便利な方法の1つは、出力をファイルにリダイレクトすることです。

ただし、コマンドライン書き込みをファイルにリダイレクトする方法はいくつかあります。選択するオプションは、コマンド出力をどのように表示するかによって異なります。

Windowsコマンドプロンプト出力のしくみ(How Windows Command Prompt Output Works)

Windowsコンソール(コマンドプロンプト(command prompt))でコマンドを入力すると、そのコマンドからの出力は2つの別々のストリームに送られます。

  • STDOUT:標準出力は、コマンドからの標準応答が送信される場所です(Out)たとえば、DIRコマンドの標準応答は、ディレクトリ内のファイルのリストです。
  • STDERR標準エラー(Standard Error)は、コマンドに問題がある場合にエラーメッセージが表示される場所です。たとえば、ディレクトリにファイルがない場合、DIR(File)コマンド(DIR)は「FileNotFound」を標準エラー(Standard Error)ストリームに出力します。

これらの出力ストリームの両方について、出力をWindowsのファイルにリダイレクトできます。

標準出力のリダイレクトを新しいファイルに書き込みます(Redirect Standard Output Write to New File)

コマンドの標準出力をファイルにリダイレクトする方法は2つあります。1つは、コマンドを実行するたびに、コマンド出力書き込みを新しいファイルに送信することです。

これを行うには、コマンドプロンプトを開き、次のように入力します。

dir test.exe > myoutput.txt

>文字は、指定した名前のファイルにSTDOUTを出力するようにコンソールに指示します。

このコマンド(run this command)を実行すると、ファイルが存在しないというエラーを除いて、コマンドウィンドウに応答がないことがわかります。

これは、コマンドの標準出力がmyoutput.txtというファイルにリダイレクトされたためです。これで、ファイルはコマンドを実行したのと同じディレクトリに存在します。標準エラー出力は、通常どおり表示されます。

(Note):コマンドを実行する前に、コマンドプロンプトのActiveDirectoryを変更するように注意してください。(change the active directory)このようにして、出力ファイルがどこに保存されているかを知ることができます。

コマンドウィンドウに「myoutput.txt」と入力すると、ファイルに送信された標準出力を表示できます。これにより、デフォルトのテキストファイルビューアでテキストファイルが開きます。ほとんどの人にとって、これは通常Notepad.exeです。

次に同じコマンドを実行すると、前の出力ファイルが削除されます。新しい出力ファイルは、最新のコマンドの出力で再作成されます。

同じファイル(Same File)へのリダイレクト標準出力(Standard Output)書き込み

同じファイルを上書きしたくない場合はどうなりますか?もう1つのオプションは、>ではなく>>を使用して出力ファイルにリダイレクトすることです。この例の場合、次のように入力します。

dir test.exe >> myoutput.txt

同じ出力が表示されます(エラーのみ)。

ただし、この場合、このコマンドは、出力ファイルを上書きする代わりに、新しい出力を既存の出力ファイルに追加します。

コマンドを実行して出力をファイルに追加するたびに、新しい標準出力が既存のファイルの最後に書き込まれます。

標準エラーをファイルにリダイレクトする(Redirect Standard Error To a File)

標準出力の書き込みをファイルにリダイレクトできるのと同じ方法で、標準エラーストリームをファイルに出力することもできます。

これを行うには、コマンドの最後に2>を追加し、その後に作成する出力エラーファイルを追加する必要があります。

この例では、次のコマンドを入力します。 

dir test.exe > myoutput.txt 2> output.err

これにより、標準出力ストリームがmyoutput.txtに送信され、標準エラーストリームがoutput.errに送信されます。その結果、コンソールウィンドウに出力ストリームがまったく表示されなくなります。

ただし、output.errと入力すると、エラーメッセージが表示されます。これにより、デフォルトのテキストファイルビューアでファイルが開きます。

ご覧のとおり、コマンドからのエラーメッセージはすべてエラーファイルに出力されます。標準出力と同様に、代わりに>>を使用(Just)>>、以前に実行したコマンドからのエラーにエラーを追加できます。

すべての出力書き込みを同じファイルにリダイレクトする(Redirect All Output Writes to a Same File)

上記のすべてのアプローチでは、複数のファイルが作成されます。1つのファイルは標準出力ストリーム用で、もう1つは標準エラーストリーム用です。

これらの出力の両方を同じファイルに含めたい場合は、それも行うことができます。これを行うには、次のコマンドを使用して、すべての出力を同じファイルにリダイレクトする必要があります。

dir test.exe 1> myoutput.txt 2>&1

このコマンドの仕組みは次のとおりです。

  • 標準出力は、出力番号1で識別される出力ファイルに送られます。
  • 番号2で識別される標準エラー出力は、番号1で識別される出力ファイルにリダイレクトされます。

これにより、エラー出力が標準出力の最後に追加されます。

これは、1つのファイル内の任意のコマンドのすべての出力を確認するための便利な方法です。 

標準またはエラー出力ストリームのサイレンシング(Silencing Standard or Error Output Streams)

出力をファイルではなくNUL(NUL)にリダイレクトすることにより、標準出力(Standard Output)または標準エラー(Standard Error)のいずれかをオフにすることもできます。

上記の例を使用して、標準出力(Standard Output)のみが必要で、標準エラー(Standard Error)がまったく必要ない場合は、次のコマンドを使用できます。

dir test.exe 1> myoutput.txt 2>nul

これにより、標準出力(Standard Output)のみをリダイレクトした上記の最初の例と同じ出力ファイルが作成されますが、このコマンドを使用すると、エラーはコンソール内にエコーされません。エラーログファイルも作成されません。

これは、エラーを気にせず、迷惑にならないようにする場合に便利です。

BATファイル内(inside a BAT file)から上記と同じ出力コマンドのいずれかを実行でき、その行からの出力は指定した出力ファイルに送られます。これは、 BAT(BAT)ファイル内のコマンドを実行しようとしたときにエラーが発生したかどうかを確認するのに便利な方法です。



About the author

私は Firefox と Google Docs の経験を持つ Web 開発者です。私はフロリダ大学で経営学の学位を取得しています。私のスキルには、Web サイト開発、コンテンツ管理システム (CMS)、データ分析、およびユーザー インターフェイス設計が含まれます。私は経験豊富なコンサルタントであり、チームが効果的な Web サイトとアプリケーションを構築するのを支援できます。



Related posts