バッチファイルでコマンド実行時の標準出力/エラー出力を非表示にする方法

バッチファイル

バッチファイルを作成する際、画面表示が複雑化するのを避けたいなどの理由で、特定のコマンドの実行結果をユーザーに見せたくない場合があります。

本記事では、バッチファイルの特定のコマンド実行時の標準出力/エラー出力を非表示にする方法を紹介します。

サンプルコード1:標準出力を非表示にする

ファイルを比較するコマンド fc は、通常、「FC: 相違点は検出されませんでした」といった文字列を画面に出力します。今回は、このfcコマンドの画面出力を抑止するサンプルです。

@echo off

rem ファイル比較を実行。結果は表示しない ★
fc file1.txt file2.txt > nul

if errorlevel 1 (
    echo The files do not match.
    rem ここに不一致時の処理を書く
) else (
    echo The files match.
    rem ここに一致時の処理を書く
)

pause

この書き方では、fcコマンドの標準出力をnulにリダイレクトしています。nullではなくnulである点に注意してください。

nulへのリダイレクトとは?

nulにリダイレクトするというのは、コマンドからの出力(テキスト情報など)を特定の場所へ送る代わりに、それを「無に送る」ことを意味します。出力がnulにリダイレクトされると、その出力はどこにも表示されず、事実上無視されます。

サンプルコード2:標準出力とエラー出力の両方を非表示にする

エラー出力も無視したい場合は、nulへのリダイレクトの後に 2>&1 を記述します。

@echo off

rem ファイル比較を実行。結果は表示しない ★
fc file1.txt file2.txt > nul 2>&1

if errorlevel 1 (
    echo The files do not match.
    rem ここに不一致時の処理を書く
) else (
    echo The files match.
    rem ここに一致時の処理を書く
)

pause

2>&1は、標準エラー出力(stderr)を標準出力(stdout)にマージするための書き方です。nulへのリダイレクトと組み合わせることで、コマンドからのすべての出力(正常な出力とエラーメッセージの両方)を非表示にすることができます。

エラー出力を非表示にすることの注意点

  • 2>&1を使用してエラー出力をnulにリダイレクトすると、問題のトラブルシューティングが困難になる可能性があるため、デバッグ中はこの方法を避けることが推奨されます。
  • 正常な出力とエラーメッセージを区別せずに処理するため、エラーを検出しにくくなる場合があります。

まとめ

バッチファイルでコマンド実行時の表示をコントロールできるようになると、ユーザに対して分かりやすい画面表示を作りやすくなります。ぜひご活用ください。

タイトルとURLをコピーしました