読者です 読者をやめる 読者になる 読者になる

PowerShell のカレントディレクトリは他プロセスから削除できる。

PowerShell dosbatch

コマンドプロンプト (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 を使いたがらないので何の解決にもならない。