トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

WinBat/Echo

INDEX

バッチでメッセージ表示

echo コマンド

echo コマンドは、メッセージを表示するか、コマンドエコー機能をオンまたはオフにします。パラメータなしで使用すると、 echo は現在の echo 設定を表示します。

echo [<message>]
echo [on | off]
echo /?
on | off
コマンド エコー機能をオンまたはオフにします。コマンド エコーは既定でオンになっています。
<message>
画面に表示するテキストを指定します。
/?
コマンド プロンプトにヘルプを表示します。

ECHO 出力

  改行のみの出力

ECHOコマンドだけだと「ECHO は <ON> です。」と出力される。

以下のようにしてECHOコマンドを実行します。ECHOの後に空白を入れないことが重要です。

ECHO.
ECHO:
ECHO\
ECHO/

また、未定義の環境変数を ECHO で表示する場合、表示テキストを指定されていない場合と同じとなり「ECHO は <OFF> です。」と表示される。これを回避するには、下記の様に「.」などを使用する

ECHO.%undef_val%

  改行しない出力

Linux の echo コマンドであれば、「-n」オプションを指定することで、改行せずにメッセージを表示できる。

$ echo -n "hello"; echo -n " world!"
hello world!

しかし、DOS/Windows の echo コマンドには、「-n」オプションがない。

下記のコマンドで「echo -n MESSAGE」相当の改行しないメッセージ表示ができる。

SET /P ="MESSAGE" < NUL

※「SET /P 変数=[プロンプト文字列]」で、プロンプト文字列を表示した後、ユーザに入力を求め、それを環境変数にセットするコマンド。だが、環境変数名は省略可能で、標準入力を NUL にすることで、ユーザ入力も省略される。

  パーセント記号の出力

バッチの中で %1 や %path% は引数や環境変数の内容に置き換えられてしまいます。パーセント記号そのものを表示したい場合は、記号を2つ重ねて記述する。

@ECHO OFF
ECHO %%1 の内容は %1 です。
ECHO ECHO %%PATH%% の実行結果は...
ECHO %PATH%

  特殊記号を表示する

リダイレクトやパイプである "<>|&^" これらの記号そのものを表示したい場合は、直前にキャレット"^"をつけて記述する。

@ECHO OFF
ECHO ^<
ECHO ^>
ECHO ^&
ECHO ^|
ECHO ^^

環境変数に特殊記号をセットする場合は、エスケープ文字を含めてセットしておく必要がある。

SET VAL=^^^<Hello^^^>
ECHO.%VAL%
REM 変数 VAL に "^<HOGE^>" がセットされ
REM "^<HOGE^>" がECHOで「<HOGE>」と表示される

遅延環境変数の展開が有効(SETLOCAL ENABLEDELAYEDEXPANSION)になっている場合、感嘆符 (!) もエスケープが必要となる。単語または語句を二重引用符で囲み、感嘆符の前にキャレットを付ける("Hello World^!")。もしくは、二重引用符を用いず、二重キャレットで記載する(Hello World^^!)。

制御文字

制御文字は表示するための文字ではなく、モニタやプリンタなどのディバイスを制御するために使われる。例えば、LF (0x0a、Line Feed )は改行を表し、プリンタなどで紙を1行送る。

  ベル音

echo コマンドで、ベル文字(0x07, ^G )を出力すると、「システムエラー」のサウンドが鳴る。

C:\> echo ^G ※「^G」は Ctrl + G キー

  エスケープシーケンス

ESC (エスケープ)を用いることで、文字の色付けや画面制御が可能になる。次章参照

エスケープシーケンス

エスケープシーケンスは、制御シーケンス 導入子 (CSI, Control Sequence Introducer) 型シーケンス「"ESC["(0x1B, 0x5B / ^[[)」で始まり、各操作を指定する可変パラメータを記述する。

一部は、“オペレーティング システム コマンド”シーケンス (OSC, "Operating system command" sequence) で、こちらは「"ESC]"(0x1B, 0x5D / ^[])」で始まり、最後に「"ESC\"(0x1B, 0x5C / ^[\)」で送信される文字列ターミネータ(<ST>として表さる)で終了する。"BEL"(0x7)もターミネータの変わりとして使用できる。

  文字の色付け

  画面制御

  ウィンドウ のタイトル

OSC シーケンスで、コンソール ウィンドウのタイトルを指定された文字列に設定する。

ESC ] <種類> ; <ウィンドウタイトル> ST
ESC ] <種類> ; <ウィンドウタイトル> BEL
  • <種類> は 0、1、2 のいずれか。
    • 0: アイコン名とウインドウタイトルをセット
    • 1: アイコン名をセット
    • 2: ウインドウタイトルをセット
  • <ウィンドウタイトル>

ただ、Windows ターミナル(コマンドプロンプト)では、一瞬変更されるが、元に戻される。効かないので、TITLE コマンドを使う。

Putty や Tera Term で、接続した Linux 側から echo コマンドを実行することで、ウィンドウ タイトル を設定できる。

echo -e '\e]0;window_title\e\\'

参考:Tera Term ヘルプ - 対応制御シーケンス - OSCシーケンス

  進行状況バー

Windows ターミナル では、ConEmu "進行状況バー" シーケンス ("OSC 9;4") がサポートされている。このシーケンスを利用すると、コマンドライン アプリケーション から ターミナル ウィンドウ に 進行状況バー を表示できる。

Windows ターミナル で 進行状況バー は、「タブ ヘッダーに、進行状況リングとして」「Windows タスク バーに、進行状況バーとして」の2つが表示される。

ESC ] 9 ; 4 ; <state> ; <progress> ST
ESC ] 9 ; 4 ; <state> ; <progress> BEL
  • <state> は 0、1、2、3、4 のいずれか。
    • 0: は既定の状態で、進行状況バーを非表示にする。コマンドが完了したらこの状態にし進行状況の状態をクリアする。
    • 1: 進行状況の値を <progress> に、"既定" 状態で設定する。
    • 2: 進行状況の値を <progress> に、"エラー" 状態で設定する。
    • 3: "不確定" 状態に設定する(<progress> 値は無視される)。 これは、進行状況の値を持たないが、まだ実行中のコマンドに役立つ。
    • 4: 進行状況の値を <progress> に、"警告" 状態で設定する。
  • <progress> は 0 から 100 の間 (両端を含む) の数字です。
echo ^[]9;4;1;50^[\

最終更新時間:2026年06月01日 21時23分43秒 指摘や意見などあればSandBoxのBBSへ。