リダイレクト

にメンテナンス済み

コマンドプロンプトでコマンドを実行した際、その出力結果を画面ではなくファイルに保存したいケースがあります。

例えば、ログファイルの作成や、コマンドの実行結果を後から確認したい場合などです。

このようなケースで役立つのがリダイレクト機能です。

この記事では、コマンドプロンプトのリダイレクト機能について詳しく解説します。

リダイレクトとは

リダイレクトとは、コマンドの出力先を変更する機能です。

通常、コマンドの実行結果は画面(コマンドプロンプトのウィンドウ)に表示されますが、リダイレクトを使用することで、その出力をファイルに保存することができます。

コマンドプロンプトでは、以下のリダイレクト演算子を使用できます。

演算子説明
>標準出力をファイルに上書き保存
>>標準出力をファイルに追記
2>標準エラー出力をファイルに上書き保存
2>>標準エラー出力をファイルに追記
2>&1標準エラー出力を標準出力にマージ
<ファイルからの入力を受け取る

標準出力と標準エラー出力

リダイレクトを理解するために、まず標準出力標準エラー出力について説明します。

コマンドプロンプトでは、出力は以下の 2 種類に分類されます。

出力の種類番号説明
標準出力1通常のコマンド実行結果
標準エラー出力2エラーメッセージや警告

例えば、dirコマンドでファイル一覧を表示した場合、その結果は標準出力に出力されます。

一方、存在しないファイルを削除しようとした場合のエラーメッセージは、標準エラー出力に出力されます。

標準出力をファイルに保存する(>

>演算子を使用すると、コマンドの標準出力をファイルに保存できます。

構文
コマンド > ファイル名

使用例

dirコマンドの結果をファイルに保存する例です。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>dir > filelist.txt
C:\users\user>

上記のコマンドを実行すると、dirコマンドの結果がfilelist.txtに保存されます。

画面には何も表示されません。

保存されたファイルの内容を確認してみましょう。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>type filelist.txt
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 1234-5678 です
C:\Users\user\Desktop のディレクトリ
2024/12/12 10:30 <DIR> .
2024/12/12 10:30 <DIR> ..
2024/12/12 10:30 1,234 sample.txt
C:\users\user>
チェック

>演算子を使用すると、指定したファイルが既に存在する場合は上書きされます。既存の内容は失われますのでご注意ください。

標準出力をファイルに追記する(>>

>>演算子を使用すると、既存のファイルに内容を追記できます。

構文
コマンド >> ファイル名

使用例

ログファイルに繰り返し追記する例です。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>echo 処理を開始しました >> log.txt
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>echo 処理が完了しました >> log.txt
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>type log.txt
処理を開始しました
処理が完了しました
C:\users\user>

>>を使用することで、既存のファイルの末尾に新しい内容が追加されます。

標準エラー出力をファイルに保存する(2>

2>演算子を使用すると、エラーメッセージをファイルに保存できます。

構文
コマンド 2> ファイル名

使用例

存在しないファイルを削除しようとした場合のエラーをファイルに保存する例です。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>del 存在しないファイル.txt 2> error.txt
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>type error.txt
存在しないファイル.txt が見つかりませんでした。
C:\users\user>

エラーメッセージがerror.txtに保存されました。

チェック
2>>を使用すると、エラーメッセージを既存のファイルに追記できます。

標準出力と標準エラー出力を同一ファイルに保存する(2>&1

通常の出力とエラーメッセージの両方を同じファイルに保存したい場合は、2>&1を使用します。

構文
コマンド > ファイル名 2>&1

2>&1は「標準エラー出力(2)を標準出力(1)にマージする」という意味です。

使用例

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>dir C:\Users\user\ > output.txt 2>&1

このコマンドを実行すると、dirコマンドの結果とエラーメッセージの両方がoutput.txtに保存されます。

バッチファイルでの使用例

process.cmd
@echo off
setlocal

echo 処理を開始します...

:: 正常な処理(標準出力)
echo ファイルを処理中です

:: エラーが発生する可能性のある処理
copy 存在しないファイル.txt backup.txt

echo 処理が完了しました

endlocal

このバッチファイルを実行し、すべての出力をログファイルに保存する場合:

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>process.cmd > log.txt 2>&1
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>type log.txt
処理を開始します…
ファイルを処理中です
指定されたファイルが見つかりません。
0 個のファイルをコピーしました。
処理が完了しました
C:\users\user>

出力を抑制する(nulへの出力)

コマンドの出力を完全に抑制したい場合は、nulにリダイレクトします。

nulは特殊なファイルで、書き込まれた内容はすべて破棄されます。

構文
コマンド > nul

使用例

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>echo テスト > nul

上記のコマンドを実行しても、画面には何も表示されません。

標準出力と標準エラー出力の両方を抑制

構文
コマンド > nul 2>&1

バッチファイルでよく使われるパターンです。

サイレント実行の例
@echo off
setlocal

:: コマンドの出力を完全に抑制
copy sample.txt backup.txt > nul 2>&1

if errorlevel 1 (
    echo コピーに失敗しました
) else (
    echo コピーが完了しました
)

endlocal

入力リダイレクト(<

<演算子を使用すると、ファイルからの入力をコマンドに渡すことができます。

構文
コマンド < ファイル名

使用例

sortコマンドにファイルの内容を渡してソートする例です。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>sort < names.txt
Alice
Bob
Charlie
C:\users\user>

実践的なサンプルコード

ログファイルの作成

logging.cmd
@echo off
setlocal

set LOGFILE=process_log.txt

:: ログファイルの初期化(日時を記録)
echo ========================================= > %LOGFILE%
echo 処理開始: %DATE% %TIME% >> %LOGFILE%
echo ========================================= >> %LOGFILE%

:: 処理内容をログに記録
echo カレントディレクトリ: %CD% >> %LOGFILE%
echo. >> %LOGFILE%
echo ファイル一覧: >> %LOGFILE%
dir /b >> %LOGFILE% 2>&1

:: 処理終了
echo. >> %LOGFILE%
echo 処理終了: %DATE% %TIME% >> %LOGFILE%

echo ログファイルを作成しました: %LOGFILE%

endlocal

エラーログの分離

separate_logs.cmd
@echo off
setlocal

:: 標準出力とエラー出力を別々のファイルに保存
mycommand.exe > success.log 2> error.log

:: エラーがあったか確認
if exist error.log (
    for %%A in (error.log) do (
        if %%~zA GTR 0 (
            echo エラーが発生しました。error.log を確認してください。
        ) else (
            echo 正常に完了しました。
        )
    )
)

endlocal

練習問題

練習問題1

dirコマンドの結果をfilelist.txtに上書き保存するコマンドとして正しいものは?

回答がサーバーに送信されることはありません
練習問題2

標準エラー出力をファイルにリダイレクトするための演算子は?

回答がサーバーに送信されることはありません
練習問題3

標準出力と標準エラー出力の両方を同じファイルに保存するコマンドとして正しいものは?

回答がサーバーに送信されることはありません

まとめ

リダイレクトは、コマンドプロンプトで作業を行う際に非常に便利な機能です。

主なポイント:

  • >:標準出力をファイルに上書き保存
  • >>:標準出力をファイルに追記
  • 2>:標準エラー出力をファイルに保存
  • 2>&1:標準エラー出力を標準出力にマージ
  • > nul:出力を完全に抑制
  • <:ファイルからの入力

これらの機能を活用することで、ログファイルの作成やエラー処理、バッチファイルの自動化がより効率的に行えるようになります。

#コマンドプロンプト #バッチファイル #リダイレクト #ログ