tri*_*tof 6 windows file-extension wildcards
在 Windows 7 上,我有一个包含以下四个文件的目录:
由于文件有超过 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 的文件,我应该使用哪个命令?谢谢
你没有使用 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~1和C:\MYDOCU~1\CALENDAR.TXT就地的C:\Program Files和C:\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 文件名可以根本没有扩展名,但人们确实习惯于键入*.*,因此它的含义*与单点相同,并且忽略了单点。)