コマンド シェルは、ユーザーがオペレーティング システムと直接やり取りをするための、独立したソフトウェア プログラムです。グラフィカル ユーザー インターフェイスを持たないコマンド シェルには、文字ベースのアプリケーションとユーティリティを実行する環境が用意されています。プログラムはコマンド シェルによって実行され、その結果は MS-DOS のコマンド インタープリタである Command.com の場合と同様に、文字として画面に表示されます。Windows サーバー オペレーティング システムのコマンド シェルは、アプリケーションの読み込みとアプリケーション間の情報の流れの指示を行う Cmd.exe コマンド インタープリタを使用して、ユーザーが入力した内容をオペレーティング システムが処理できる形に変換します。
コマンド シェルを使用すると、バッチ ファイル (スクリプト) を作成および編集して、日常的な作業を自動化することができます。たとえば、ユーザー アカウントの管理や夜間に行うバックアップなどの処理をスクリプトを使って自動化できます。Windows スクリプト ホストのコマンド ライン版である CScript を使用して、複雑なスクリプトをコマンド シェルで実行することもできます。詳細については、「Windows スクリプト ホストを実行する」を参照してください。バッチ ファイルを使用すると、ユーザー インターフェイスを使用する場合に比べて、同じ操作をより効率的に実行できます。バッチ ファイルでは、コマンド ラインで使用可能なコマンドはすべて利用できます。バッチ ファイルとスクリプトの詳細については、「バッチ ファイルを使用する」を参照してください。
コマンド プロンプト ウィンドウをカスタマイズして、表示を見やすくしたり、プログラムの実行方法を細かく制御することができます。コマンド プロンプト ウィンドウをカスタマイズする方法の詳細については、「コマンド プロンプトを構成する」を参照してください。
コマンド構文を使用する
構文には、コマンドおよびそれに続いて記述するパラメータが入力すべき順番で示されています。次の xcopy コマンドの例で示すように、構文にはさまざまな書式があります。
xcopySource [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:MM-DD-YYYY]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a | /m}] [/n] [/o] [/x] [/exclude:File1[+[File2]][+[File3]] [{/y | /-y}] [/z]
次の表は、各書式の解釈方法に関する説明です。
表記規則
| 表記 | 説明 |
|---|
斜体 | ユーザーが指定する必要のある情報 |
太字 | 表記されているとおりに入力する必要がある要素 |
省略記号 (...) | コマンド ラインで繰り返すことができるパラメータ |
角かっこ ([ ]) | オプション項目 |
中かっこ ({ }) で囲まれ、パイプ (|) で区切られた選択肢。例 : {even|odd} | ユーザーが 1 つだけ選択しなければならない選択肢 |
等幅フォント | コードまたはプログラムの出力 |
複数のコマンドおよび条件付き処理記号を使用する
条件付き処理記号を使用すると、単一のコマンド ラインまたはスクリプトから複数のコマンドを実行できます。条件付き処理記号を使って複数のコマンドを実行する場合、条件付き処理記号の右側に記述されたコマンドは、左側に記述されたコマンドの実行結果に基づいて動作します。たとえば、先に実行するコマンドが失敗した場合にのみ、次のコマンドを実行するように設定できます。反対に、先に実行するコマンドが正常に終了した場合にのみ、次のコマンドを実行することもできます。
次の表にある特殊文字を使用して、複数のコマンドを実行することができます。
| 文字 | 構文 | 定義 |
|---|
& [...] | Command1 &Command2 | 単一のコマンド ライン上の複数のコマンドを区切るために使います。1 つ目のコマンドが実行された後に、2 つ目のコマンドが実行されます。 |
&& [...] | Command1 &&Command2 | && 記号の前にあるコマンドが正常に終了した場合にのみ、後ろにあるコマンドを実行するために使います。1 つ目のコマンドが実行され、そのコマンドが正常に終了した場合にのみ、2 つ目のコマンドが実行されます。 |
|| [...] | Command1 || Command2 | || 記号の前にあるコマンドが失敗した場合にのみ、後ろにあるコマンドを実行するために使います。1 つ目のコマンドが実行され、そのコマンドが失敗した場合 (コマンドから返されるエラー コードが 0 よりも大きい場合) にのみ、2 つ目のコマンドが実行されます。 |
( ) [...] | (Command1 & Command2) | 複数のコマンドをまとめたり、ネストするときに使います。 |
; または , | Command1 Parameter1;Parameter2 | コマンドのパラメータを区切るときに使います。 |
注
-
アンパサンド (&)、パイプ (|)、およびかっこ ( ) は特殊文字で、これらの文字を引数として渡す場合は、文字の前にエスケープ文字 (^) または二重引用符を記述する必要があります。
-
コマンドが正常に終了すると、終了コードとしてゼロ (0) を返します。終了コード自体を返さない場合もあります。終了コードの詳細については、「Windows 導入ガイドとリソース キットを使用する」を参照してください。
コマンド シェルをネストする
コマンド プロンプトで Cmd.exe の新しいインスタンスを開くと、Cmd.exe 内でコマンド シェルをネストすることができます。既定では、Cmd.exe の各インスタンスは、親アプリケーションの Cmd.exe の環境を継承します。Cmd.exe のインスタンスをネストすることによって、親アプリケーションの Cmd.exe に影響を与えずに、ローカル環境を変更することができます。このように元の Cmd.exe の環境を保持できるため、ネストしたコマンド シェルを終了した後で元の環境に戻ることができます。ネストしたコマンド シェルで変更した内容は保存されません。
コマンド シェルをネストするには、コマンド プロンプトで次のように入力します。
cmd
次のようなメッセージが表示されます。
Microsoft (R) Windows Server 2003, Standard Edition (TM)(C) Copyright 1985-2002 Microsoft Corp.
ネストしたコマンド シェルを閉じるには、「exit」と入力します。
setlocal コマンドと endlocal コマンドを使用すると、Cmd.exe のインスタンス内 (またはスクリプト内) で行う変更をさらに細かい範囲に限定できます。Setlocal によってローカル スコープが開始し、endlocal によって終了します。setlocal と endlocal で囲まれたスコープ内で変更した内容はすべて破棄されるため、元の環境は変更されません。この 2 つのコマンドは、最大 32 レベルまでネストすることができます。setlocal コマンドと endlocal コマンドの詳細については、「Setlocal」と「Endlocal」を参照してください。
Cmd.exe で環境変数を使用する
Cmd.exe コマンド シェルの環境は、コマンド シェルとオペレーティング システムの動作を決定する変数によって定義されます。コマンド シェルの環境またはオペレーティング システム全体の環境の動作は、2 種類の環境変数 (システム環境変数とローカル環境変数) を使って定義できます。オペレーティング システム環境全体の動作は、システム環境変数で定義します。Cmd.exe の現在のインスタンスの環境の動作は、ローカル環境変数で定義します。
システム環境変数は、あらかじめオペレーティング システムに設定されており、Windows サーバー オペレーティング システムのすべてのプロセスで利用できます。システム環境変数を変更できるのは、管理者資格情報を持つユーザーに限られます。この変数は、ログオン スクリプト内で頻繁に使われています。
ローカル環境変数を使用できるのは、その変数を作成したユーザーがコンピュータにログオンしている場合に限られます。HKEY_CURRENT_USER ハイブに設定されたローカル変数は、現在のユーザーに対してのみ有効ですが、この変数によってオペレーティング システム環境全体の動作が定義されます。
次に、各種の変数の優先順位を示します。
-
組み込みシステム変数
- HKEY_LOCAL_MACHINE ハイブ内のシステム変数
- HKEY_CURRENT_USER ハイブ内のローカル変数
-
Autoexec.bat ファイル内に設定されたすべての環境変数とパス
-
ログオン スクリプト内に設定されたすべての環境変数とパス (ログオン スクリプトがある場合)
-
スクリプトまたはバッチ ファイル内で対話的に使用される変数
コマンド シェルでは、Cmd.exe の各インスタンスは、それぞれの親アプリケーションの環境を継承します。したがって、親アプリケーションの環境に影響を与えずに、新しい Cmd.exe の環境で変数を変更できます。
次の表は、Windows サーバー オペレーティング システムのシステム環境変数とローカル環境変数を示しています。
|
変数
|
種類
|
説明
|
|---|
%ALLUSERSPROFILE% | ローカル | All Users のプロファイルの場所を返します。 |
%APPDATA% | ローカル | アプリケーションがデータを格納する既定の場所を返します。 |
%CD% | ローカル | 現在のディレクトリ文字列を返します。 |
%CMDCMDLINE% | ローカル | 現在の Cmd.exe を起動するために使用した、正確なコマンド ラインを返します。 |
%CMDEXTVERSION% | システム | 現在のコマンド プロセッサ拡張機能のバージョン番号を返します。 |
%COMPUTERNAME% | システム | コンピュータの名前を返します。 |
%COMSPEC% | システム | 実行可能なコマンド シェルの正確なパス名を返します。 |
%DATE% | システム | 現在の日付を返します。date /t コマンドと同じ書式が使用されます。Cmd.exe によって生成されます。date コマンドの詳細については、「Date」を参照してください。 |
%ERRORLEVEL% | システム | 直前に使用したコマンドのエラー コードを返します。通常、ゼロ以外の値はエラーを示します。 |
%HOMEDRIVE% | システム | ユーザーのホーム ディレクトリへの接続に割り当てられているローカル ワークステーションのドライブ文字を返します。ホーム ディレクトリの値に基づいて設定されます。ユーザーのホーム ディレクトリは、[ローカル ユーザーとグループ] で指定されています。 |
%HOMEPATH% | システム | ユーザーのホーム ディレクトリの完全なパスを返します。ホーム ディレクトリの値に基づいて設定されます。ユーザーのホーム ディレクトリは、[ローカル ユーザーとグループ] で指定されています。 |
%HOMESHARE% | システム | ユーザーの共有ホーム ディレクトリへのネットワーク パスを返します。ホーム ディレクトリの値に基づいて設定されます。ユーザーのホーム ディレクトリは、[ローカル ユーザーとグループ] で指定されています。 |
%LOGONSERVER% | ローカル | 現在のログオン セッションを検証したドメイン コントローラの名前を返します。 |
%NUMBER_OF_PROCESSORS% | システム | コンピュータにインストールされているプロセッサの個数を指定します。 |
%OS% | システム | オペレーティング システムの名前を返します。Windows 2000 では、Windows NT と表示されます。 |
%PATH% | システム | 実行可能ファイルの検索パスを指定します。 |
%PATHEXT% | システム | オペレーティング システムによって実行可能ファイルと見なされるファイル拡張子の一覧を返します。 |
%PROCESSOR_ARCHITECTURE% | システム | プロセッサのチップ アーキテクチャを返します。値は、x86 または IA64 (Itanium ベースの場合) です。 |
%PROCESSOR_IDENTFIER% | システム | プロセッサの説明を返します。 |
%PROCESSOR_LEVEL% | システム | コンピュータにインストールされているプロセッサのモデル番号を返します。 |
%PROCESSOR_REVISION% | システム | プロセッサのリビジョン番号を返します。 |
%PROMPT% | ローカル | 現在のインタープリタのコマンド プロンプト設定を返します。Cmd.exe によって生成されます。 |
%RANDOM% | システム | 0 ~ 32767 の間のランダムな 10 進数を返します。Cmd.exe によって生成されます。 |
%SYSTEMDRIVE% | システム | Windows サーバー オペレーティング システムのルート ディレクトリ (システム ルート) があるドライブを返します。 |
%SYSTEMROOT% | システム | Windows サーバー オペレーティング システムのルート ディレクトリの場所を返します。 |
%TEMP% および %TMP% | システムおよびユーザー | 現在ログオンしているユーザーが利用できるアプリケーションで使用する、既定の一時ディレクトリを返します。アプリケーションによって、%TEMP% が必要な場合と %TMP% が必要な場合があります。 |
%TIME% | システム | 現在の時刻を返します。time /t コマンドと同じ書式が使用されます。Cmd.exe によって生成されます。time コマンドの詳細については、「Time」を参照してください。 |
%USERDOMAIN% | ローカル | ユーザーのアカウントを含むドメインの名前を返します。 |
%USERNAME% | ローカル | 現在ログオンしているユーザーの名前を返します。 |
%USERPROFILE% | ローカル | 現在のユーザーのプロファイルの場所を返します。 |
%WINDIR% | システム | オペレーティング システム ディレクトリの場所を返します。 |
環境変数を設定する
環境変数を作成、変更、削除、および表示するには、set コマンドを使用します。set コマンドで変更されるのは、現在のシェル環境の変数だけです。
変数を表示するには、コマンド プロンプトで次のように入力します。
setVariableName
変数を追加するには、コマンド プロンプトで次のように入力します。
setVariableName=Value
変数を削除するには、コマンド プロンプトで次のように入力します。
setVariableName=
変数の値には、空白文字を含むほとんどの文字が使用できます。特殊文字 (<、>、|、&、^) を使用する場合は、その文字の前にエスケープ文字 (^) または二重引用符を付ける必要があります。等号の右側に記述される文字はすべて値と見なされるため、二重引用符を使用した場合は、二重引用符自体も値の一部と見なされます。次に例を示します。
-
変数の値 new&name を作成するには、次のように入力します。
set varname=new^&name
-
変数の値 "new&name" を作成するには、次のように入力します。
set varname="new&name"
-
コマンド プロンプトで「set varname=new&name」と入力すると、次のようなエラー メッセージが表示されます。
"'name' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。"
変数名では、大文字と小文字は区別されません。ただし、set コマンドを実行すると、入力したとおりに変数が表示されます。変数名に大文字と小文字を組み合わせると、読みやすいコードを作成することができます (UserName など)。
注
-
環境変数のサイズの上限は、それぞれの変数につき 8,192 バイトです。
-
すべての環境変数のサイズを合計した値の上限は、変数名と等号も含めて 65,536 KB です。
環境変数の値を代入する
コマンド ラインやスクリプト内で変数に値を代入できるようにするには、%VariableName% のように変数名を % 記号で囲みます。% 記号で囲むことによって、その変数は文字列として比較されるのではなく、変数の値が参照されるようになります。変数値を変数名として定義してから、その変数名を % 記号で囲んで使用します。Cmd.exe によって変数名のすべてのインスタンスが検索され、定義されている変数値に置き換えられます。たとえば、作成するスクリプト内のユーザー名の値が異なり、ユーザーごとに異なる値を持つ USERNAME 環境変数を定義する場合、% 記号で囲んだ USERNAME 変数を使用するスクリプトを 1 つ作成するだけで済みます。このスクリプトを実行すると %USERNAME% が変数値に置き換えられるため、ユーザーごとに手動でタスクを実行する必要がなくなります。変数の代入は、再帰的には行われません。変数の確認は、1 度だけ行われます。変数の代入の詳細については、「For」および「Call」を参照してください。