標準出力/標準エラー出力をリダイレクトする

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

今更、windowsには「標準出力」だけではなく「標準エラー出力」というものがあるのを知った。

で、日ごろ使っているwindowsのコマンドが出す文言も、「標準出力」を通して表示されているものと、「標準エラー出力」を通して表示されているものがあるのを知った。

で、それをリダイレクトしてファイル出力する方法を知ったので、メモしておく。

やったこと

MSのサンプルにあったように、dir file.xxx というコマンドを実行して、その2つの出力をリダイレクトしてみる。

dir file.xxx は、カレントディレクトリの中でfile.xxxというファイルの情報を探して、ファイルがあればその情報を表示するコマンドだが、ファイルがないと下記のように、普通のメッセージ(標準出力)と、エラーのメッセージ(標準エラー出力)を出す。

基本

標準出力、標準エラー出力には番号があって、

である。

下記のように、番号を指定してリダイレクトすると、それぞれを個別orまとめてリダイレクトできる。

標準出力をファイルにリダイレクト

標準出力をa.txtというファイルにリダイレクトする。

標準出力のみリダイレクトなので、標準エラー出力はコンソールにそのまま表示される。

dir file.xxx > a.txt

もしくは

dir file.xxx 1> a.txt

※「1」は省略できる。

標準エラー出力をファイルにリダイレクト

標準出力をファイルにリダイレクトする。

標準エラー出力のみリダイレクトなので、標準出力はコンソールにそのまま表示される。

dir file.xxx 2> a.txt

標準出力と標準エラー出力の両方をファイルにリダイレクト

標準出力をファイルにリダイレクトする。

標準エラー出力のみリダイレクトなので、標準出力はコンソールにそのまま表示される。

dir file.xxx 1> a.txt 2>&1

もしくは

dir file.xxx 2> a.txt 1>&2

標準出力と標準エラー出力の両方をnulにリダイレクト(出力を抑制する)

標準出力、標準エラー出力を捨てて、表示されないようにする。ファイルにも保存しない。

dir file.xxx 1> nul 2>&1

参考

標準出力 (stdout) と標準エラー (stderr) への出力をファイルに保存する

これを見たらすべてわかる

https://maku77.github.io/windows/io/redirect-stdout-and-stderr.html

MS公式

https://learn.microsoft.com/ja-jp/troubleshoot/developer/visualstudio/cpp/language-compilers/redirecting-error-command-prompt