解决 PowerShell 删除文件夹报错:找不到路径(名称末尾含空格/不可见字符)

问题背景

在使用 Remove-Item 删除桌面上一个名为 “自主学习照片” 的文件夹时,PowerShell 反复提示 “找不到路径,因为该路径不存在”

通过 ls 命令明明可以看到该文件夹,但无论如何在命令中输入名称(包括加引号、使用通配符 *)均无法定位。

故障现象

PS C:\Users\30793\Desktop> Remove-Item "自主学习照片" -Recurse -Force
Remove-Item : 找不到路径“C:\Users\30793\Desktop\自主学习照片”,因为该路径不存在。

核心原因

通过字节码检测发现,该文件夹名称的末尾包含 不可见的空格字符(ASCII 32)

  • Windows 资源管理器:允许文件夹名称以空格结尾。
  • PowerShell 路径解析器:在处理字符串参数时,会自动 修剪(Trim)首尾空格

这导致我们输入的 "自主学习照片" 被处理成不含末尾空格的路径,而真实文件夹名称包含空格,因此匹配失败。

✅ 成功解决步骤

既然通过字符串名无法精确定位,我们可以利用 Windows 文件系统的 8.3 短文件名机制 绕过特殊字符。

第一步:获取文件夹的短名称

在 PowerShell 中执行以下命令,查看桌面的短名称列表并筛选出目标文件夹:

cmd /c "dir /x C:\Users\30793\Desktop\ | findstr 自主"

参数解释:

  • dir /x:显示符合 8.3 规则的短文件名(例如 XXXXXX~1)。
  • findstr 自主:过滤出包含“自主”二字的行。

输出示例:

2026/04/15  17:47    <DIR>          自主学~1     自主学习照片

其中 自主学~1 即该文件夹的短名称,它不包含任何空格或特殊字符

第二步:使用短名称执行删除

记下显示的短名称,执行 rmdir 命令删除(在 PowerShell 中需通过 cmd /c 调用):

cmd /c "rmdir /s /q C:\Users\30793\Desktop\自主学~1"

参数解释:

  • /s:删除目录树(包含子文件夹和文件)。
  • /q:安静模式,不询问确认。

第三步:验证结果

再次列出桌面内容,确认文件夹已消失:

ls

原理补充:为什么短文件名有效?

NTFS 文件系统为了兼容古老的 16 位应用程序,会为每一个长文件名自动生成一个 8.3 格式的短文件名

  • 规则:取长文件名的前 6 个有效字符(去除空格和非法字符),加上波浪线 ~ 和数字序号。
  • 特性:短文件名是 纯 ASCII 字符,且 不含空格

当我们通过短文件名访问时,完全绕过了 PowerShell 的字符串修剪机制,直接命中磁盘上的真实文件记录,因此能够成功删除。

总结

遇到 PowerShell 无法删除/定位名称含特殊字符(空格、全角符号、零宽字符)的文件夹时,可以遵循以下排错流程:

  1. 不要死磕字符串写法(引号、通配符往往无效)。
  2. 使用 dir /x 获取短文件名
  3. 使用 cmd 原生命令或 .NET 的 LiteralPath 参数操作短名称

此方法无需第三方工具,完全基于系统自带功能,安全且高效。