echoコマンドのいろんな使い方 [Win,コマンドプロンプト]
コマンドプロンプトで主にバッチファイルで使われる echo コマンドについてまとめてみる。
参考サイト→http://technet.microsoft.com/ja-jp/library/cc772462%28WS.10%29.aspx
MS公式サイトであるだけに説明がよくまとまっているのに、なぜか検索エンジンの上位に引っかかってこない不思議。
○基本1
echo [on | off]
エコーをオン(既定)、オフにする。
エコーがオンとはユーザーが自分でコマンドプロンプトを開いた時の状態。
つまり、カーソルが出てその左側に C:~> と表示される状態(プロンプトを表示するともいう。)
エコーがオンのままバッチファイルを実行すると、バッチファイル内の実行コマンドも表示される。
バッチファイルを実行する時はエコーをオフにしておくのが基本。
デバッグの際はエコーをオンにしておけば、もしエラーが起きて実行が中止されてもどのコマンドで止まったのかがわかる。
○基本例1
~ここにコマンドを書く~
echo on
デスクトップやエクスプローラからバッチファイルを実行した場合、最後の行のコマンドの実行が終わるとコマンドプロンプトは閉じるが、
あらかじめコマンドプロンプトを開いた状態でバッチファイルを実行した場合は、最後に「exit」を実行しないとバッチファイルの実行が終わっても待機状態で止まる。
なので終了させずにバッチファイルを終える場合は最後に「echo on」を入れておいた方がいいだろう。
先頭に「@」を付けるとその行だけを"echo off"する、つまりechoがonになっていてもその行だけ実行コマンドを表示しなくなる。
「@」はechoだけに限らず様々なコマンドに付けることができるので、これも可。
@>samp.txt dir
○基本2
echo [メッセージ]
メッセージ(文字列)を出力する(行末に改行を含む。)
○基本例2
echo.
echo.on
1行目は基本的な使い方。
2,3行目はちょっと変わった使い方で、2行目はただの改行を表し、3行目はonを表示する。
echoのすぐ次の文字に記号(.,;=+など)を付けるとその文字だけ無視される。
つまり、1行目を「echo=ABCDEFG HIJKLMN」としても同じ出力を得られる。
記号がスペース扱いのようになるのはechoコマンドの直後の文字だけなので、
「echo,+=ABCDEFG.HIJKLMN」は「+=ABCDEFG.HIJKLMN」と出力される。
「>、|、<」をリテラルとして出力するにはそれぞれ前に「^」を付ける必要がある。
また「^」自身を出力するには「^^」とする必要がある。
○応用例1
echo a|xcopy *.txt d:
xcopyコマンドでコピー先に同名のファイルがあった時に上書きをするかの質問に対して、a(上書きする、以降のファイルも同様)を自動で入力してくれる。
あまり一般的な使い方ではないし実用にも向いてないと思う。
○応用例2
echo 2行目てすと>>samp.txt
リダイレクトを使うことでメッセージ内容をファイルに書き出す裏技。
ただしこの形だと欠点があって、例えばバッチファイルでiniファイル(設定ファイル)を作ろうとして、
「echo example_key=8>samp.ini」などとすると、標準出力に「example_key=」と表示されてsamp.iniには何も書かれない。
これは "8>" の部分を入出力ストリームのリダイレクトとして判断されてしまうせいだと思われる。
ちなみに「echo example_key=274>samp.ini」は数字が3桁のためか274の部分は入出力ストリームのリダイレクトとは判断されず、よってこれはsamp.iniに正しく出力される。
これを解決するためには「>samp.ini echo example_key=8」とすればよい。
複数行にわたって書き出す時は>を>>にするだけ。こうしたほうが見易さもよくなるのでおすすめ。
最後にいろんなテクニックを組み合わせてみた。
@echo off
rem バージョンチェック(三項演算子らしき構文)
(ver|find "Windows 2000">NUL&&echo 注意:このバージョンのWindowsでは正しく動作しないことがあります。)||echo WindowsバージョンチェックOK
echo 処理中 ^& しばらくお待ちください...
>samp.ini echo 設定項目1=1
>>samp.ini echo 設定項目2=2
>>samp.ini echo 設定項目3=3
>>samp.ini echo.on
rem 1行で複数行出力
>>samp.ini echo 設定項目4=4&>>samp.ini echo.&>>samp.ini echo 設定項目5=5
rem 複数行で1行出力
>>samp.ini echo 設定パス6^
=%%PATH6%%
echo 設定ファイルを作成しました。
rem 制御コードを使ってBEEP!!
echo.
echo ^>^>^> Press Any Key ^<^<^<&pause >NUL
echo on