为什么在Windows 7中无法将文件夹命名为“ ._。”?


74

我只是注意到无法命名文件夹._.-而是命名了._。有时,它在命名后即消失,但在刷新视图后重新出现。Windows似乎在文件名末尾出现点问题-为什么这样做?


21
值得注意的是,您在Windows中偶然发现了一个用“。”开头的文件名的“ hack”.
jpmc26 2016年

8
@ThisNameBetterBeAvailable未经测试,但cd -- -_-可能有效。该--是标志一个共同的“选项结束”。
TripeHound

13
@ThisNameBetterBeAvailable否,--它的意思是“ 这是选项的结尾,将任何开头都-视为文字值 ”。刚刚经过测试:mkdir -- -_-并且cd -- -_-按我的预期工作。
TripeHound

2
或者,也./-_-应该工作。
glglgl

5
@Alexander在Linux中,由于这似乎是注释所在,因为cd "-_-"Shell使用引号进行分组,但不将其视为参数的一部分;它与invalid option
Izkata

Answers:


123

Windows通常要求文件没有扩展名或至少一个字符长的扩展名。零长度扩展名(即以.。结尾的文件名)并不酷。文件夹也可以具有扩展名,因此Windows不允许其名称以.。结尾。来源,摘自DavidPostill链接的文章

使用句点将基本文件名与目录或文件名中的扩展名分开。

(强调我的。)如果尝试结束以句点命名的文件或目录,则Windows仅假定您不需要扩展名,因此即使md在命令提示符下使用扩展名也将其删除。

危险区!如果您确实希望文件夹名称以结尾.,则需要使用魔术原始名称覆盖序列\\?\。在命令提示符下,md \\?\C:\path\to\container\._.确实会创建一个名为的文件夹._.,但是很多程序都会遇到问题,甚至是Explorer:

._。 问题

这样的目录只能rd以其后跟\\?\名称删除,或以其短(8.3,dir /x)名称重命名。


1
感谢您的详细回答!:)我认为这是一个用于隐藏诸如密码之类的秘密内容的理想文件夹,因为只有先重命名才能打开该文件夹,而且并非所有人都知道如何重命名。
黑色

19
@EdwardBlack不会阻止任何能够阅读堆栈交换的人(因此甚至不会为假设的小弟弟提供安全性)。通过给定的名称dir /x可以很容易地完成此操作,有时还可以方便地使用该名称。
克里斯·H

11
Cygwin的命令行工具FWIW也可以在Windows 7上创建(和操作)此类目录,而无需使用魔术序列。
史蒂夫·杰索普

4
@EdwardBlack正如Chris H所提到的,这不是非常秘密,因此您不应在此文件夹中存储任何特别重要的内容。此外,数字保密和保护是一个已经解决了很多次的问题。您可以使用多种加密方法和程序来确保事情的安全,而不必依赖晦涩的文件夹名称。
克里斯·哈珀

3
Nitpick:至少在8.3天内(我还没有研究过NTFS上写入磁盘的内容),该时间段从来没有被写入磁盘。名称分为名称和扩展名,它们分别存储。阅读后,它取了名字,如果有扩展名,则在名称中添加句点和扩展名。因此,无法表达._。在目录结构中,您当然会丢失尾随点。
罗伦·佩希特尔

22

Windows似乎在文件名末尾出现点问题?为什么是这样?

文件名或目录名不要以空格或句号结尾。尽管基础文件系统可能支持此类名称,但Windows Shell和用户界面不支持。

下面的源链接详细介绍了命名规则。

命名文件,路径和命名空间


5
在我看来,这仍然像是虫子。
ralu

@ralu如果它是一个错误,则MS似乎对修复它完全没有兴趣。自Windows XP以来,这些限制就一直存在(如果不是更早的话)。
DavidPostill

Windows XP?我的猜测是这些限制源于MS-DOS 0.x-让我们请盖茨先生解决问题...
Christian Severin

17

这不是错误。这是设计使然,以防止兼容性问题。
这是DOS时代的遗留物。

FAT12(软盘)和FAT16文件系统(在Windows 95中引入长文件名之前的FAT16)仅以11个字节存储文件名:
名称为8个字节,扩展名为3个字节。名称和扩展名之间的“句号”甚至都没有存储。它被隐含并自动添加以用于显示目的。
目录根本没有扩展名。而是将扩展名的3个字节填充为“ $”字符(实名无效)。
因为Windows仍与此资源管理器兼容,并且Windows的许多其他组件无提示地使结尾期消失,以防止出现兼容性问题。
正如其他人所述,您实际上可以使用RAW语义(绝对路径名前的\\?\前缀)来处理此类文件夹。
在后台,NTFS和网络文件系统对此类文件和文件夹没有任何问题。这只是Explorer试图阻止用户创建可能导致其他软件出现问题的内容的一种情况。

(实际上,还有其他一些遗留物:
文件名,例如COM,COM1,COM2,AUX,PRN,LPT,LPT1,LPT2,LPT3,CON可能会导致类似的问题,而Explorer和许多其他Windows部件都会让人困惑因为这些名称是“保留的”名称,也可以追溯到DOS时代。)


3
对于最初对存储点不满意的任何其他读者:这对于CP / M和FAT的所有版本(包括FAT16FAT32)都是正确的
本N

1
我记得有些旧的DOS程序(在实际的DOS上运行,可能直接使用INT13函数)给我带来了真正的悲伤,因为它设法以某种方式在c:驱动器上创建了一个名为a:foo.bar的文件...
rackandboneman

2
@BenN:实际上,在FAT32上有点不同;它既存储短文件名(8 + 3个字节,后向兼容名称为“隐含点”),又存储长文件名(通常称为LFN),该文件名最多包含255个UCS-2字符,带显式点,并且除非您正在使用16位应用程序,则始终使用LFN。
Matteo Italia 2016年

1
@MatteoItalia据我了解,长文件名保存在伪文件条目中;已知的Windows安装会寻找这些条目,并在可能的情况下呈现它们而不是SFN。请参阅Raymond Chen关于该主题的文章,或上面链接的FAT32格式规范的VFAT部分。
本N

1
-1您对目录扩展名是错误的;也许对CP / M来说是正确的(我的内存对于该OS来说很糟糕),但是自从DOS时代以来,我一直在树中使用“ programm.ing”目录,请参见win.tue.nl/~aeb/linux/ fs / fat / fat-1.html-目录条目的处理方式与文件完全相同,它们的名称也可以为8.3。测试:创建一个8.3目录(mkdir testfile.name)并在Windows(dir /x)中显示其DOS名称-您TESTFI~1.NAM将按预期获得。
vaxquis '16

3

这里的问题是Windows(DOS)在FAT文件系统上允许使用8.3文件名。含义是8个字符,后跟一个。然后是三个字符。Unix和Linux允许除/和\ 0以外的任何字符。\ 0是C字符​​串终止符,/是目录分隔符。其他所有东西都可以使用。

Windows 95通过维护短文件名(8.3)到长文件名(LFN)元数据的数据库来解决此问题。如果擦除Windows 95 OS文件,则在下次安装Windows 95时,磁盘上的文件名仍然奇怪。例如,在磁盘上,“我的文档”可以命名为MYDOCU〜1。显然,如果丢失了元数据,您将无法轻松转换它们。

自从MS-DOS时代以来,该外壳必须处理许多历史遗留问题。

希望这可以帮助


1
本身并没有真正的数据库。Windows只是将长文件名的部分作为伪文件塞在磁盘上。请参阅Raymond Chen关于该主题的文章
本N
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.