はじめに
C:\current_directory>dir ~
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は 0000-0000 です
C:\current_directory のディレクトリ
ファイルが見つかりません
コマンドプロンプトではdir ~
コマンドを用いてホームディレクトリを見ることはできません。
Windowsをいつも使っているつもりでしたが、ls == dir
だと思い込んでいてハマったので書いておきます。
正解
C:\current_directory>dir %homepath%
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は 0000-0000 です
C:\home_directory のディレクトリ
2020/02/02 20:20 <DIR> .
2020/02/02 20:20 <DIR> ..
# ほか色々
0 個のファイル 0 バイト
2 個のディレクトリ 000,000,000,000 バイトの空き領域
原因
Windowsのコマンドプロンプトでdir ~
を打つと、殆どは最初の結果になります。
しかしWindowsであれば、多くの環境で何らかのファイルがホームディレクトリに存在するはずです。
実はコマンドプロンプトにおいて、dir ~
コマンドは、カレントディレクトリ内の~
ディレクトリを見ています。
つまり、先ほどは殆どが最初の結果になるといいましたが、例外として、カレントディレクトリ内に~
ディレクトリが存在する場合のみ、次の結果になります。
C:\current_directory>mkdir ~
C:\current_directory>dir ~
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は 0000-0000 です
C:\current_directory\~ のディレクトリ
2000/02/28 23:59 <DIR> .
2000/02/29 00:00 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 000,000,000,000 バイトの空き領域
そして恐ろしいことに、コマンドプロンプトではmkdir ~
でカレントディレクトリ下に~
ディレクトリを作れてしまいます!
PowerShellの場合
PowerShellではdir ~
というコマンドでホームディレクトリを見てくれます。
そのため、カレントディレクトリに~
ディレクトリが存在していても、~
ディレクトリの中身ではなくホームディレクトリを見ます。
PS C:\home_directory> tree
C:.
├─~
| ├─subdirectory1_in_~
│ └─subdirectory2_in_~
├─dir1
| ├─subdirectory1_in_dir1
│ └─subdirectory2_in_dir1
└─dir2
├─subdirectory1_in_dir2
└─subdirectory2_in_dir2
PS C:\home_directory> dir ~
ディレクトリ: C:\home_directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 1900/01/01 00:00 ~
d-r--- 2036/02/06 00:54 dir1
d-r--- 2038/01/19 03:14 dir2
また、コマンドプロンプトのようにmkdir ~
をすることはできません。
PS C:\current_directory> mkdir ~
mkdir : 指定された名前 C:\home_dir の項目は既に存在します。
発生場所 行:1 文字:1
+ mkdir ~
+ ~~~~~~~
+ CategoryInfo : ResourceExists: (C:\home_directory:String) [New-Item], IOException
+ FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
おわりに
Nyagosを使いましょう!(ぉぃ
もし何か気づいたこと、気になったことがあれば教えてください!