最終更新: 2014-10-23T14:06+0900
X:file.ext
というファイルと XX:alt.strm
というファイル。Y:\My\Desktop>echo aaa > C:a.txt
C:\a.txtを作成しようとしてアクセス拒否される。(C:a.txtは C:\a.txtと同じ?)
Y:\My\Desktop>cd /d C: C:\>echo aaa > Y:a.txt
Y:\My\Desktop\a.txtが作成される。(Y:a.txtは必ずしも Y:\a.txtではない!)
C:\>cd /d Y:\My\Documents Y:\My\Documents>cd /d C: C:\>echo aaa > Y:a.txt
Y:\My\Documents\a.txtが作成される。(Y:a.txtがさっきの Y:\My\Desktop\a.txtと違う!)
C:\>echo aaa > T:a.txt
T:\a.txtが作成される。(初登場の Tドライブに関しては T:a.txtと T:\a.txtは同じ)
C:\>echo aaa > Z:a.txt
「指定されたパスが見つかりません。」(Zドライブが存在しなくても、Zがファイル名だという扱いは受けません)
X:a.txtは必ずしも Xドライブのルート直下の a.txtにアクセスするわけではなく、ワーキングディレクトリの履歴が影響してる雰囲気。コマンドプロンプトだけでなく irbでも同じ場所に作成された。ドライブごとにワーキングディレクトリがあるとか?カレントドライブという概念。X:foo\barはカレントドライブを上書きする相対パス?
ちなみに、Cや Tや Yが CCや TTや YYだったりすると、それは(ドライブレターではありえないため)カレントディレクトリの CC(TT,YY)というファイルの a.txtという代替ストリームへの書き込みになるみたい。(代替ストリームの内容を確認する簡単な方法は more
コマンドだって)
/
というパスと \
というパス。大体どちらもカレントドライブの直下を指すみたい。直接 Windows APIを叩いてみてはいないけど。
=C: =D: など ドライブ毎のカレントディレクトリを保持(移動したことのあるドライブのみ)