コマンドサーチ順位

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

2009-05-16 コマンドサーチ順位

LinuxやWindowsでのプロンプトから入力されたコマンドのコマンドサーチ順位をまとめてみました。


LinuxなどのUNIX系では、プロンプトから入力するコマンドのコマンドサーチ順位は、以下のようになっています。

  1. コマンドをパス(絶対・相対)から指定(外部コマンド)
  2. シェルの組み込みコマンドの指定(内部コマンド)
  3. 環境変数PATHをコマンドサーチパスでの指定(外部コマンド)

尚、外部コマンドはwhichコマンドで確認し、内部コマンドはtypeコマンドで確認ができます。

$ type echo
echo is a shell builtin

$ which echo
/usr/bin/echo

ちなみに、echoコマンドは昔は外部コマンドで、今は内部コマンドになっているようです。

つまり、パス指定をしなければ、echoコマンドは内部コマンドが優先される。


Windows系では、以下のようになっています。

  1. コマンドをパス(絶対・相対)から指定(外部コマンド)
  2. シェルの組み込みコマンドの指定(内部コマンドcmd.exe)
  3. カレントディレクトリにあるコマンドの指定(外部コマンド)
  4. 環境変数PATHをコマンドサーチパスでの指定(外部コマンド)

UNIX系との大きな違いは、Windows系ではカレントディレクトリにあるコマンドが、環境変数PATHより優先されることですね。

UNIX系では、カレントディレクトリでさえも、環境変数PATHに入っていないとなりません。


また、Windows系では拡張子なしでコマンド起動ができます。同名のコマンドで拡張子が異なる場合のコマンドは、以下のような優先順になっています。

  1. .COM
  2. .EXE
  3. .BAT

あと、優先順は調べきっていないのですが、以下の種類のファイルも拡張子無しで実行ができますね。


また、コマンドでなく、APからコールされる標準のDLL検索パスは以下のようです。

  1. アプリケーション(EXE、すなわちホストプロセス)のあるディレクトリ
  2. システムディレクトリ。GetSystemDirectory API で取得できるディレクトリ
  3. 16bit 版のシステムディレクトリ(互換性に起因するもの。64bitOSだとたぶん使われないと思いますが正直不明w)
  4. Windows ディテクトリ。GetWindowsDirectory API で取得できるディテクトリ
  5. カレントディテクトリ
  6. PATH 環境変数に指定されているフォルダ(SafeDllSearchMode を操作すると除外可能)
  7. レジストリの、App Paths キーで指定されている特別なフォルダ(インストーラで設定されます)
http://blogs.wankuma.com/tocchann/archive/2008/03/14/127679.aspx

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。

人のよいところをどんどん見つけよう