もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
今更、windowsには「標準出力」だけではなく「標準エラー出力」というものがあるのを知った。
で、日ごろ使っているwindowsのコマンドが出す文言も、「標準出力」を通して表示されているものと、「標準エラー出力」を通して表示されているものがあるのを知った。
で、それをリダイレクトしてファイル出力する方法を知ったので、メモしておく。
やったこと
MSのサンプルにあったように、dir file.xxx
というコマンドを実行して、その2つの出力をリダイレクトしてみる。
dir file.xxx
は、カレントディレクトリの中でfile.xxxというファイルの情報を探して、ファイルがあればその情報を表示するコマンドだが、ファイルがないと下記のように、普通のメッセージ(標準出力)と、エラーのメッセージ(標準エラー出力)を出す。
基本
標準出力、標準エラー出力には番号があって、
- 1:標準出力
- 2:標準エラー出力
である。
下記のように、番号を指定してリダイレクトすると、それぞれを個別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公式