带通配符的命令提示符DIR会返回意外的结果

我正在运行2003服务器(最新的服务包)。 当我在命令行上键入这个:

dir 2010 *

要么

dir 2010*.* 

我收到这个结果:

  02/01/2011 02:34 PM 2,460 2011-02-01-14-34-23-807.mdn 02/02/2011 08:59 AM 3,757 2011-02-02-08-59-32-604.req 02/01/2011 09:16 AM 235 2011-02-01-09-16-35-104.dat 02/02/2011 05:06 PM 460 2011-02-02-17-06-05-166.log 02/01/2011 03:31 PM 66,570 2011-02-01-15-31-27-838.dat 02/01/2011 03:16 PM 145 2011-02-01-15-16-51-135.log 02/01/2011 08:52 PM 1,608,916 2011-02-01-20-52-57-416.req 7 File(s) 1,682,543 bytes 0 Dir(s) 42,891,452,416 bytes free 

谁能告诉我为什么? 我期待看到仅以“2010”开头的文件列表。 目录中没有这样的文件,所以我不期待看到任何东西。 我必须误解DIR如何处理通配符,或者我正在做一些愚蠢的事情。

超级用户从用户grawity 这个答案显示,答案在于Windows创build8.3文件名的方式,并且DIR命令查看这两个文件名。

通过使用DIR /X显示短文件名可以看到发生了什么。

从这个答案:

使用NTFS文件系统时,可以使用以下命令禁用系统范围内的8.3名称创build:

  fsutil behavior set disable8dot3 

但是,这不会影响现有的名称。

目录/ OD将sorting我的date,所以在PowerShell相当于是Get-ChildItem | sorting对象date,如果你包含的东西其中对象{!$ _。模式匹配“h”}它应该做的伎俩