我有一个名为 SWAT 的文件夹无法访问或重命名,可能是因为句号。它出现在资源管理器中,但在尝试打开它时会产生错误。
位置不可用
D:\StockPics\SWAT 不可用。如果该位置位于此电脑上,请确保设备或驱动器已连接或光盘已插入,然后重试。如果该位置位于网络上,请确保您已连接到网络或 Internet,然后重试。如果仍然找不到该位置,则它可能已被移动或删除。
尝试重命名文件夹会产生与更改文件扩展名时相同的警告。继续重命名时,Windows 找不到该文件。
找不到此商品
此文件不再位于 D:\StockPics。请验证项目的位置,然后重试。
Powershell 遇到类似错误。文件夹出现在dir
列表中,但尝试重命名时找不到它。
PS D:\StockPics> dir Directory: D:\StockPics Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 27/04/2020 15:45 S.W.A.T. PS D:\StockPics> Rename-Item 'S.W.A.T.' 'SWAT' Rename-Item : Cannot rename because item at 'S.W.A.T.' does not exist. At line:1 char:1 + Rename-Item 'S.W.A.T.' 'SWAT' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
答案1
事实证明,Windows API 无法(通常)处理项目名称中的尾随点或空格。当使用该 API 的实用程序(如 Powershell 或 Explorer)负责创建名称时,会自动删除非法尾随字符。
但此限制并不适用于第三方软件,因为第三方软件可以自由创建 Windows 认为无效的名称。一旦创建,任何 Windows 实用程序都将无法对这些项目执行操作。
有两种解决方法:
使用外部工具。例如,7zip 有一个文件浏览器,能够对具有无效名称的项目执行操作。
使用 Windows 的扩展长度路径模式。通过在绝对路径前添加
\\?\
,Windows API 支持带有尾随点或空格的项目等。如果将原始问题中的 Powershell 命令重写为:
PS D:\StockPics> Rename-Item '\\?\D:\StockPics\S.W.A.T.' 'SWAT'