バッチファイルを作成する際、画面表示が複雑化するのを避けたいなどの理由で、特定のコマンドの実行結果をユーザーに見せたくない場合があります。
本記事では、バッチファイルの特定のコマンド実行時の標準出力/エラー出力を非表示にする方法を紹介します。
サンプルコード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にリダイレクトすると、問題のトラブルシューティングが困難になる可能性があるため、デバッグ中はこの方法を避けることが推奨されます。
- 正常な出力とエラーメッセージを区別せずに処理するため、エラーを検出しにくくなる場合があります。
まとめ
バッチファイルでコマンド実行時の表示をコントロールできるようになると、ユーザに対して分かりやすい画面表示を作りやすくなります。ぜひご活用ください。