如何从 Windows 上的文件名中删除不受支持的字符

如何从 Windows 上的文件名中删除不受支持的字符

几周前,我使用 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 环境之外对其进行任何操作。LPTCOM1COM9/mnt/c/CON

在 Linux 上,fsck如果无效文件名以某种方式出现在文件系统中,程序可以重写它们。我想chkdsk.exe可以做类似的事情,但我还没有验证过。

答案3

维基百科侧边栏关于禁止使用的字符的声明引用一份文件(似乎不是官方的)。 有一个网页版本在此。

深入研究,我们发现第 13 节“概念 - 文件名命名空间”,有多个允许的字符集。看来 Windows 不能很好地兼容 POSIX 字符集。

但是,提到 DOS 类型(旧的“8.3”样式)让人想起 Windows 在所有其他方法都失败的情况下处理所谓的“短名称”的能力。您应该能够使用提示符cmddir /x查看与文件被禁止的“长名称”相对应的短名称。也许可以使用该“短名称”将文件重命名为问题较少的名称。

请让我们知道进展如何!

相关内容