batファイルでコマンドの実行結果を出力しないようにする方法


ターゲット

  • 普段batファイルを使用していて、コマンドの実行結果をコマンドプロンプトに出力したくない
  • @echo off をすでに使用している

結論

コマンドの末尾に > nul を付ける

実行結果

C:\Windows\system32>echo hoge
hoge

C:\Windows\system32>echo hoge > nul

理由

> はリダイレクトといい、出力先をコマンドプロンプトでなく指定したファイルに変更します。
nul は空(のファイル)という意味で、書き込んでも何も起きません。
つまり、> nul で出力先を空のファイルに変更することで、コマンドプロンプト上には何も出力されなくなります。

おまけ

> nul を付けただけだと、エラーメッセージは出力されてしまいます。
さらに 2>&1 を付けることで、エラーメッセージも出力されなくなります。

実行結果

C:\Windows\System32>mkdir hoge > nul

C:\Windows\System32>mkdir hoge > nul
サブディレクトリまたはファイル hoge は既に存在します。

C:\Windows\System32>rmdir hoge

C:\Windows\System32>mkdir hoge > nul 2>&1

C:\Windows\System32>mkdir hoge > nul 2>&1

C:\Windows\System32>cd hoge

理由

2> はエラーメッセージをリダイレクトするという意味で、&1 は通常の出力という意味です。
つまり、 2>&1 でエラーメッセージを通常の出力にリダイレクトし、 > nul で通常の出力を空のファイルにリダイレクトすることで、エラーメッセージも空のファイルにリダイレクトされます。
イメージとしては「標準エラー出力→標準出力→空のファイル」です。
ちなみに通常の出力を「標準出力」、エラーメッセージを「標準エラー出力」といいます。

参考リンク