Programming Field

Cmd - DOS コマンド一覧

スポンサーリンク

Windows NT 系でのコマンド インタープリター(「コマンド プロンプト」)です。

構文

cmd[.exe] [/A | /U] [/Q] [/D]
  [/E:ON | /E:OFF | /X | /Y] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
  [[/S] /C <command> | /K <command>]
/A | /U
出力をANSIで出力するかUnicode(UTF-16)で出力するかを指定します。
/Q
エコーがOFFの状態でプロンプトを起動します(「echo off」があらかじめ実行された状態)。
/D
レジストリのAutoRunの設定を無効にし、これらで指定されているコマンドが実行されないようにします。
/E:ON | /E:OFF | /X | /Y
プロンプト起動時のコマンド拡張機能を有効にするかどうかを設定します。「/E:ON」を設定すると有効に、「/E:OFF」を設定すると無効になります。指定しない場合はレジストリのEnableExtensionsの設定が使用され、これらも存在しない場合は有効になります(未確認)。
コマンド拡張機能はバッチファイル内のSetlocalコマンドで動的に変更することもでき、このコマンドによる設定が優先されます(ただしプロンプト上ではSetlocalで変更しても効果がありません)。
「/X」は「/E:ON」と、「/Y」は「/E:OFF」とそれぞれ同じ意味を持ちます。
/F:ON | /F:OFF
ファイルやディレクトリの名前補完機能を使えるようにするかどうかを設定します。「/F:ON」で有効にしてプロンプトを起動した場合、「Ctrl+F」(文字コード0x06の文字を入力)でファイル名を、「Ctrl+D」(文字コード0x04の文字を入力)でディレクトリ名を補完できるようになります。この場合はレジストリでの設定を無視します。
このオプションを指定しなかった場合、レジストリのCompletionChar/PathCompletionCharの設定が使用されます。
/V:ON | /V:OFF
プロンプト起動時の遅延環境変数の展開機能を有効にするかどうかを設定します。指定しない場合はレジストリのDelayedExpansionの設定が使用され、これらも存在しない場合は無効になります(未確認)。
この機能を有効にすると、「!」文字が使用できるようになります。
遅延環境変数の展開機能はバッチファイル内のSetlocalコマンドで動的に変更することもでき、このコマンドによる設定が優先されます(ただしプロンプト上ではSetlocalで変更しても効果がありません)。
/S
<command> におけるダブルクオーテーションマーク「" "」の扱いを変更します。詳しくは「解説」をご覧ください。
/C <command>
<command> で指定した内容を実行します。実行をした後、「このコマンドを実行したcmd.exe」は終了します。/K スイッチと比較してください。
/C (または /K) の後に続く文字列はスペースも含めてすべてコマンドラインと見なされるため、cmd.exe に他のオプションを指定する場合は /C (または /K)を必ず最後に指定します。
なお、「/R」は「/C」と同じ意味を持ちます。
/K <command>
<command> で指定した内容を実行します。実行をした後、「このコマンドを実行したcmd.exe」は終了せず、引き続きプロンプトを表示します。Windows上でバッチ ファイルのショートカットを作成する際、cmd.exe /K を使用すると「バッチ ファイルの実行」→「コマンド プロンプト」を連続で行えます。これは、特定の環境(常駐プログラムや環境変数など)でコマンド プロンプトを表示させたい時に便利です。

解説

Windows NT系におけるプロンプトを制御するプログラムであり、Windows NT系においてバッチファイルを実行すると、明示的に指定した場合を除いてCommand.comではなくCmd.exeがバッチファイルの解析を行います。

「Cmd」の明示的な利用

既にコマンドプロンプトを起動しておりそこからコマンドを実行したい場合や、バッチファイルを直接実行する場合は、「Cmd」を明示的に利用する必要はありません。ただし以下の場合、「Cmd」を明示的に利用する必要があります。

区切り文字とコマンドライン

/C や /K で指定するコマンドラインにリダイレクション「<」「>」「>>」やパイプ「|」、および2つのコマンドを区切る「&」「&&」「||」が含まれていた場合、コマンドプロンプトやバッチファイル上でそれらを用いた場合と同様に解釈されます。プロンプトやバッチファイル上からこれらの文字を含んだ「cmd.exe」実行を行おうとすると親プロンプト/バッチファイルによって解釈されてしまうため、その場合はコマンドライン(<command>)箇所を「" "」で括るか「^」文字を利用して回避します。なお、「" "」で括った場合は後述の内容にも注意する必要があります。

引用符と /S スイッチ

/C や /K で指定するコマンドラインにダブルクオーテーションマーク(引用符)「" "」がある場合、条件によって2通りの解釈を用います。

  1. 先頭にダブルクオーテーションマークがあれば取り除き、取り除いた場合最も後ろにあるダブルクオーテーションマークがあればそれも取り除く(残りはそのまま)
  2. ダブルクオーテーションマークをそのまま(取り除かずに)コマンドラインとして用いる

後者の解釈が採用されるのは以下の条件にすべて当てはまる場合になります。

※ ここでの「特殊文字」のうち「()@」の3文字はファイル名として使用できるため、それらがファイル名に含まれる場合はご注意ください。

どちらの解釈が採用されるかの具体例は以下の通りです。(簡単のため「/C」スイッチを用いています。)

cmd /c echo hello
解釈1 を利用
実際に実行されるコマンド: 「echo hello」
cmd /c "echo hello"
解釈1 を利用(「echo hello」というプログラムが存在しない場合)
実際に実行されるコマンド: 「echo hello」(「" "」が取り除かれる)
cmd /c echo "hello"
解釈1 または 解釈2 を利用(「"」が先頭ではないのでどちらも変わりません)
実際に実行されるコマンド: 「echo "hello"」(「"」は先頭ではないので取り除かれない)
cmd /c "app.exe" some parameter
解釈1を利用(「" "」の中にスペースが無いため)
実際に実行されるコマンド: 「app.exe some parameter」(「" "」が取り除かれる)
cmd /c ""app.exe" some parameter"
解釈1を利用(「"」文字が2つではないため)
実際に実行されるコマンド: 「"app.exe" some parameter」(先頭と最後(末尾)の「"」が取り除かれる)
cmd /c "C:\Program Files\Windows NT\accessories\wordpad.exe" hello.txt
解釈2 を利用(「C:\Program Files\Windows NT\accessories\wordpad.exe」が存在する場合)
実際に実行されるコマンド: 「"C:\Program Files\Windows NT\accessories\wordpad.exe" hello.txt」
cmd /s /c "C:\Program Files\Windows NT\accessories\wordpad.exe" hello.txt
解釈1 を利用(/S があるため)
実際に実行されるコマンド: 「C:\Program Files\Windows NT\accessories\wordpad.exe hello.txt」(先頭と最後(末尾ではない)の「"」が取り除かれ、結果「C:\Program」というプログラムを実行しようとする)
cmd /c "C:\Program Files\Windows NT\accessories\wordpad.exe" "hello world.txt"
解釈1 を利用(「"」の文字数が2つではないため)
実際に実行されるコマンド: 「C:\Program Files\Windows NT\accessories\wordpad.exe" "hello world.txt」(先頭と最後の「"」が取り除かれる)
cmd /c "D:\Our Programs\SomeApp@v1.exe" data.xml
解釈1 を利用(「@」文字があるため)
実際に実行されるコマンド: 「D:\Our Programs\SomeApp@v1.exe data.xml」(先頭と最後(途中)の「"」が取り除かれるため、結果「D:\Our」というプログラムを実行しようとする)
cmd /c ""D:\Our Programs\SomeApp@v1.exe" data.xml"
解釈1 を利用
実際に実行されるコマンド: 「"D:\Our Programs\SomeApp@v1.exe" data.xml」(先頭と最後の「"」が取り除かれるが、結果「D:\Our Programs\SomeApp@v1.exe」というプログラムを実行しようとする)
cmd /c ""D:\Our Programs\SomeApp@v1.exe" data.xml
解釈1 を利用
実際に実行されるコマンド: 「"D:\Our Programs\SomeApp@v1.exe data.xml」(先頭と最後(途中)の「"」が取り除かれるため、結果「D:\Our Programs\SomeApp@v1.exe data.xml」というプログラムを実行しようとする)

常に意図した解釈でコマンドラインが実行されるようにしたい場合は、常に「/S」スイッチを用いつつ、コマンドライン(<command>)の最初と最後に(場合によっては余分に)「" "」を付加して括るのが良いと考えられます。