ECHO の不思議

これも昔書いた「Unix ユーザのための DOS FAQ」

まず簡単なバッチファイルを作る。

ECHO foo
ECHO bar

それを実行すると、

DOS> foo.bat

DOS> ECHO foo
foo

DOS> ECHO bar
bar

DOS> _

いちいち実行するコマンドを表示してくれる。
プロンプトまで表示してくれる。

コマンドを非表示にするには @ を使う。

@ECHO foo
@ECHO bar

それを実行すると、

DOS> foo.bat
foo
bar

DOS> _

でも、全ての行に @ を付けるなんて、やってられない。

そういう時は ECHO OFF する。

@ECHO OFF
ECHO foo
ECHO bar

それを実行すると、

DOS> foo.bat
foo
bar

DOS> _

foo と bar の間に空行を入れてみる。

@ECHO OFF
ECHO foo
ECHO
ECHO bar

それを実行すると、

DOS> foo.bat
foo
ECHO は  です。
bar

DOS> _

ECHO に文字列を渡さないと、現在の状態 (ON または OFF) を教えてくれる。

空行を表示するには ECHO. を使う。

@ECHO OFF
ECHO foo
ECHO.
ECHO bar

それを実行すると、

DOS> foo.bat
foo

bar

DOS> _

ON または OFF という文字列を表示したいときも ECHO. を使う。

@ECHO OFF
ECHO.ON
ECHO.OFF

それを実行すると、

DOS> foo.bat
ON
OFF

DOS> _

なんでこんな仕様になっているのか?
不思議だ。