PowerShell のカレントディレクトリは他プロセスから削除できる。
コマンドプロンプト (cmd.exe) のカレントディレクトリを他のプロセスから削除しようとすると「項目 <パス> を削除できません: 別のプロセスで使用されているため、プロセスはファイル '<パス>' にアクセスできません」というメッセージが表示されて削除できない。セーフティであるとも考えられるが、他のセッションでコマンドプロンプトを開きっぱなしにするようなお行儀の悪いユーザーがいる場合などは不便に感じる。
PowerShell を使えばすべて解決する。
cmd.exe のカレントディレクトリ
cmd.exe のカレントディレクトリを削除しようとすると切なさあふれるメッセージが表示される。
:: cmd.exe
C:\Users\shrimp\hoge>
# powershell.exe PS C:\Users\shrimp>rmdir hoge rmdir : 項目 C:\Users\shrimp\hoge を削除できません: 別のプロセスで使用されているため、プロセスはファイル 'C:\Use rs\shrimp\hoge' にアクセスできません。 発生場所 行:1 文字:1 + rmdir hoge + ~~~~~~~~~~ + CategoryInfo : WriteError: (C:\Users\shrimp\hoge:DirectoryInfo) [Remove-Item], IOException + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
powershell.exe のカレントディレクトリ
powershell.exe のカレントディレクトリは無言のうちに削除できる。
# powershell.exe
PS C:\Users\shrimp\hoge>
:: cmd.exe C:\Users\shrimp>dir hoge /b C:\Users\shrimp>rmdir hoge C:\Users\shrimp>dir hoge /b ファイルが見つかりません
PowerShell プロンプトも特におかしな動作はない。
# powershell.exe # カレントディレクトリは変わらず PS C:\Users\shrimp\hoge>pwd Path ---- C:\Users\shrimp\hoge # カレントディレクトリにアクセスするとエラー PS C:\Users\shrimp\hoge>ls ls : パス 'C:\Users\shrimp\hoge' が存在しないため検出できません。 発生場所 行:1 文字:1 + ls + ~~ + CategoryInfo : ObjectNotFound: (C:\Users\shrimp\hoge:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
結論
コマンドプロンプトを開きっぱなしにするようなお行儀の悪いユーザーが PowerShell を使ってくれればいいが、そういうユーザーは大概 PowerShell を使いたがらないので何の解決にもならない。