包含扩展名的 DIR 文件名

包含扩展名的 DIR 文件名

我只是想检查转储目录中是否有任何 ZIP 程序,例如 PeaZip、NanoZip 等,但却遇到了一个我以前只见过几次的奇怪问题。

我使用以下命令列出以下文件:文件名包含zip(例如,,,nanozip.zip等):peazip2.rarwinzip-beta.exe

dir *zip*

这列出了文件名包含 的所有文件zip,而且所有带有.zip扩展名的文件(例如,foobar.zip)。

然后我尝试了以下操作:

dir *zip*.*

这给出了相同的结果。

有人知道怎样得到预期的结果吗?(我知道for 可能能够做到这一点,但输出不正确。

答案1

问题

列出zip基本名称中包含的所有文件(如果有的话,在最后一个点之前)很棘手,原因有二:

  • Windows 只有两个通配符:*?

    *匹配任意数量的字符(包括零个)。

    ?匹配一个字符(点除外),除非它是模式的最后一个字符,后跟一个点,仅匹配其他通配符,或者仅匹配其他通配符然后匹配一个点。1

  • 长文件名没有实际的扩展名。GUI 可能会将最后一个点后面的所有内容视为文件扩展名,但这只是惯例。

    更糟糕的是,.在命令提示符上具有特殊含义。在 LFN 之前,每个文件都有一个扩展名(尽管它可以为空)。因此,*.*匹配所有文件,而*仅匹配扩展名为空的文件。

    为了保持一定的向后兼容性,.如果它后面只有通配符和其他点,则会被忽略,除非这些点相邻且后面至少有一个通配符,或者根本没有通配符并且点前最多有一个星号。1

例子:

  • foo?.bar将匹配文件foo.bar,但foo?bar不会匹配也不foobar匹配foo.bar

  • *、、、和将匹配任何给定文件夹中的所有文件,而*.*、和则不会。*.*.*.*.***.*.*..*..*

解决方法

除非你使用存档位要执行增量备份2,有一种方法可以显示你感兴趣的文件(并且只显示那些),只使用 DIR 和属性命令。

脚步:

  1. zip首先,在所有文件名中包含以下内容的文件上设置存档位:

     ATTRIB +A *zip*
    
  2. 现在,取消设置所有具有以下扩展名的文件的存档位zip

     ATTRIB -A *.zip
    

    如果您想要排除其扩展名zip也以 结尾的文件(例如ezip),请使用以下命令:

     ATTRIB -A *.*zip
    

    由于*.*zip也将针对 8.3 文件名进行测试,因此这也会匹配相应扩展名以 开头的文件zip(例如zipx),除非 8.3 文件名不存在或已被更改。

  3. 由于上一个命令取消了对文件的存档位设置nanozip.zip,因此请重置这些文件:

     ATTRIB +A *zip*.*zip
    
  4. 现在,您可以使用/AADIR 命令的开关仅显示设置了存档位的文件:

     DIR /AA *zip*
    

通过/S打开 DIR 开关和/S [/D]打开 ATTRIB 开关,这甚至适用于子目录中的文件。


1这只是一个怪癖列表,而不是对通配符行为的详尽解释。

2 Windows XP备份软件例如,尊重档案位。

答案2

不是一个好人,但可以工作。

dir | findstr ini..*

dots用作正则表达式,表示任意字符,*从 0 到无限次

唯一的缺点是它不能匹配没有扩展名的文件。

答案3

如果你愿意“目测”,那么使用

目录 /OE *zip*

这将按扩展名对输出进行排序,并可以从视觉上忽略那些带有 .zip 扩展名的文件 - 它们将全部组合在一起。

对于您可以检查、修改等的列表,将输出发送到文件:

dir /OE *zip* > myzip.txt

答案4

与上面一周的解决方案类似:

dir | findstr /e zip.*.[a-z]* 

应该查找包含“zip”、后跟任意数量的字符、后跟“.”和任意数量的字母、后跟文件名结尾的任何内容。我还遗漏了什么吗?

相关内容