なんかの拍子に、末尾に空白があるフォルダを作ってしまい、操作不能になってしまった時の対処法メモ。
PS R:\a> ls
ディレクトリ: R:\a
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2025/05/19 12:22 MotionCam
MotionCamというフォルダがあるように見えますが、操作できません。
PS R:\a> mv MotionCam b
mv : パス 'R:\a\MotionCam' が存在しないため検出できません。
発生場所 行:1 文字:1
+ mv MotionCam b
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (R:\a\MotionCam:String) [Move-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand
mvコマンドが通用しません。で、なぜかというと、実は「MotionCam 」(最後にスペースを含む)というフォルダ名になっているからです。下記のコマンドで確認すると、最後に「32」つまりスペースが入っていることがわかります。
PS R:\a> Get-ChildItem -Name | ForEach-Object {
>> $bytes = [System.Text.Encoding]::UTF8.GetBytes($_)
>> "{0} -> {1}" -f $_, ($bytes -join ' ')
>> }
MotionCam -> 77 111 116 105 111 110 67 97 109
MotionCam -> 77 111 116 105 111 110 67 97 109 32
解決策 ― Win32 正規化をバイパスする
特殊文字を含むパスは、UNC 風の長いパス接頭辞 \\?\
を付け、さらに PowerShell では -LiteralPath
を使うと確実に操作できます。
下記のコマンドでリネーム成功します。
PS R:\a> Rename-Item -LiteralPath "\\?\R:\a\MotionCam " -NewName "b"
コメント