Windows で実行するコマンドまたはバッチ ジョブの動作を記録しトラブルシューティングするための最も便利な方法の 1 つは、出力をファイルにリダイレクトすることです。
How Windows Command Prompt Output Works
Windows コンソール(コマンド プロンプト)でコマンドを入力すると、そのコマンドからの出力は 2 つの別々のストリーム
- STDOUT…
に送られます。 標準出力は、コマンドからの標準的な応答が出力される場所です。
- STDERR: 標準エラーは、コマンドに問題がある場合のエラーメッセージが出力される場所です。
これらの出力ストリームの両方について、Windows でファイルへの出力をリダイレクトできます。
Redirect Standard Output Write to New File
コマンドの標準出力をファイルにリダイレクトする方法は 2 つあります。
これを行うには、コマンド プロンプトを開き、次のように入力します:
dir test.exe > myoutput.txt
> 文字は、指定した名前のファイルに STDOUT を出力するようコンソールに指示します。
このコマンドを実行すると、ファイルが存在しないというエラーを除いて、コマンド ウィンドウに何の反応もないことに気づくでしょう。
これは、コマンドの標準出力が myoutput.txt というファイルにリダイレクトされたからです。 このファイルは、現在、コマンドを実行したのと同じディレクトリに存在します。
注意: コマンドを実行する前に、コマンドプロンプトのアクティブディレクトリを変更するように注意してください。 こうすることで、出力ファイルがどこに保存されているかがわかります。
コマンドウィンドウで「myoutput.txt」と入力すると、ファイルに行った標準出力を見ることができます。 これにより、テキストファイルがデフォルトのテキストファイルビューアで開かれます。 ほとんどの人にとって、これは通常 Notepad.exe です。
次に同じコマンドを実行すると、以前の出力ファイルが削除されます。 新しい出力ファイルは、最新のコマンドの出力で再作成されます。
Redirect Standard Output Writes to the Same File
同じファイルを上書きしたくない場合はどうすればよいですか? もう一つの選択肢は、出力ファイルへのリダイレクトに > ではなく > を使うことです。 この例の場合、次のように入力します:
dir test.exe >> myoutput.txt
同じ出力 (エラーのみ) が表示されます。
しかしこの場合、出力ファイルの上書きではなく、既存の出力ファイルに新しい出力が追加されるコマンドになっています。
コマンドを実行してファイルに出力を追加するたびに、新しい標準出力を既存のファイルの末尾に書き込むことになるのです。
標準エラーをファイルにリダイレクトする
標準出力の書き込みをファイルにリダイレクトできるのと同じ方法で、標準エラーストリームをファイルに出力することもできます。
これを行うには、コマンドの最後に 2> を追加し、作成したい出力エラーファイルを続けて入力する必要があります。
dir test.exe > myoutput.txt 2> output.err
これにより、標準出力ストリームは myoutput.txt に、標準エラーストリームは output.err に送信されます。
しかしながら、output.err と入力することにより、エラーメッセージを確認することができます。
見ての通り、コマンドからのエラーメッセージはすべてエラーファイルに出力されます。 標準出力と同様に、代わりに >> を使用して、以前に実行したコマンドからのエラーに追加することができます。
すべての出力書き込みを同じファイルにリダイレクトする
上記のすべてのアプローチは、複数のファイルを作成する結果となりました。 1 つのファイルは標準出力ストリーム用で、もう 1 つは標準エラー ストリーム用です。
これらの出力の両方を同じファイルに含めたい場合も、そうすることができます。 これを行うには、次のコマンドを使用して、すべての出力を同じファイルにリダイレクトするだけです。
dir test.exe 1> myoutput.txt 2>&1
このコマンドがどのように動作するか説明します。
- 標準出力は、出力番号 1 で識別される出力ファイルに向けられる。
- 出力番号 2 で識別される標準エラー出力は、出力番号 1 で識別される出力ファイルにリダイレクトされます。
これはエラー出力を標準出力の最後に追加します。
任意のコマンドに対するすべての出力が一つのファイルで見られるので便利な方法です。
標準またはエラー出力ストリームのサイレンシング
また、ファイルではなく NUL に出力をリダイレクトすることにより、標準出力または標準エラーのいずれかをオフにすることができます。
上記の例を使用して、標準出力のみで標準エラーをまったく表示しない場合は、次のコマンドを使用できます:
dir test.exe 1> myoutput.txt 2>nul
これにより、標準出力のみをリダイレクトした上記の最初の例と同じ出力ファイルになりますが、このコマンドではエラーはコンソール内にエコーされません。
BAT ファイルの内部から上記と同じ出力コマンドを実行でき、その行からの出力は指定した出力ファイルに送られます。 これは、BATファイル内のコマンドが実行しようとしたときに何かエラーがあったかどうかを確認するのに便利な方法です
。