带有超过 3 个字符扩展名的文件的 Windows 通配符

tri*_*tof 6 windows file-extension wildcards

在 Windows 7 上,我有一个包含以下四个文件的目录:

  • xxx.txt
  • xxx.txt2
  • xxx2.txt
  • xxx2.txt2

由于文件有超过 3 个字符作为文件扩展名,通配符 * 的行为似乎很奇怪:

dir *.txt

10/13/2014  04:14 PM                 6 xxx.txt
10/13/2014  04:17 PM                 6 xxx2.txt
10/13/2014  04:17 PM                 6 xxx2.txt2
10/13/2014  04:14 PM                 6 xxx.txt2
           4 File(s)             24 bytes
           0 Dir(s)   6,660,980,736 bytes free
Run Code Online (Sandbox Code Playgroud)

我希望只看到两个带有 txt 扩展名的文件,而不是带有 txt2 的文件(就像在 Linux 机器上一样)。MS-DOS 是否忽略将文件扩展名截断为 3 个字符,还是在末尾自动添加另一个通配符?如果我只想删除带有 txt 扩展名的文件而不是带有 txt2 的文件,我应该使用哪个命令?谢谢

use*_*686 7

你没有使用 MS-DOS;它甚至不允许文件扩展名超过 3 个字符。您正在使用 Windows 命令行——特别是cmd.exeshell。

但 Windows 确实努力保持与那个时代的程序兼容。因此,直到 Windows 8(或类似的东西),所有具有较长扩展名的文件都有一个别名,该别名被截断了扩展名,以及名称本身。

如果您运行dir /x,您可能会看到每个文件都有一个分配给它的“短名称”,限制为 8+3 个字符,就像在 MS-DOS 和 16 位 Windows 中一样。

如果用户想要升级到 Windows 95 并仍然通过最初为 Windows 3.1 编写的程序访问他们的文件,这些名称就在那里——所以运行 16 位程序不会崩溃,而只会显示C:\PROGRA~1C:\MYDOCU~1\CALENDAR.TXT就地的C:\Program FilesC:\My Documents\Calendar.txt

(是的,即使在 Windows XP/Vista 时代,有些人确实确实使用了旧的 16 位软件......但是,我很确定 Windows 8 默认关闭“短名称”。这可能就是为什么 @EBGreen '没有看到相同的'问题'...)


另一件要考虑的事情是,旧的 Windows 外壳cmd.exe程序 , 本身已经增加了很多怪癖和兼容性修复程序。例如,由于 MS-DOS 匹配文件名的方式,即使不是故意的,也dir .txt意味着与 相同dir *.txt。但是人们已经习惯了较短的语法,即使 Windows 操作系统本身不再将其.txt视为通配符,cmd.exe 仍然接受该语法。(该dir命令本身不是一个程序,而是内置于 shell 中。)

(同样,在链接的文章中,还描述了另一个通配符怪癖——Windows 文件名可以根本没有扩展名,但人们确实习惯于键入*.*,因此它的含义*与单点相同,并且忽略了单点。)