{{category Command Prompt,nolink}} バッチでメッセージ表示 !!! echo コマンド echo コマンドは、メッセージを表示するか、コマンドエコー機能をオンまたはオフにします。 パラメータなしで使用すると、 echo は現在の echo 設定を表示します。 echo [] echo [on | off] echo /? ::on | off :::コマンド エコー機能をオンまたはオフにします。 :::コマンド エコーは既定でオンになっています。 :: :::画面に表示するテキストを指定します。 ::/? :::コマンド プロンプトにヘルプを表示します。 * echo | Microsoft Learn ** https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/echo !!! ECHO 出力 !! 改行のみの出力 ECHOコマンドだけだと「ECHO は です。」と出力される。 以下のようにしてECHOコマンドを実行します。ECHOの後に空白を入れないことが重要です。 ECHO. ECHO: ECHO\ ECHO/ また、未定義の環境変数を ECHO で表示する場合、表示テキストを指定されていない場合と同じとなり「ECHO は です。」と表示される。 これを回避するには、下記の様に「.」などを使用する 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=^^^ ECHO.%VAL% REM 変数 VAL に "^" がセットされ REM "^" がECHOで「」と表示される 遅延環境変数の展開が有効(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 / ^[\)」で送信される文字列ターミネータ(として表さる)で終了する。"BEL"(0x7)もターミネータの変わりとして使用できる。 * コンソール仮想ターミナル シーケンス - Windows Console | Microsoft Learn ** https://learn.microsoft.com/ja-jp/windows/console/console-virtual-terminal-sequences ** https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences !! 文字の色付け // バッチファイルのECHOの文字に色付け – nishy software (ja) // https://nishy-software.com/ja/dev-sw/console-colored-text/ !! 画面制御 !! ウィンドウ のタイトル 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 ヘルプ|https://teratermproject.github.io/manual/5/ja/] - [対応制御シーケンス|https://teratermproject.github.io/manual/5/ja/about/ctrlseq.html] - [OSCシーケンス|https://teratermproject.github.io/manual/5/ja/about/ctrlseq.html#OSC] !! 進行状況バー Windows ターミナル では、ConEmu "進行状況バー" シーケンス ("OSC 9;4") がサポートされている。 このシーケンスを利用すると、コマンドライン アプリケーション から ターミナル ウィンドウ に 進行状況バー を表示できる。 Windows ターミナル で 進行状況バー は、「タブ ヘッダーに、進行状況リングとして」「Windows タスク バーに、進行状況バーとして」の2つが表示される。 ESC ] 9 ; 4 ; ; ST ESC ] 9 ; 4 ; ; BEL * は 0、1、2、3、4 のいずれか。 ** 0: は既定の状態で、進行状況バーを非表示にする。コマンドが完了したらこの状態にし進行状況の状態をクリアする。 ** 1: 進行状況の値を に、"既定" 状態で設定する。 ** 2: 進行状況の値を に、"エラー" 状態で設定する。 ** 3: "不確定" 状態に設定する( 値は無視される)。 これは、進行状況の値を持たないが、まだ実行中のコマンドに役立つ。 ** 4: 進行状況の値を に、"警告" 状態で設定する。 * は 0 から 100 の間 (両端を含む) の数字です。 echo ^[]9;4;1;50^[\ * Windows ターミナルで進行状況バーを設定する | Microsoft Learn ** https://learn.microsoft.com/ja-jp/windows/terminal/tutorials/progress-bar-sequences