Programming Field

Prompt - DOS/コマンドプロンプト コマンド一覧

プロンプトウィンドウにおける「プロンプト」(「C:\>」などの表示)を変更します。

構文

prompt [<string>]
set prompt[=<string>]

オプション一覧

<string> 文字列を指定します。以下の解説およびをご覧ください。省略した場合はシステム既定の設定が使用されます。

[Windows NT] 現在の設定を見る場合は、2番目の構文(Set文)を用い、「=」とそれ以降を省略します。

[MS-DOS, Windows 95/98/Me] 現在の設定を見る場合は「echo %PROMPT%」と実行します。

解説

Promptについて

Prompt使用例

MS-DOSプロンプト/コマンドプロンプトにおいて、入力を促すメッセージである「プロンプト」の表示方法を変更します。多くの場合この設定は「C:\path>」などのように「ドライブと現在のパス」+「不等号 大なり(>)」となっていますが、これは

prompt $p$g

という設定に基づいています。「$p」が「ドライブと現在のパス」、「$g」が「不等号 大なり(>)」を意味します。

通常Promptで指定できる文字列は、コマンドライン上で利用できる文字全てですが、コマンドライン上で利用できない文字、および現在のパス情報などの追加情報を表示するため、「$」から始まる特殊文字を組み合わせて使用することができます(Promptで利用できる特殊文字をご覧ください)。

バッチファイルでは、多くの場合先頭に「echo off」を記述してコマンドの出力を抑制しますが、逆に「echo on」することでバッチファイルが今何のコマンドを実行しているかを画面に出力することができます(デバッグ・動作確認するときに有用です)。この際、既定のPrompt設定ではパスが長い場合などに表示が煩わしくなることが考えられるため、Promptコマンドを利用して一時的にPrompt設定を変更し、実行されるコマンドラインの出力形式を調整することができます。

なお、Promptは環境変数として存在するため、Setコマンドによる設定も可能です。その一方、環境変数として存在することからバッチファイル内で変更するとそれがそのまま現在の環境(プロンプト)の設定として残り続けます。

[MS-DOS, Windows 95/98/Me] すべてのMS-DOSプロンプトで共通のPrompt設定を使いたい場合は、Autoexec.batにてPromptコマンドを追加してください。Windows Meの場合はSetコマンドを用いた構文を利用してください。(Setを用いない場合の挙動は未確認。)

[Windows NT] すべてのコマンドプロンプトで共通のPrompt設定を使いたい場合は、コントロールパネルの「システム」にて、環境変数の項目(「詳細設定」タブなどに存在)で「PROMPT」の設定を追加してください。

[Windows NT] Promptの設定はSetlocalEndlocalによる「ローカル化」の影響を受けます。Setlocalを行ってからPrompt設定を変更し、Endlocalを実行したりバッチファイル処理を抜けたりすると、Prompt設定はSetlocal前の状態に戻ります。

文字列を指定しなかった場合はシステムの既定の設定が使用されます。

[MS-DOS, Windows 95/98/Me] 文字列を指定しない時に使われる既定の設定は「$n$g」です。

[Windows NT?] 文字列を指定しない時に使われる既定の設定は「$p$g」です。

Promptで利用できる特殊文字

以下の文字はすべて大文字・小文字を問いません。

$a [Windows XP 以降] アンパサンド「&」を表します。([MS-DOS, Windows 95/98/Me] では直接「&」を使用します。)
$b パイプ記号「|」を表します。(この文字は「^」を使わない限り直接指定することが出来ません。)
$c [Windows XP 以降] 左かっこ「(」を表します。([MS-DOS, Windows 95/98/Me] では直接「(」を使用します。)
$d 現在の日付を表します。日付の表記はシステムロケールに依存します。
$e エスケープコード(ASCIIコードの27、\x1b)を表します。ANSI.SYSが組み込まれているMS-DOSプロンプト、またはコマンドプロンプトでは、エスケープシーケンスを用いてプロンプトに色の設定などを行うことができます。
$f [Windows XP 以降] 右かっこ「)」を表します。([MS-DOS, Windows 95/98/Me] では直接「)」を使用します。)
$g 不等号「大なり >」を表します。(この文字は「^」を使わない限り直接指定することが出来ません。)
$h バックスペースを表します。バックスペース文字が入ると直前の1文字が消去されます。
$l 不等号「小なり <」を表します。(この文字は「^」を使わない限り直接指定することが出来ません。)
$n 現在のドライブ文字を表します。
$p 現在のドライブとパスを表します。
$q 等号「=」を表します。(この文字は先頭に直接指定した場合認識されません(Setを使った場合を除く)。)
$s [Windows XP 以降] 半角スペースを表します。(直接半角スペースを記述しても認識されます。[MS-DOS, Windows 95/98/Me] では直接半角スペースを記述します。)
$t 現在の時刻を表します。時刻は100分の1秒まで表示されます。
$v MS-DOSまたはWindowsのバージョンを表します。
$_ 改行文字(CR+LF)を表します。
$$ ドル記号「$」を表します。
$+ [Windows NT系?/XP 以降] [拡張機能] Pushdの実行回数(スタック数)に応じた「+」記号に展開されます。例えばPushdが2回実行されている状態であれば、「$+」は「++」に置き換わります。
$m [Windows NT系?/XP 以降] [拡張機能] 現在のドライブがネットワークドライブである場合、そのドライブに関連付けられた共有名(ネットワークパス)に展開されます。ネットワークドライブではない場合は空の文字列に置き換わります。

以下はすべて現在のディレクトリが「C:\foo\bar」であることを仮定します。また、末尾の「_」はカーソルを表します。

サンプル 1

prompt [$d $t] $n$g

この設定をすると以下のような表記に変更されます。

[2010/01/01 01:23:45.67] C>_

100分の1秒まで表記させたくない場合は、以下のようにバックスペース($h)を3回用いることで削ることができます。

prompt [$d $t$h$h$h] $n$g

この設定をすると以下のような表記に変更されます。

[2010/01/01 01:23:45] C>_

サンプル 2

set prompt=現在のディレクトリは $p です。$_$g

この設定をすると以下のような表記に変更されます。

現在のディレクトリは C:\foo\bar です。
>_

「$_」は改行であるため、それ以降の文字が2行目に移ります。

サンプル 3

prompt [%USERNAME%@%COMPUTERNAME% $p]$$$s

[Windows NT] この設定をすると以下のようなスタイルに変更されます。

[user@computer C:\foo\bar]$ _

なお、末尾の「$s」は半角スペースを直接記述することが可能です。

サンプル 4 (バッチファイル)

※ 以下の記述例には4行目の「+」の直後に半角スペースを入れています。

@echo off
set OLD_PROMPT=%PROMPT%
if "%DEBUG_MODE%"=="" goto Main
prompt + 
echo on
:Main
MyCheck.exe /list %LIST_FILE%
if errorlevel 1 goto Finish
MyBackup.exe /list %LIST_FILE%
:Finish
@prompt %OLD_PROMPT%
@set OLD_PROMPT=

このバッチファイルでは「MyCheck.exe」と「MyBackup.exe」を実行していますが、環境変数「DEBUG_MODE」に何らかの値がセットされている場合、「echo on」によって実行しようとしているコマンドを出力するようにしています。その際、そのコマンドの前に付加される文字を「+ 」にするためにPromptコマンドを利用しています。

なお、変更したPromptはバッチファイルを抜けてもそのままであるため、従来の設定を一旦「OLD_PROMPT」にキープした上で最後に元に戻しています。(「PROMPT」が環境変数としても使用できるため、「set OLD_PROMPT=%PROMPT%」とすることができます。)

[Windows NT/2000/XP 以降] Setlocalを使用すれば「OLD_PROMPT」に一時的にキープする必要がなくなります。

※ 「echo on」時のコマンド出力は、必ず出力されるコマンドライン(およびPrompt設定に基づいた文字)の手前に改行が含まれます。Promptコマンドではこれを削ることはできません。
[MS-DOS, Windows 95/98/Me のみ] 「echo on」時、空白行もコマンドラインとして扱われるため、該当する行に到達した際はPromptで設定した文字列のみが出力されます。それを抑えたい場合は空白行を削るか「@」文字のみを記述しておきます。