我一直对 cmd.exe 的奇怪行为感到烦恼(至少在 WinXP 和 Windows7 中)。类似这样的命令del *.txt
也会删除*.txt1
文件('.txt' 后面的任意数量的字符都可以)。这是一个众所周知的错误吗?
答案1
是偶尔遇到的有点知名的吗?
对此行为的解释如下:,并提供可能的解决方法。
摘要:它源自 NTFS 处理短(8.3)文件名的方式,为了与无法处理“新奇”长文件名的旧文件兼容。 dir /x
可以用来查看短文件名,如下所示:
C:\>dir /x *~*
...
02/25/2011 08:18 AM <DIR> DOCUME~1 Documents and Settings
05/28/2011 12:02 AM <DIR> PROGRA~1 Program Files
...
长度超过三个字符的扩展名将被截断为其短文件名;因此.txt1
,、、等都变成。.txtxtxtxt
.txt_file
.txt
答案2
扩展名超过 4 个字母的文件(当然其他规则也适用)会获得一个短名称,例如“foo.txt1”的短名称为“foo~1.txt”。DEL
(DIR
与大多数其他cmd.exe
内置命令一样,也可能如此)也会对短名称进行操作。有关相关主题的讨论,请参阅这个博客。
答案3
这会是在 FAT/VFAT 文件系统上吗?如果是这样,那么您会被用于表示不符合 8.3 架构的名称的黑客攻击;有一个DIR
选项可以向您显示混乱的短名称,这些名称将以实际文件名开头,但~
在扩展名前有一个和一个数字,然后扩展名的上限为 3 个字符。(例如: C:\Program Files
通常转换为C:\PROGRA~1
.)通配符可能会意外匹配这些名称。 这应该不是发生在 NTFS 或(我认为)网络共享上。只是 DOS 似乎还没有消亡……