コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に利用するデータの入力元/出力先として、標準入力/標準出力がある。
また、プログラム内でエラーが発生した場合、標準エラー出力に対して出力が行われる(標準出力とは別に指定されている)。
コマンドプロンプトにおいて、標準入力はキーボード(キー入力)、標準出力/標準エラー出力はモニター(画面表示)になっている。
リダイレクトを使うと、標準入力/標準出力/標準エラー出力を変更することができる。
また、標準出力へデータを書き出すプログラムと、標準入力からデータを受け取るプログラムがある時に、パイプを使用することで、前のプログラムが出力したデータを、次のプログラムが直接入力して実行させることができる。
リダイレクトやパイプを使用する事で、キーボード入力作業の自動化や、実行結果をログファイルとして記録するなどが出来る。
標準出力/標準エラー出力をリダイレクト
いずれのリダイレクトでも、出力先のファイルが存在しない場合は自動的に新規作成される。
出力先のファイルが既に存在している場合、リダイレクトの指定方法によって挙動が変わる。
やりがちなミスとして、標準出力のみをリダイレクトして、エラー部分が画面に表示されてしまうことがある。
特にこだわりが無いなら、標準出力と標準エラー出力は同じ出力先にした方が良い。
rem 標準出力をファイルに変更(上書き) rem 既にファイルが存在している場合は上書きされ、元の内容は無くなる rem 以下の2コマンドは同じ意味(「1>」の 1 は省略可能) dir *.aaa > stdout.txt dir *.aaa 1> stdout.txt rem 標準出力をファイルに変更(追記) rem 既にファイルが存在している場合は末尾に追記される rem 以下の2コマンドは同じ意味(「1>>」の 1 は省略可能) dir *.aaa >> stdout.txt dir *.aaa 1>> stdout.txt rem 標準エラー出力をファイルに変更(上書き) dir *.aaa 2> stderr.txt rem 標準エラー出力をファイルに変更(追記) dir *.aaa 2>> stderr.txt rem 標準出力と標準エラー出力を別々のファイルに変更(上書き) dir *.aaa > stdout.txt 2> stderr.txt rem 標準出力と標準エラー出力を別々のファイルに変更(追記) dir *.aaa >> stdout.txt 2>> stderr.txt rem 標準出力と標準エラー出力を同じファイルに変更(上書き) rem 標準エラー出力を標準出力にリダイレクトして、 rem 標準出力側に合流させるようなイメージ dir *.aaa > result.txt 2>&1 rem 標準出力と標準エラー出力を同じファイルに変更(追記) dir *.aaa >> result.txt 2>&1 rem コマンドの実行結果を出力しない rem 「nul」は空のファイルという意味で、書き込んでも何も起きない rem 結果的に、実行結果の出力は捨てられて、どこにも残らない rem 実行結果が出力されないだけで、コマンド自体は実行されている dir *.aaa > nul 2>&1
標準入力をリダイレクト
rem 標準入力をファイルに変更 rem ファイルの内容が入力として読み込まれる rem 以下の2コマンドは同じ意味(「0<」の 0 は省略可能) sort < stdin.txt sort 0< stdin.txt rem 標準入力と標準出力/標準エラー出力をファイルに変更 rem stdin.txt ファイルの内容が入力されて、 rem 実行結果(エラー含む)が result.txt ファイルに出力される sort < stdin.txt > result.txt 2>&1
パイプ
rem 複数のコマンドをパイプで連結 rem 以下のコマンドを実行すると、 rem dir コマンドによって出力されたファイルのリストが、 rem sort コマンドによってソートされて、 rem clip コマンドによってクリップボードにコピーされる dir * | sort | clip rem エラー出力も含めて次のコマンドにパイプ dir *.aaa 2>&1 | sort | clip rem 上記のパイプと同等の内容をリダイレクトで実現 rem パイプの方がシンプルだが、 rem 途中の実行結果を残したい場合は、こちらを使用する dir * > temp-dir.txt 2>&1 sort < temp-dir.txt > temp-sort.txt clip < temp-sort.txt
