(2019/5/7追記)Windows TerminalというものがMSから発表されました!
この記事はWindows & Microsoft技術 基礎 Advent Calendar 2015の1日目の記事です。
PowerShellについてはこの記事では扱いません(PowerShell Advent Calendarをご覧になるとよいと思います)。
cmd.exeの使い方をもっと掘り下げたい方は、コマンドプロンプト(cmd.exe) Advent Calendarもご覧ください。
名前
cmd.exeを起動することで動作する対話型コマンドラインインターフェイスソフトウェア(コマンドシェル)の名前は「コマンドプロンプト」、cmd.exeでも使われる例の黒いウィンドウの名前は「コンソール」です。*nixではないので「ターミナル」とか「端末」とは呼びません(実際違います)。
パス
環境変数 %COMSPEC%
にcmd.exeのフルパスが入っています。標準的には C:\WINDOWS\system32\cmd.exe
です。環境変数 %SYSTEMROOT%
や %WINDIR%
を用いて %SYSTEMROOT%\system32\cmd.exe
と書いてもいいでしょう。
なお、64ビットWindowsで32ビット版cmd.exeを呼び出したいときは C:\Windows\SysWOW64\cmd.exe
を使います。
基本設定
起動しているcmd.exeウィンドウのタイトルバーを右クリックすると「プロパティ」というコンテキストメニューが表示されます。それを選択するとcmd.exeで使われるコンソールの全体的な設定ウィンドウが開きます。
なお、この設定は、cmd.exeへのショートカットごとに分けることができます。ショートカットを右クリックして「プロパティ」を選択したときはこんな風に表示されます。
Windows 10のコンソール
これまでのWindowsと比較するとちょっとだけ進化しています。「オプション」で「従来のコンソールを使う(再起動が必要)」のチェックを外しておくと、次回起動時から以下の設定が可能になります。
- Ctrl キー ショートカットを有効にする
- Ctrl+C, Ctrl+V, Ctrl+Aなどが使えるようになる(他にもいくつかのショートカットが有効になる)
- 貼り付け時にクリップボードの内容をフィルターする
- クリップボードの内容をcmd.exeに張り付けるときに、Tab文字を削除するなどのフィルター処理を行う
- 行の折り返し選択を有効にする
- 未チェックのときは矩形選択、チェックしたときは行選択がデフォルトになる
- Altキーを押しながら選択したときは、デフォルトと反対の挙動になる
- テキスト選択キーを拡張する
- Shift+矢印キー, Shift+Home, Shift+Endでテキスト選択範囲を変更できる
- サイズ変更時にテキスト出力を折り返す(レイアウト タブ)
- ウィンドウサイズを変更した時に、テキストが自動的に折り返し表示される
- 不透明度(画面の色 タブ)
- 100%以下にすることで、cmd.exeの背景が透過する
コードページ
Windowsは歴史的な理由で、テキストや文字列を扱うとき、ワイド文字列(Unicode、厳密にはUTF-16LE)かANSI文字列(非Unicode)かという区別をすることがあります。そして、ANSI文字列というのが実際にはどの文字エンコーディングなのかを表すのがコードページです。
デフォルトのコードページが何なのかは、システムロケールによって決まります。
「コントロールパネル」→「地域」→「管理」の「Unicode対応でないプログラムの現在の言語」として選択されているのがシステムロケールです。初期状態は、Windowsをインストールするときに選んだ言語が表示されています。
この画像ではシステムロケールに「日本語(日本)」が設定されています。この場合、デフォルトのコードページは932です。コードページ932では、ANSI文字列のエンコーディングはShift_JIS (厳密にはWindows-31J) と決められています。cmd.exeの文字エンコーディングがShift_JISなのはそういう理由なのです。
cmd.exeのコードページは、chcp
コマンドで実行中に変更することができます。UTF-8 (BOMなし) にしたい場合は、chcp 65001
を実行し、コードページを65001に切り替えます。
chcp
を毎回実行するのが面倒な場合は、cmd.exeのショートカットを作り、プロパティを表示して、リンク先のコマンドに引数として /K "chcp 65001"
などと追加することで、そのショートカット経由でcmd.exeを起動するたびにchcp
を実行させることができます。
(ショートカットを使わない方法として、レジストリにキー HKCU\Console\%SystemRoot%_system32_cmd.exe
を追加し、その中に CodePage
の設定を追加するという方法もあるようです。)
フォント
cmd.exeのデフォルトのフォントもコードページで決定されます。コードページ932の場合はMSゴシックが使われます。コードページ65001の場合はLucida Console(環境によってはConsolas)が使われるのでそのままだと日本語が表示できません。
コンソールの設定でフォントを選択するドロップダウンがあるのですが、通常は「ラスターフォント」か、現在のコードページに紐づいた既定のフォントからしか選択できないはずです。(追記:Windows 10 Anniversary Update (バージョン1607, RS1) でcmd.exeがさらに改善され、TrueTypeフォントの選択肢が広がりました。それでも望みのフォントが選べないときだけ、↓のレジストリ操作をするとよいでしょう。)
このドロップダウンに選択肢を追加するには、レジストリ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
以下を変更します。ただし、ここに設定してもcmd.exeに反映されないことがあったり、cmd.exeを起動しなおすとドロップダウンの選択肢がデフォルトに戻っていたりと、よくわからない挙動を示すことがあるので、私はこの設定は使いません。
環境変数
現在起動しているcmd.exeプロセスの環境変数を変更するには set
コマンドを使います。ただし、set
コマンドによる変更は、このプロセスおよび子孫プロセスにしか影響しません。
今後起動するすべてのプロセスの環境変数を変更するには、setx
コマンドを使うか、「コントロールパネル」→「システム」→「システムの詳細設定の表示」→「環境変数」で設定します。ただし、どちらを使った場合も、現在実行中のcmd.exeプロセスの環境変数は変更されません。
代替コンソール
注:ここでは、シェル(bash, zsh, nyaosなど)については書きません。
標準のコンソールはフォントの設定が面倒だし、いろいろつらいので、代替コンソールを使ったほうがいろいろ幸せになれると思います。
- ConEmu (https://conemu.github.io/)
- タブ化できるし、他にも便利な機能があるので、おすすめ
- いろいろ詰め合わせの cmder (http://cmder.net/) でもOK
- Mintty (https://mintty.github.io/)
- 単体でインストールしてもいいし、CygwinやMSYS2に同梱されているものでもOK
- 起動時に
mintty %COMSPEC%
と引数を渡せば、Minttyでcmd.exeを実行できる
- ConsoleZ (https://github.com/cbucher/console)
- Console2の後継
どれも2015年現在もアクティブに開発が続いているようです。
おまけ:bashっぽい補完
- Clink (https://mridgers.github.io/clink/)
- cmd.exeプロセスに介入して、Tabキーによる補完を強力にする