cmd.exe:“del *.txt”也会删除 *.txt1 等

cmd.exe:“del *.txt”也会删除 *.txt1 等

可能重复:
WinXP dir 命令:3 和 4 个字符扩展名相同吗?

我一直对 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”。DELDIR与大多数其他cmd.exe内置命令一样,也可能如此)也会对短名称进行操作。有关相关主题的讨论,请参阅这个博客

答案3

这会是在 FAT/VFAT 文件系统上吗?如果是这样,那么您会被用于表示不符合 8.3 架构的名称的黑客攻击;有一个DIR选项可以向您显示混乱的短名称,这些名称将以实际文件名开头,但~在扩展名前有一个和一个数字,然后扩展名的上限为 3 个字符。(例如: C:\Program Files通常转换为C:\PROGRA~1.)通配符可能会意外匹配这些名称。 这应该不是发生在 NTFS 或(我认为)网络共享上。只是 DOS 似乎还没有消亡……

答案4

你可能可以使用Forfiles解决方法的命令

例如。

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

仅匹配txt结局。

相关内容