几周前,我使用 Linux 的实时启动 CD 并将屏幕截图重定向到我的 NTFS 驱动器。
文件名包含冒号符号:
,这是 NTFS 文件系统不支持的文件名字符之一。
不支持的字符包括:\ / : * ? " < > |
我尝试使用常规命令提示符、PowerShell、一些脚本语言甚至 Windows 上的 Bash 来解决这个问题,但都没有效果。
我甚至尝试了\\?\
路径技巧但它也不起作用。
这个限制显然与 NTFS 文件系统有关,那么从这里继续的方法是什么呢?
答案1
重新启动你的 Linux Live CD 并从那里进行更正。
Windows 无法处理这个问题。这需要从 Linux 来完成。
答案2
@LPChip 的答案是这答案可以解决您的问题,但我还有更多细节,我认为需要在这里给出另一个答案。
文件系统是管理磁盘上文件的数据结构,因此通常 FS 本身对文件名的限制很少 - 大多数现代 FS(包括 NTFS)甚至可以在技术上保存空字节,就像 Python 保存字符串(长度 + 字节数组)一样。
FS 支持任意字符串并不意味着您应该这样做。实际的操作系统对文件名施加了限制,以便它们可以向上层提供合理的“路径”接口,应用程序可以通过该接口访问文件。
这就是每个操作系统对文件名都有一些限制的原因。值得注意的是,Linux 和其他 Unix 系统允许文件名中使用除空字节和路径分隔符(正斜杠)之外的所有字符,但不包括两个保留名称.
和..
(当前目录和父目录)。出于历史原因,Windows 通过普通的 Windows API 保留了更多字符和更多特殊名称(例如,,CON
到等),但仍然允许通过 WSL1 使用的低级 API 使用这些名称。例如,您可以在 WSL1 中创建类似的东西并正常使用它,但您无法在 WSL 环境之外对其进行任何操作。LPT
COM1
COM9
/mnt/c/CON
在 Linux 上,fsck
如果无效文件名以某种方式出现在文件系统中,程序可以重写它们。我想chkdsk.exe
可以做类似的事情,但我还没有验证过。
答案3
维基百科侧边栏关于禁止使用的字符的声明引用一份文件(似乎不是官方的)。 有一个网页版本在此。
深入研究,我们发现第 13 节“概念 - 文件名命名空间”,有多个允许的字符集。看来 Windows 不能很好地兼容 POSIX 字符集。
但是,提到 DOS 类型(旧的“8.3”样式)让人想起 Windows 在所有其他方法都失败的情况下处理所谓的“短名称”的能力。您应该能够使用提示符cmd
来dir /x
查看与文件被禁止的“长名称”相对应的短名称。也许可以使用该“短名称”将文件重命名为问题较少的名称。
请让我们知道进展如何!