文件夹操作时提示找不到文件夹,文件名最后一位是空格时的对应方法

还好我眼尖,发现了华点,才在短时间里找到了原因,进而解决

不想看背景可以直接看结论。

故事背景

那天检查科的大爷突然问我,说

“诶!你知道那个文件夹怎么都删不掉的时候该怎么办吗?”

我:

“啊?”

然后发现,在资源管理器界面,文件夹确实好好的在那放着,也可以访问到下级目录,但是对文件夹进行诸如移动,改名,删除之类的操作的时候,就会提示“找不到文件夹”(原文是日语,反正具体提示是啥也忘了)。访问到下级目录的内部时,内部的文件也是可以正常删除的。就这样对着文件夹结构上下其手,最终找到了真的有问题的一层。

一个名字类似"20240823 AAA BBB 1 “的文件夹。

我陷入了沉思,然后再次重命名的时候,我突然发现……文件夹名的最后有一个空格!

在正常资源管理器界面新建文件夹时,最后一位是空格的话,应该会被某一层自动删掉这个空格。但是这个文件夹是某个软件根据固有的命名规则自动生成的,在某种因缘巧合下最后一位是空格,又因为某种阴差阳错,绕过了创建文件夹时对于命名规则的检测,所以就留下了这一坨硬岔……

反正问题知道了,再去特定原因就简单了。

结论

全路径

最后一位带空格的文件/文件夹名是不合法的,通过正常的命令无法指定,所以需要特殊的方法。 这种方法就是通过“全路径”的方法,

如果通常情况下的绝对路径是这样的 C:\Program Files\Parent

那所谓的全路径就是 \\?\C:\Program Files\Parent

具体的全路径特指的是什么,有什么特征我也不知道,我也是第一次听这个概念……

然后我们通过全路径来指定文件夹操作,

对单个文件

如果是单个文件的最后一位是空格,那可以通过修改文件名的方法把它转换成正常可以操作的文件,再进行后续操作。

例如我要对 Parent 目录下的test 重命名为 123,则输入

ren "\\?\C:\Program Files\Parent\test " "123"

对文件夹

如果是单个文件的最后一位是空格,那就只能把同级和下级内容物全部备份到外部,再指定它的上级文件夹循环删除所有内容。

例如我要删除 Parent 文件夹内部的名叫Test 文件夹,我必须对他上级的 Parent 文件夹进行删除操作,同时 Parent 文件夹也会被删除。(尝试过直接对名称错误的文件进行操作,并没能成功……)/s是对非空文件夹操作的选项,不写会提示文件夹非空无法删除。/q是不需要确认的选项,不输入会询问是否删除,需要手动回答(Y/N),怕误操作可以不加。

rmdir "\\?\C:\Program Files\Parent" /s /q

尝试过的其他方法

文件夹权限

文件夹是默认只读权限,试过修改权限也是依然无法删除。并且提示一直是“找不到文件夹”而不是权限不足之类的。

Powershell/cmd 管理员强制删除

知道了真正的原因之后,回头想想,仅仅提到管理员权限,加一大堆强制的选项也是显然删不掉的啦。 不过还是试了,万一呢。

获取缩写名

另外查到通过 cmd 的dir /x指令获得该文件夹的缩写名,并通过指定缩写名的方式特定到该文件夹,但是我输入这个指令后,缩写名是空白的,所以没成功。

罪魁祸首

是一款联动 CT 扫描仪的,由 Hexagon 出品的软件

参考

打不开又删不掉的文件

无法删除 NTFS 文件系统上的文件 - Windows Server | Microsoft Learn

使用 Hugo 构建
主题 StackJimmy 设计