Windowsで「ドライブレター:」をルートディレクトリと勘違いしている人が多いようなので、「ドライブレター:」とついでに「\」についてもまとめてみる。
パス | 意味 | 例 |
---|---|---|
ドライブレター: | そのドライブのカレントディレクトリ | d: |
\ | コマンドを実行した時カレントディレクトリが属するドライブのルートディレクトリ | | |
ドライブレター:
コマンドプロンプトを起動すると、デフォルトの場合%USERPROFILE%がカレントディレクトリになっている。
この状態で「dir d:」や「d:」とするとDドライブのルートディレクトリが表示されるため、「d:」は「Dドライブのルートディレクトリ」のことだと勘違いしている人が多いようだ。
C:\Users\UserA>dir d:
ドライブ D のボリューム ラベルは Data です
ボリューム シリアル番号は XXXX-XXXX です
D:\ のディレクトリ
・・・
これは、コマンドプロンプト起動直後だと、Dドライブのカレントディレクトリは、Dドライブ直下なのでこのようになっているだけ。
Windowsでは、ドライブごとに固有のカレントディレクトリを持っている。
これについては以下のサイトの方が詳しいかもしれない。
http://www.atmarkit.co.jp/ait/articles/0006/01/news001.html
cd でDドライブのカレントディレクトリを移動してから同じ様に「dir d:」すると違う結果になることがわかる。
C:\Users\UserA>cd D:\directory
C:\Users\UserA>dir d:
ドライブ D のボリューム ラベルは Data です
ボリューム シリアル番号は XXXX-XXXX です
D:\directory のディレクトリ
・・・
C(fullpath.c)で_fullpath()とGetFullPathName()を使って「ドライブレター:」を変換してみる。
C:\Users\UserA>cd D:\directory
C:\Users\UserA>fullpath.exe d:
Source path = "d:"
_fullpath() = "D:\directory"
GetFullPathName() = "D:\directory"
python(fullpath.py)でも同じ結果になった。
C:\Users\UserA>cd D:\directory
C:\Users\UserA>python fullpath.py
source path = d:
fullpath = D:\directory
\
ルートディレクトリを表すのはこっち。
コマンドを実行した時のカレントディレクトリが属するドライブのルートディレクトリになる。
もしコマンド(プログラム)内でカレントディレクトリを別のドライブに変更した場合、変更したドライブのルートディレクトリになる。
C:\Users\UserA>dir \
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は XXXX-XXXX です
C:\ のディレクトリ
・・・
ちなみにUNIXと同じように「/」もルートディレクトリを表すが、Windowsのコマンドの場合、オプションスイッチとして扱われてしまう。
C:\Users\UserA>dir /
無効なスイッチです - ""
自作コマンドでは、使用する関数にもよるが「/」もルートディレクトリとして処理される。
C:\Users\UserA>fullpath.exe /
Source path = "/"
_fullpath() = "C:\"
GetFullPathName() = "C:\"