標準出力、標準エラー出力のリダイレクト方法 【Windows】

このページでは Windows における標準出力、標準エラー出力に関するファイルのリダイレクトに関して説明します


スポンサード リンク

1.標準出力、標準エラー出力とは

標準出力とは簡単に言うとディスプレイ(画面)装置です。標準出力に文字を出力すると画面に文字が表示されます。
標準エラー出力も同様ですが、これはエラーメッセージの出力を目的としています。


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

標準出力、標準エラー出力をファイルにリダイレクト(ファイルに出力)する方法を紹介します。
(1)標準出力をファイルにリダイレクト
mycmd.exe > stdout.txt
(2)標準エラー出力をファイルにリダイレクト
mycmd.exe 2> stderr.txt
(3)標準出力をファイルに出力し同時に標準エラー出力をファイルにリダイレクト
mycmd.exe > stdout.txt 2> stderr.txt
(注) 2 と > の間にスペースは入れないでください。
(4)標準出力と標準エラー出力を同じファイルにリダイレクト
mycmd.exe > stdout-stderr.txt 2>&1
(注)「リダイレクトされるファイル」に関して新規ファイルではなく既存のファイルに追記する場合は > の代わりに >> を使用します。


参考:標準出力、標準エラー出力にテスト用の文字を出力するサンプルプログラム

スポンサード リンク


3.標準出力、標準エラー出力のサンプル

以下標準出力、標準エラー出力のサンプルです。(すべて Windows 7 SP1で確認)

コマンド 標準出力 標準エラー出力
dir b:\>stdout.txt 2>stderr.txt
(bドライブが存在しない場合)
【出力無し】 指定されたパスが見つかりません。
net use * /d >stdout.txt 2>stderr.txt
(接続が無い場合)
【出力無し】 システム エラー 1222 が発生しました。

ネットワークが存在しないか、または起動されていません。
move c:\temp\test.txt test2.txt > stdout.txt 2>stderr.txt 1 個のファイルを移動しました。 【出力無し】
move c:\temp\test.txt test2.txt > stdout.txt 2>stderr.txt
(temp.txt を既にエディタで開いている場合)
【出力無し】 プロセスはファイルにアクセスできません。別のプロセスが使用中です。
net start workstation > stdout.txt 2>stderr.txt
(コマンドプロンプトを管理者として実行している場合)
Workstation サービスを開始します.
Workstation サービスは正常に開始されました。
【出力無し】
net start workstation > stdout.txt 2>stderr.txt
(コマンドプロンプトを管理者として実行していない場合)
【出力無し】 アクセスが拒否されました。

参考:Windows 7 (及びWindows7 SP1) 標準の FTP プログラムには不具合があります。標準エラー出力が出力されません。マイクロソフトより修正モジュールがリリースされています。
FTPクライアント (Windows 7上) の標準エラー出力のバグ

(注意)標準出力をファイルにリダイレクトしている場合、コマンドを実行した時に、ユーザに入力を求められる場合、入力のプロンプトが表示されません。
例:
>move c:\temp\test.txt test2.txt > stdout.txt 2>stderr.txt
(プロンプトが停止してしまう

実際には以下のとおりユーザへの入力が要求されている。

>move c:\temp\test.txt test2.txt
>test2.txt を上書きしますか? (Yes/No/All):



スポンサード リンク

[戻る]