こんなことを知りたい人へ向けて書いています
- 「@echo off」ってよく見かけるけど、これって何の意味があるの?という方
- コマンドをイチイチコマンドプロンプトに表示させたくないという方
目次
「@echo off」の役割
初めに結論を述べると、「@echo off」はコマンドプロンプト画面にバッチファイルに書いたコマンドを復唱させないようにするための指示です。「@echo off」というコマンドがバッチファイルの先頭(一番上の行)に書かれてあるバッチファイルプログラムをよく見かけたことがあるのではないでしょうか?
言葉で説明するよりも実際にバッチファイルの実行を見た方が理解しやすいでしょう。以下のバッチファイル「no_echooff.bat」を見てみましょう。
1 2 |
rem 「echo」コマンドの実行 echo これは「echo」コマンドで出力されたメッセージです |
ただの「echo」コマンドを実行するだけのバッチファイルです。注目するのは、「@echo off」は指定していない点です。
以下がコマンドプロンプト上で実行した結果です。
上図の赤字で示していますが、一番上が実行時の自分で打ち込んだ実行コマンドです。その次にバッチファイルに記述したコマンドの復唱(1行目)が出力されています。「rem」はコメントアウト(詳しくは「バッチファイルでコメントを使用する -やりたいことから検索-」を参照)するコマンドですが、それもコマンドプロンプト画面へイチイチ表示されます。
続いて、「echo」コマンドを実行する部分のコマンドの復唱(2行目)です。その次に、ようやく「echo」コマンドによって出力されたメッセージが表示されています。
このように、バッチファイルを実行すると、イチイチバッチファイルに記述したコマンドがコマンドプロンプト画面に出力されます。これは時によって冗長に感じることがあります。
そこで、「@echo off」の出番です。これをバッチファイルの行頭で指定しておくことにより、コマンドの復唱をさせないようにできます。以下のバッチファイル「echooff.bat」を実行してみましょう。
1 2 3 4 |
@echo off rem 「echo」コマンドの実行 echo これは「echo」コマンドで出力されたメッセージです |
ただ、行頭に「@echo off」コマンドを追加しただけです。以下が実行結果になります。
「@echo off」を指定していない場合と比べてかなりスッキリした出力になりました。出力されているのは、「echo」コマンドによるメッセージだけです。コマンドの復唱はすべて消えています。
私の経験では、この「@echo off」コマンドは自分でバッチファイルを作成するとき、必ずと言っていいほど指定しますので、是非覚えておきましょう。
特定のコマンドの表示だけを消す
前節では、「@echo off」の役割について説明しました。その役割はすべてのコマンドプロンプトの表示(復唱)をさせないことです。
では、特定のコマンドだけ表示をさせない(消す)ことはできるのでしょうか?それには、「@」を使用します。コマンドの表示をさせたくないものに対して、その行の先頭に「@」を付加することで、その行のコマンドの表示を無くせます。
以下のバッチファイル「echooff_oneline.bat」を例に確認していきましょう。
1 2 |
echo 通常の「echo」コマンド出力 @echo 「@」付きの「echo」コマンド出力 |
1行目は通常の「echo」コマンドによる出力、2行目は「@」付きの「echo」コマンドによる出力です。これを実行してみましょう。以下のようになります。
いま、「@echo off」は指定していないので、通常の「echo」コマンドによる出力はコマンドの復唱(表示)が行われています。しかし、「@」を付けた方の「echo」コマンドは出力メッセージだけです。
このようにコマンドの先頭に「@」を付けることで、コマンドの復唱をさせないようにすることができます。
逆にすべてのコマンドを表示させる
次は、逆にすべてのコマンドを復唱(表示)させたい場合を考えましょう。といっても「@echo off」を付けなければデフォルトですべてのコマンドが表示されますので、何もしなくてよいということでなりますが…
なので、ここでは初めはコマンドの表示は「@echo off」でさせないようにしているが、プログラムの途中からすべてのコマンドについて復唱させる場合を考えましょう。以下のようなバッチファイル「echo_offon.bat」を考えます。
1 2 3 4 5 6 7 8 9 10 |
@echo off rem 初めはコマンドの表示をoff echo 第1メッセージ rem ここから下はコマンドを復唱させる @echo on rem コマンドの表示をon echo 第2メッセージ |
初めにバッチファイルの先頭で「@echo off」を指定しています。これによって、コマンドの復唱をオフにしています。なので、4行目の「echo」コマンドは復唱されません。
そして、注目するのは7行目の「@echo on」コマンドです。このコマンドは「@echo off」コマンドの真逆で、コマンドの復唱をオンにするためのものです。これによって、これ以下のコマンドはコマンドが復唱されるようになります。したがって、最終行の「echo」コマンドはコマンドプロンプト画面へ出力されることになります。
以下、実行結果です。
7行目より下のコマンドだけがコマンドプロンプト画面に複勝されていることが分かります。
「@echo off」では消せないコマンドプロンプトへのメッセージも消す
中には、「@echo off」では消すことができないコマンドプロンプト画面へのメッセージも存在します。一例として「copy」コマンドを実行したときの、「1 個のファイルをコピーしました。」というメッセージなどです。以下のバッチファイル「copy_message.bat」を実行してみましょう。
1 2 3 4 |
@echo off rem 「copy」コマンドの実行 copy file.txt copy_file.txt |
以下、実行結果です。
「@echo off」を指定しても、この「1 個のファイルをコピーしました。」というメッセージは消えません。メッセージを消す場合は、「> nul」を使います。これをコマンドの最後に付け加えます。以下のような感じです(「del_message.bat」)。
1 2 3 4 |
@echo off rem 「copy」コマンドの実行 copy file.txt copy_file.txt > nul |
これで、メッセージは「nul」という空の空間へ出力されることになり、コマンドプロンプト画面への出力はありません。「nul」については、「コマンドのメッセージを消す -やりたいことから検索-」や「ファイルへ出力する -やりたいことから検索-」が詳しいですので、そちらを参照してください。
以下、バッチファイル「del_message.bat」を実行した結果です。
このように全くメッセージが表示されなくなりました。
コメント