━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 第24号(2003.09.13) 内部コマンドと外部コマンド ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ はじめに ■ 内部コマンドと外部コマンド ● 内部コマンド一覧 ■ PATHコマンド ● 書式 ● コマンドの検索順序 ■ 内部コマンドの存在理由 ■ コメントをお待ちしています ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、こんにちは。速星です。 先週は立て続けに2通も発行してしまいました。多量の文章を読むのに四苦八苦 された方もあるかもしれませんが、ご容赦願います。 さて、今週は、DOSのコマンドのもつ2つの形態について説明します。 先週の「環境変数」と同様に少々堅い話になってしまいますが、これらは次々号 でWindowsXPの「回復コンソール」を説明する際に基礎知識として役に立つ事項 ですから、ざっと一通り読んでおいて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 内部コマンドと外部コマンド ------------------------------------------------------------------------ これまで区別せずに取り扱ってきましたが、DOSのコマンドには、下図のよう に、内部コマンドと外部コマンドの2種類があります。 (図中の太線で囲まれた部分がMS−DOSです) 【註】 図は、等幅フォントでご覧下さい。 ┏━━━━━━━━━━━━━━━┓────────┐ ┃┌──────┐│      ┃        │ ┃│内部コマンド││外部コマンド┃MS−DOS  │ ┃└──────┘│      ┃アプリケーション│ ┃ COMMAND.COM  │      ┃        │ ┃────────┴──────┗━━━━━┓  │ ┃         IO.SYS         ┃  │ ┗━━━━━━━━━━━━━━━━━━━━━┛──┤ │         ハードウェア         │ └────────────────────────┘ 内部コマンドとは、COMMAND.COM(Windowx2000,XPのコマンドプロンプトの場合、 CMD.EXE)に内蔵されているコマンドです。次節に一覧を掲げますが、DIRコマン ドやCDコマンドが内部コマンドの代表例です。 内部コマンドは、次のような手順で実行されます。 内部コマンド入力 → COMMAND.COMが解釈 → COMMAND.COMが単独で実行 一方、外部コマンドは、コマンド1つ1つが独立した実行ファイルとしてハード ディスクに保存されています。例えばWindows98の場合、「%WINDIR%\COMMAND」 というディレクトリに保存されています。拡張子は、「.COM」「.EXE」「.BAT」 のいずれかです。 外部コマンドは、通常のMS−DOSアプリケーションと同様の手順で実行され ます。 外部コマンド入力 → COMMAND.COMが解釈 → コマンドをIO.SYSに通知 → IO.SYSが当該コマンドを起動 → 外部コマンドが実行される ------------------------------------------------------------------------ ● 内部コマンド一覧 COMMAND.COMに内蔵されたコマンドは、以下の通りです。 ただし、DOSやWindowsのバージョンによって若干異なる場合があります。 (一覧はPC98用のMS−DOS6.2を元に作成しています) BREAK CALL CD CHDIR CLS COPY CTTY DATE DEL DIR ECHO ERASE EXIT FOR GOTO IF LH LOADHIGH MD MKDIR PATH PAUSE PROMPT RD REN RENAME RMDIR SET SHIFT TIME TYPE VER VERIFY VOL (アルファベット順、別名をもつコマンドは重複掲載) どのコマンドが内部コマンドか、いちいち覚えておく必要はありません。 内部コマンドと外部コマンドの違いを意識する必要は、ほとんど無いからです。 ここでは、内部コマンドの傾向だけ確認しておきましょう。 ファイル・ディレクトリ操作やバッチファイルの実行、環境設定に関連したコマ ンドの多くは、内部コマンドになっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ PATHコマンド ------------------------------------------------------------------------ DOSでは通常、単にファイル名を記述するだけでアクセスできるファイルは、 カレントディレクトリに置かれているものだけです。ファイルがカレントディレ クトリ以外の場所にある場合、次のいずれかの方法をとる必要があります。 ・カレントディレクトリをそのディレクトリに移動する ・ファイル名を、カレントディレクトリからの相対パスで指定する ・ファイル名を、ルートディレクトリからの絶対パスで指定する しかしよく考えて下さい。 先程、外部コマンドはその1つ1つが独立したプログラムだと説明しました。 例えば、XCOPYコマンドは「XCOPY.EXE」、FORMATコマンドは「FORMAT.COM」とい う実行ファイルがその実体です。 だとすれば、これらのコマンドを実行する際には実行ファイルが置かれているディ レクトリに移動するか、あるいはそのパスを記述する必要があるはずです。 けれども、第19号・第20号でそれぞれのコマンドを紹介したときに、そのよ うなことは全く気にしませんでした。 これはどういうことでしょうか。 実はDOSでは、よく使う実行ファイルのあるディレクトリ名を登録しておくこ とができます。外部コマンドが置かれたディレクトリは、通常、自動的に登録さ れています。このため、ディレクトリの位置を気にせずに外部コマンドが実行で きたのです。 この登録を行うのがPATHコマンドです。 ------------------------------------------------------------------------ ● 書式 ディレクトリ名は、環境変数PATHに列挙することで登録されています。 既に登録されているディレクトリ名は、「PATH」と入力することで確認できます。 ディレクトリ名が、セミコロン「;」で区切って列挙されるはずです。 > M:\DOS>PATH > PATH=C:\WINDOWS;C:\;C:\WINDOWS\COMMAND 新たに登録する場合は、次の書式になります。セミコロンの前後にスペースを入 れないように注意して下さい。 PATH %PATH%;ドライブ:パス[;...] また、PATHは環境変数の1つですから、 SET PATH=%PATH%;ドライブ:パス[;...] としても同様に設定することができます。 「%PATH%」は、前号で説明しましたように、実行時に環境変数PATHの内容に展開 されます。これを忘れると、それまでに設定されていたPATHの内容が上書きされ てしまうため、他のソフトの実行に悪影響が生じる場合があります。 以下に実行例を示します。PATHに「D:\」が付け加えられた様子が分かります。 > M:\DOS>PATH > PATH=C:\WINDOWS;C:\;C:\WINDOWS\COMMAND > > M:\DOS>PATH %PATH%;D:\ > > M:\DOS>PATH > PATH=C:\WINDOWS;C:\;C:\WINDOWS\COMMAND;D:\ このディレクトリ名の登録のことを、「パスを通す」と表現することがよくあり ます。 ------------------------------------------------------------------------ ● コマンドの検索順序 コマンドは次の順序で検索されます。入力したコマンド名に一致する、最初に見 つかったコマンドが実行されることになります。 内部コマンド → カレントディレクトリ → PATHに記述されたディレクトリ 環境変数PATHについては、先頭に記述されたものから順に検索が行われます。 PATHに記述されたディレクトリは、実行ファイルが検索されるディレクトリであ ることから「サーチパス」と呼ばれることもあります。 同じディレクトリの中に拡張子だけが異なる実行ファイルが複数ある場合は、 .COM → .EXE → .BAT の優先順位で、起動される実行ファイルが決まります。例えば、「EDIT.COM」と 「EDIT.EXE」が同一フォルダ内にある場合、拡張子を省略して「EDIT」とだけ入 力すると「EDIT.COM」が起動することになります。「EDIT.EXE」を起動したい場 合は、「EDIT.EXE」と、拡張子も含めて入力する必要があります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 内部コマンドの存在理由 ------------------------------------------------------------------------ 内部コマンドは、COMMAND.COMに内蔵されているコマンドです。このため、内部 コマンドの存在によって、COMMAND.COMのファイルサイズは増加していることに なります。 DOS単独で使用できるメモリ(コンベンショナルメモリ)はわずか640KBしか ありませんから、DOS本体の一部分ともいえるCOMMAND.COMのファイルサイズ の増加は重大な問題です。メモリを有効に活用するためには、全てのコマンドを 外部コマンドにする必要があるはずです。 それにも関わらず、内部コマンドというものが存在するのはなぜなのでしょうか。 ------------------------------------------------------------------------ では仮に、内部コマンドが一切ない状態を考えて下さい。 DOSで実行できるコマンドは、カレントディレクトリか、環境変数PATHに記述 されたディレクトリ(パスの通ったディレクトリ)か、どちらかに実行ファイル があるコマンドだけです。通常、DOSの実行ファイルとデータファイルは異な るディレクトリに置くことが多いですから、実質上、パスの通ったディレクトリ にあるコマンドしか実行できないことになります。 もし、ここで誤ってPATHの内容を消してしまったら、どうなりますか? PATHを設定し直せばいい、と思うかもしれませんが、この場合、PATHコマンドや SETコマンドも使えなくなっているはずです。実行ファイルが置かれたディレク トリに移動しようと思っても、CDコマンドもやはり使えないはずです。 もちろん、パスを正確に指定して実行ファイル名を記述すればコマンドは実行で きます。しかしそれではあまりに非効率です。 ------------------------------------------------------------------------ 以上のような不都合を防ぐために、COMMAND.COMには、DOSの操作に最低限必 要と思われるコマンドが内蔵されているわけです。 なお実際には、COMMAND.COMのうち内部コマンドが記述された部分は、外部コマ ンドや他のアプリケーションを実行するときには、必要に応じてメモリから追い 出される仕組みになっています。これはオーバレイと呼ばれる手法で、これによ り、コマンドを内蔵していてもメモリが有効に利用できるようになっています。 ------------------------------------------------------------------------ 今回はここまでです。 お疲れ様でした! 次号の予定は、「Cookie削除ツール」です。 バッチファイルの身近な活用例を、1つ紹介します。 なお、次号の配信時期は遅れる可能性があります。あらかじめご了承下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ コメントをお待ちしています ------------------------------------------------------------------------ 皆さんからの感想・質問・要望をお待ちしています。 「こんなテーマを扱ってほしい」 「こんなことはできるの?」 「このへんが分かりにくかった」 「1回の分量を増やしてほしい/減らしてほしい」 など、掲示板(下記URL)まで気軽にお願いします。 http://bbs9.otd.co.jp/dos/bbs_thread (スレッド表示) http://bbs9.otd.co.jp/dos/bbs_tree (ツリー表示) メールでもコメントを受け付けておりますので、そちらもご利用下さい。 tetrahedrane@yahoo.co.jp なお、いただいたコメントは、本マガジン上で引用する場合があります。 (メールアドレスやお名前は一切公開いたしません) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ● 感想・質問宛先 http://bbs9.otd.co.jp/dos/bbs_tree tetrahedrane@yahoo.co.jp ● 登録・解除・バックナンバー http://www.geocities.co.jp/Bookend-Hemingway/4963/column/dos/ このメールマガジンは、『まぐまぐ』を利用して発行しています。 http://www.mag2.com/m/0000106066.htm (c) 2003 Chisato Hayahoshi