Board logo

标题: [其他] 【已解决】批处理dir命令中使用通配符列出文件的问题 [打印本页]

作者: sila    时间: 2017-9-1 20:11     标题: 【已解决】批处理dir命令中使用通配符列出文件的问题

我在使用dir命令列出当前目录里文件名中包含数字1的文件或文件夹,发现使用dir /b *1*这样通配符表示时,居然把目录里的所有文件以及文件夹都列出来了,而不是只列举包含1的文件或文件夹。如图所示:

但使用其它数字就很正常,比如我列举包含数字5的文件,如图:

所以请问各位高手大侠们,这个诡异的问题该如何解决?都已经困扰我好长时间了。
作者: 0000    时间: 2017-9-1 21:23

本帖最后由 0000 于 2017-9-1 21:26 编辑


>dir /?|find "/X"
  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
  /X          显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,

>dir /x
驱动器 C 中的卷是 OS
卷的序列号是 8EC0-22F8

C:\Users\dell\文档\126\MPC_HC\0\0000\test 的目录

2017/09/01  21:03    <DIR>          (短名称)     .
2017/09/01  21:03    <DIR>                       ..
2017/09/01  21:02                 0              1234EDE.reg
2017/09/01  21:01                 0              4FRT5H.txt

                                               (这个没有被列出)
2017/09/01  21:02                 0              56TFD1.rtf
2017/09/01  21:01                 0 ("1" 在这里!)6HYG1GV.rar
2017/09/01  21:02                 0 TGFRDT~
1.MSC TGFRDTR.mscr
2017/09/01  21:02                 0 YHGFTR~1.MSC YHGFTRD.mscr
2017/09/01  21:02                 0 新建WI~1.BAT 新建 Windows 批处理文件.bat
               7 个文件              0 字节
               2 个目录 51,377,049,600 可用字节

>dir /b *1*
1234EDE.reg
56TFD1.rtf
6HYG1GV.rar
TGFRDTR.mscr
YHGFTRD.mscr
新建 Windows 批处理文件.bat

>

作者: sila    时间: 2017-9-1 21:57

回复 2# 0000


    请问,您这样的回答,想表达什么?
作者: Batcher    时间: 2017-9-1 22:19

回复 3# sila


    他可能是想让你执行 dir  /x 命令看看文件的8.3短名称
作者: sila    时间: 2017-9-1 23:36

回复 4# Batcher


    使用8.3格式了,那得到的结果都是8.3格式的文件名了,那我还需要这些文件名干嘛?
虽然我现在使用dir+find方式列出需要的文件,但我只是觉得奇怪,为什么dir /b *1*会显示全部文件?
作者: 0000    时间: 2017-9-2 10:20

本帖最后由 0000 于 2017-9-2 10:25 编辑

那个"1"在哪都标出来了
如果你没看见的话那就再举个例子

首先,dir /b *1*并没有显示全部文件!
其实漏了一个,叫 4FRT5H.txt ,它并没有被列出!

那为什么
TGFRDTR.mscr,YHGFTRD.mscr 和 新建 Windows 批处理文件.bat
被列出了呢?

前面说了 非 8.3 文件名产生(注意是 产生,不是dir /x做出来的) 短名称

dir /x 告诉我们
TGFRDTR.mscr,YHGFTRD.mscr,新建 Windows 批处理文件.bat
都有短名称。

TGFRDT~1.MSC <- TGFRDTR.mscr
YHGFTR~1.MSC <- YHGFTRD.mscr
新建WI~1.BAT <- 新建 Windows 批处理文件.bat

而dir /b *1*所找到的"1"就在这里!

dir /b *5* 就没有找到这里产生的"1".

作者: sila    时间: 2017-9-2 19:53

本帖最后由 sila 于 2017-9-2 20:00 编辑

回复 6# 0000


    首先,我只需要列出文件名,也就是用dir /b后列出的文件名,根本不需要什么8.3格式的短名。更不需要8.3格式里面包含的数字1,你完全把我的题理解错了。因此使用dir /b *1*这样命令后,我只想列出1234EDE.reg、56TFD1.rtf、6HYG1GV.rar这个三个文件名,而不是把其它无关的文件都列出来。最终效果就跟dir /b *5*那样,只列出包含数字5的几个文件而已!

那个4FRT5H.txt没有被列出,就因为它的文件名字数少于8位,所以它就不需要产生8.3格式,因此没有被列出。就因为那些超过8位数的文件名,都产生了8.3格式的文件名,而这8.3格式的就包含了数字1,所以都被列出来了。这就是问题所在吗?那难道系统是以8.3格式为判断标准的?这简直就是。。。。。唉~~~~
作者: Batcher    时间: 2017-9-2 21:46

回复 5# sila


你说的对。
如果要解决问题,就用 dir+find 简洁明了不折腾。
如果要理解为什么 dir /b *1* 会显示那些文件,就需要理解8.3短名。我建议暂时不要浪费这个时间了,等以后真正有需求的时候再研究也不迟。
作者: sila    时间: 2017-9-2 22:52

回复 8# Batcher


    我也是之前要利用dir /b *1*这样的写法列出一些包含数字的文件名,才发现了这样的问题,在网上也没找到相关的资料。虽然后来使用dir+find解决了,过了一段时间后,才想起来这件事,所以就来这里问问看,为什么会有这种奇怪的现象?既然现在知道是因为8.3的缘故,那就解决我的疑惑了。谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2