バッチファイルでのメッセージ出力
バッチファイルでのメッセージ出力についてのメモ書きです。*1
(参考:シェルスクリプトでのメッセージ出力)
コマンドエコーをOFFにする
- 「echo off」を実行すると、コマンドエコーがOFFになる。(「echo on」でONに戻る。)
- 一時的にコマンドエコーをOFFにする場合は、コマンドの前に「@」を付ける。
- バッチファイルの先頭では、「@echo off」とすることが多い。
@echo off ...
echoコマンド
- メッセージ出力には、通常はechoコマンドを使う。
- echoコマンドの出力先は、標準出力となる。
- echoコマンドでメッセージを出力すると、必ず改行される。
- 空行を出力する場合は、「echo.」とする。*2
- 「%」を出力する場合は、「%%」でエスケープする。
- その他の特殊文字(「>」や「^」など)を出力する場合は、その文字の前に「^」を付けてエスケープする。
@echo off rem 通常 echo メッセージ rem 空行 echo. rem %のエスケープ echo %%OS%%: %OS% rem 特殊文字のエスケープ (<と>) echo ^<a href="http://www.hatena.ne.jp/"^>はてな^</a^>
一時停止
- 一時停止には、pauseコマンドを使用する。
- pauseコマンドのメッセージを変える場合は、echoコマンドとNULへのリダイレクトを組み合わせる。
@echo off rem 通常 pause rem メッセージ変更 echo 何かキーを押すと終了します... pause > NUL
ユーザ入力
- 「set /p」を使うことにより、ユーザが入力した文字列を環境変数にセットできる。
- 「set /p」では、ユーザに表示するメッセージを指定できる。(メッセージなしも可能)
- 一般的には、入力文字列内の特殊文字をチェックする必要がある。
- 「set /p」とNULからのリダイレクトを組み合わせると、改行なしのメッセージ出力を実現できる。
@echo off rem ユーザ入力 set /p YN="Yes or No? (y/n): " rem 二重引用符を取り除く if defined YN ( set YN=%YN:"=% ) rem 改行なしのメッセージ出力 set /p DUMMY="答え: " < NUL rem 入力値の判定 if /i "%YN%" == "y" ( echo Yes ) else ( echo No )
標準エラー出力
@echo off rem 標準エラー出力 (echo) echo メッセージ1 1>&2 rem 標準エラー出力 (set /p) set /p DUMMY="メッセージ2" < NUL 1>&2 echo. 1>&2 rem 標準エラー出力 (複数行) ( echo メッセージ3 echo メッセージ4 echo メッセージ5 ) 1>&2