为什么不能在文件名中使用特殊字符,例如“?”或“;”?


17

当我尝试保存文件时,如果我在Windows的名称中使用特殊字符(例如冒号,问号或感叹号),则会收到一条消息,指出文件名无效。

这是为什么?



您要在哪个程序中保存文件,文件中有问题的字符还是文件名中的(看起来)令人讨厌的字符?
Jukka K. Korpela 2013年


Answers:


22

有几个对Windows(以及DOS(大多数字符最初来自于DOS))具有特殊含义的字符

MSDN

文件名不能包含以下任何字符:
\ /:*?“ <> |

/是一个开关(也是目录分隔符)。
\是目录分隔符。
:是驱动器指示符。
*?在搜索的通配符使用。
"是一种在参数中允许空格的方法。
<并且>是重定向,允许程序的输入和输出来自屏幕或键盘以外的其他内容。
|是一个管道,它允许一个程序的输出用作下一个程序的输入。


1
为了阐明此答案,如果这些特殊字符位于文件名中,则它们可能会干扰命令行(或路径)的解析。不需要以任何方式来分隔文件名(例如,用引号或空格将其括起来),因此遇到这样的特殊字符会导致不正确的解析(即,特殊字符是文件名或运算符的一部分吗?)。
锯末2013年

1
但是,由于处理了长文件名和引号,因此不再需要其中一些限制。\ ? *并且"是当前语法中唯一真正需要的字符,因为其他字符仅在引号之外有用。例外是:它仅用作第二个字符,可以在其他位置将其取缔。换句话说,没有名为的文件A:A letter's story.txt,但名为Sarah: My favorite cat.txt
trlkly

<>"保留通配符。Windows *?.转换为本机NT时,Windows使用它们为DOS实现复杂的语义,后者具有的简单语义*?.。保留六个通配符,因为Windows在文件系统本身中(即直接在NtQueryDirectoryFile系统调用中)实现了通配符匹配,没有转义机制。在Unix中,通配符通常是在支持转义的shell上在应用程序级别实现的。
Eryk Sun

请注意,:通常保留在文件名中,但不在文件路径中。它用于设备名称和文件流的分隔符(例如“ filename:streamname:streamtype”)。此外,一些文件系统,如VirtualBox的共享文件夹中的文件系统允许:|以及在文件名ASCII控制字符(1-31),但他们在微软的所有文件系统保留除了命名管道文件系统。
Eryk Sun
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.