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

时间:2015-04-10 01:22:29

标签: windows file operating-system filesystems dos

正如大多数人所知,Windows禁止文件名中包含以下字符:

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

Linux和其他基于Unix的系统只禁止\0(空字符)和/(路径分隔符),原因似乎很明显。

为什么Windows有这么多被禁止的字符?

我看了,我找到的每个答案都是“有效”或“有效”的变体,没有讨论导致Windows(DOS?)团队将其视为非法的设计决策。

2 个答案:

答案 0 :(得分:4)

按顺序拍摄:

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

  • .不被禁止(显然!)虽然它出现在文件名的末尾时确实有特殊的语义,即它被删除了。这是为了向后兼容FAT文件系统和/或为它们设计的应用程序。

  • "kernel wildcard character

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

  • []不受禁止。

  • : is used to indicate an alternate data stream

  • ;不被禁止。

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

  • =,不受禁止。

列表中没有的其他禁止字符:

  • ?是Win32通配符。

  • <>是内核通配符。

  • 以与句点相同的方式从文件名末尾修剪空格。

答案 1 :(得分:2)

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

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

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

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