事故现场

当我使用命令行 7z x "D:\D.7z.001" -o"D:\ " 完成一次看似普通的解压分卷压缩文件之后,我发现 D 盘下出现了一个文件名为不可见字符的文件夹,打开一看发现里面的文件夹跟 D 盘的一模一样,也有个不可见字符作为名称的文件夹。我打开那个文件夹(文件夹路径 D:\ \ )后发现了我解压出来的文件,我刚想将这些文件放进 D 盘根目录时,发现全部报错“未指定的错误”,我尝试打开这些文件,全部报错“路径不可用”,我回到根目录想要将这个文件夹(路径为 D:\ 的根目录下的“不可见字符文件夹”)删除,又是“未指定的错误”。

这就让我很崩溃,cmd、powershell 的常规指令(rd,del)均无法删除。

解决方法

我使用 tree /f 发现不可见字符目录显示在了树形结构中,于是用 dir /x 查看到了其 8.3 名称为 99A4~1 ,这就好办了,使用管理员身份打开 cmd,运行 rd /s /q D:\99A4~1 直接删除。

原因

输入路径多一个空格为什么会错

7-zip 官方文档(7-Zip.chm → Command Line Version → Switches → -o)原文:

-o{dir}
Set Output directory. There must be no space between -o and the directory name.

也就是说:

  • -o"D:\" 是合法正常的

  • -o"D:\ " 是合法但不正常的

  • -o "D:\" 是不合法的

因此 7-Zip 收到的是「输出目录 = D:\␠」(␠ 表示空格)。Windows 允许目录名以空格结尾,但在 Win32/Explorer 层面会被 TrimRight

为什么空格文件夹会套两层

7-Zip 在 x 模式下会保持压缩包内的相对路径。如果压缩包本身把文件放在「子目录」,它会先创建 D:\␠\子目录 → 再创建第二层 D:\␠\␠\子目录,最终形成两层空壳。

官方