Cmd.exe
cmd.exeはOS/2やNT系Windows、Windows CEに搭載されているコマンドラインインタプリタである。英語版のショートカットには「Command Prompt」、日本語版のショートカットには「コマンド プロンプト」という名称が付けられている[1]。MS-DOSからWindows 9xに渡って用いられたCOMMAND.COM(およびDOSプロンプト)と類似の機能を持つ。Win32コンソールAPIを利用して実装されている。 64ビット版Windowsでは、64ビットのcmd.exeと、WOW64で実行される32ビットのcmd.exeがインストールされている。Windows 9x系のDOSプロンプトがMS-DOS仮想マシン上で動く16bitプログラムなのに対して、cmd.exeは32bitもしくは64bitで動作するコンソールプログラムである。 cmd.exeはCOMMAND.COMと比べ、相当に機能向上が図られている。一旦はエスケープシーケンスの機能が削られたが、Windows 10 1607で復活[2]し、VT100互換のエスケープシーケンスが使用できるようになった。 新機能WindowsにおいてコマンドプロンプトはCOMMAND.COMとある程度の互換性を持つが、次の拡張が施されている。
また、内部コマンドが次のように改善されている。
後継および将来性cmd.exeの後継は.NET Framework/.NET Coreをベースにオブジェクト指向言語として再構築されたPowerShellであり、Windowsコマンドと比べて高い柔軟性と記述性を持つ。いくつかのWindowsコマンドに関して互換エイリアスが用意されているなど、ある程度の互換性も持っているが、完全な上位互換ではなく、コマンドプロンプトとは依然として共存関係にある。マイクロソフトはcmd.exe廃止の噂に関しては全面否定しており、例えばWindows自身をビルド&テストするために自動化されたシステムにおいてcmd.exeに依存した多数のスクリプトが利用されていることなどから、将来的にWindowsから取り除かれることはないとしている[3]。 Windowsエクスプローラーとの統合Windows 7のエクスプローラーでは、Shiftキーを押しながらコンテキストメニューを表示すると、「コマンド ウィンドウをここで開く」というメニューコマンドが出現する[4]。このコマンドを実行することで、指定フォルダーをカレントディレクトリに設定した状態でコマンドプロンプトを起動することができる。 Windows 8.1ではスタートボタンを右クリックする、またはWindowsキーを押しながらXキーを押すことでシステムコマンドメニューが表示され、コマンドプロンプトを通常権限または管理者権限で起動することができる。 Windows 10 Creators Update (バージョン1703) では、既定のコマンドシェルがPowerShellに置き換えられ、エクスプローラー上でShiftキーを押しながらコンテキストメニューを表示すると「PowerShell ウィンドウをここに開く」というメニューコマンドが出現するようになり、またシステムコマンドメニューにはコマンドプロンプトの代わりにPowerShellが表示されるようになった。ただし設定変更により従来通りコマンドプロンプトをシステムコマンドメニューに表示させることも可能である[5]。 文字コードコマンドプロンプトの文字コードコマンドプロンプト(cmd.exe)自体が使用している文字コードはUnicode (UTF-16) であり、(コマンドからの出力がUnicodeでありフォントがあれば)Unicode特有の文字を問題なく画面に表示することができる。ただしバッチファイルはCOMMAND.COMとの互換性維持の観点から、Windowsのシステムロケール設定(「Unicode対応ではないプログラムの言語」のこと、表示言語とは異なる)と同じ「ANSIコードページ」でエンコードされているという前提で解釈される。例えばシステムロケール設定が日本語の場合、既定でMicrosoftコードページ932 (CP932, Shift_JIS) が使われる。ただしバッチファイルからコマンドを実行して画面に出力する場合に文字コード変換が行われることはない。コマンドプロンプトで使用するANSIコードページはシステムロケール設定を変更する他、 内部コマンドの文字コードコマンドプロンプトに内蔵されている内部コマンド( 外部コマンドの文字コードWindowsではアプリケーションソフトウェアの一形態として、コマンドラインインターフェイス (CLI) を持つ「コンソールアプリケーション」があり、これは単独で動作させることができるだけでなくコマンドプロンプト上で動作させることもできる。これにより、ユーザーが外部コマンドとして独自のコマンドを開発し、リダイレクトやパイプを駆使してバッチ処理に応用することができる。 外部コマンドが出力する文字コードはその外部コマンドの実装によって異なり、一般にコマンド開発者はCLIコマンドの出力をUnicodeモードで行なうか、MBCSモードで行なうかを選ぶことができる。例えばC言語の場合は なお、 仮にコマンドプロンプト上でUnicode入出力を行なう独自コマンドを開発する場合は、入出力をUnicodeモードで行なうことで実現できる。またバッチファイルによる読み取りを考慮する場合は、コマンドの入出力をUTF-8とし、バッチファイルをUTF-8で記述し、コードページを 脚注
関連項目
外部リンク |