Programming Field

Prompt - DOS コマンド一覧

スポンサーリンク

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

構文

prompt [<string>]
set prompt[=<string>]
<string>
文字列を指定します。以下の説明をご覧ください。

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

解説

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

prompt $p$g

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

通常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が組み込まれている場合はエスケープシーケンスを用いてプロンプトに色の設定などを行うことができます。
$f
[Windows XP 以降] 右かっこ「)」を表します。([MS-DOS, Windows 95/98/Me] では直接「)」を使用します。)
$g
不等号「大なり >」を表します。(この文字は直接指定することが出来ません。)
$h
バックスペースを表します。バックスペース文字が入ると直前の1文字が消去されます。
$l
不等号「小なり <」を表します。(この文字は直接指定することが出来ません。)
$n
現在のドライブ文字を表します。
$p
現在のドライブとパスを表します。
$q
等号「=」を表します。(この文字を直接指定しても認識されません。)
$s
[Windows XP 以降] 半角スペースを表します。(直接半角スペースを記述しても認識されます。)
$t
現在の時刻を表します。時刻は100分の1秒まで表示されます。
$v
Windowsのバージョンを表します。
$_
改行文字(CR+LF)を表します。
$$
ドル記号「$」を表します。

スポンサーリンク

以下はすべて現在のディレクトリが「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] この設定をすると以下のような「bash」に似たスタイルに変更されます。

[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で設定した文字列のみが出力されます。それを抑えたい場合は空白行を削るか「@」文字のみを記述しておきます。