Windows 98 マシンにデュアルブートで Windows 2000 をインストールしました。 特に問題なく動作しているのですが、コマンドプロンプトを起動すると、なぜか表示が図1のように化けてしまいます。 何が原因でこうなってしまうのでしょうか?
Microsoft Windows 2000 [Version 5.00.2195] (C) Copyright 1985-1999 Microsoft Corp. ^[[;37;0;40mC:\>
図1: 文字化けしたコマンドプロンプト
この問題は「PROMPT」環境変数に関連する幾つかの要因が絡み合って発生する現象です。以下順を追って説明します。
「PROMPT」環境変数は、Windows 9x や Windows NT のコマンドプロンプト起動時のプロンプトを設定するのに利用されています。 デフォルトは「C:\AUTOEXEC.BAT」ファイル中で「$P$G」に設定されており、これにより「C:\>」のようなプロンプトが表示されています。 設定可能な値については、
C:\>PROMPT /?
と入力して確認してください。 値の多くは Windows 9x と Windows NT とで共通です。 例えば、「$M$P$G」のように設定してリモートマシンの共有に接続すると、プロンプト表示が
\\server\share N:\>
のように接続先のUNCを含むものになります。
この問題の直接の原因は、 Windows 9x (Windows 95/98/Meを含みます) のマシンが起動時に利用する C:\AUTOEXEC.BAT 中の「PROMPT」環境変数の設定が、 Windows NT(Windows NT/2000/XPを含みます) のコマンドプロンプト(cmd.exe)起動時の環境に反映されてしまうことにあります。 Windows NT 系 OS の cmd.exe では、文字に色をつけるなどの処理を行なうエスケープシーケンスの機能が動作しません。 そのため、Windows 9x 系 OS で C:\AUTOEXEC.BAT の「PROMPT」環境変数にエスケープシーケンスを利用すると、Windows NT 系 OS 側では図1のように文字化けが発生してしまうのです。
この問題の対処法は幾つかあります。 cmd.exe に C:\AUTOEXEC.BAT 中の環境変数の設定を反映させる必要がないという場合は、「Q124551: INFO: Configuring Parsing of the AUTOEXEC.BAT File」に記載されているように、 ParseAutoexec レジストリの値を 0 にして、 C:\AUTOEXEC.BAT の解析を抑止してしまうのがよいでしょう。
それができない場合は、図2のように、 Windows NT 側のシステム環境変数に Windows NT 上で利用する「PROMPT」環境変数を登録してしまうのがよいでしょう。
図2: システム環境変数への登録
もちろん C:\AUTOEXEC.BAT ファイル中の「PROMPT」環境変数の設定自体を修正してしまっても構いません。
なお、Windows NT から command.com を起動して生成した仮想MS-DOS環境については、CONFIG.NTファイルに
Device=%Systemroot\System32\ANSI.SYS
という行を追加して ANSI.SYS を組み込むことにより、エスケープシーケンスを機能させることも可能です。 ただし Windows 9x と完全互換の動作ではないので、利用には注意が必要です。
ところで「PROMPT」環境変数は、
C:\> PROMPT $P$G
のように、PROMPTコマンドを用いて設定することも可能です。 面白いことに、この方式を使って設定した場合、デフォルトでは「PROMPT」環境変数に設定された値が cmd.exe 起動時に反映されません。 しかし、何らかの原因により突如 PROMPTコマンド による設定が「PROMPT」環境変数に反映されるようになるという現象を何回か見かけたことがあります。 Windows 9x のデフォルトでは、PROMPTコマンドを利用して「PROMPT」環境変数の設定が行なわれているため、急にプロンプトの表示が Windows 9x と同じになったという場合は、この現象が発生していると考えられます。
残念ながら、この現象の根本的な原因はわかっていません。 暫定対処としては前述したように ParseAutoexec レジストリの変更や、システム環境変数への登録を行なって下さい。