在Windows中,为什么有些字符是非法的?

In Windows, why are some characters illegal?

我们大多数人都知道,Windows 禁止在文件名中使用以下字符:

* . " / \ [ ] : ; | = ,

Linux 和其他基于 Unix 的系统,仅出于显而易见的原因禁止 [=12=](空字符)和 /(路径分隔符)。

为什么Windows有这么多禁用字符?

我看过了,我发现的每个答案都是 "is this valid" 或 "what is valid" 的变体,没有讨论导致 Windows(DOS?)团队的设计决策使它们非法。

原因是那些字符在DOS命令中有特殊的含义,例如:

dir c:\"Long folder name"\*.* | more

冒号用于指定c:驱动器,引号用于带有其他问题字符(通常是空格)的名称,星号是通配符,句点是文件扩展名分隔符,竖线正在将输出发送到另一个程序。

Windows的早期版本只是运行在DOS之上,所以他们不得不接受DOS的限制。当 Windows 本身成为一个操作系统时,它仍然使用相同的文件系统,因此它保留了兼容的限制。

整理顺序:

  • * 被禁止,因为它是 Win32 通配符。请注意,与 Linux 不同,通配符由 API 处理,而不是由 shell.

  • 处理
  • . 没有被禁止(很明显!),尽管当它出现在文件名末尾时它确实有特殊的语义,即它被删除了。这是为了向后兼容 FAT 文件系统 and/or 为它们设计的应用程序。

  • " 是一个 kernel wildcard character.

  • 反斜杠是路径分隔符,为了与 UNIX 兼容,正斜杠(有时)也被视为路径分隔符。

  • []不被禁止。

  • : .

  • ;不禁止

  • | - 我不确定这个。可能是因为在命令行上的特殊含义,虽然还有其他特殊含义的字符在文件名中没有被禁止。

  • =,不被禁止。

不在您的列表中的其他禁止字符:

  • ? 是 Win32 通配符。

  • <>是内核通配符。

  • 文件名末尾的空格与句点相同。