
[记录]7-zip 解压出现不可见字符目录——小型事故
事故现场
当我使用命令行 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:\␠\␠\子目录
,最终形成两层空壳。
官方
-
7-Zip 论坛同样记录过「-o 后跟空格导致不可见目录」的案例:https://sourceforge.net/p/sevenzip/discussion/45797/thread/8e8a0a4f
-
Windows 文件名规范:MSDN 文档 Naming Files, Paths, and Namespaces 明确说明「尾部空格在 Win32 名称空间中被忽略」,但在 NTFS 层面仍可作为目录名存在。
- 感谢你赐予我前进的力量