[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

所以请问各位高手大侠们,这个诡异的问题该如何解决?都已经困扰我好长时间了。

本帖最后由 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

>

TOP

回复 2# 0000


    请问,您这样的回答,想表达什么?

TOP

回复 3# sila


    他可能是想让你执行 dir  /x 命令看看文件的8.3短名称
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


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

TOP

本帖最后由 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".
1

评分人数

TOP

本帖最后由 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格式为判断标准的?这简直就是。。。。。唉~~~~

TOP

回复 5# sila


你说的对。
如果要解决问题,就用 dir+find 简洁明了不折腾。
如果要理解为什么 dir /b *1* 会显示那些文件,就需要理解8.3短名。我建议暂时不要浪费这个时间了,等以后真正有需求的时候再研究也不迟。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# Batcher


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

TOP

返回列表