このページでは 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): |
スポンサード リンク
[戻る]