为什么Windows命令DIR在搜索* .tif文件时也会输出* .tiff文件?

问题描述

我想使用Windows命令DIR来仅查找TIF文件,即扩展名为.tif文件。因此,我使用以下小批处理文件

for /f "delims=" %%a IN ('dir /b /a-d /s "C:\wolter\testversion-input\*.tif"') do echo %%a

for /f "delims=" %%a IN ('dir /b /a-d /s "R:\wolter\testversion-input\*.tif"') do echo %%a

现在,我想知道此命令是否还能找到TIFF文件,即扩展名为.tiff文件

因此,我进行了一些测试,发现命令DIR在驱动器TIF文件夹{中找到了TIFF AND C:文件{1}}包含已存储的C:\wolter\testversion-input\TIF文件,但是在命令TIFF上只有{{1} }文件,尽管此文件夹还包含R:R:\wolter\testversion-input\文件

我的目标是仅查找DIR文件

如何仅查找和处理扩展名为TIF文件,而排除扩展名为TIF文件

解决方法

默认情况下,扩展名将根据其8.3兼容文件名进行匹配。您可以禁用8.3命名(将文件名限制为八个字符,可选扩展名限制为三个字符)

要对您的NTFS分区执行此操作,请打开“命令提示符”窗口“以管理员身份运行”,然后输入:

"%__AppDir__%fsutil.exe" behavior set disable8dot3 1

请注意,禁用8.3命名通常可以提高目录枚举性能,尤其是在同一目录中存在大量相似名称的文件的情况下。但是,某些应用程序可能无法找到使用长文件名LFN的文件和目录。禁用也不会删除已经创建的SFN。

对于替代方法,您有一些选择。

  1. 使用结果的元变量扩展来检查匹配的扩展(最慢)

    For /F "Delims=" %%G In ('Dir /A-D /B /S "R:\wolter\testversion-input\*.tif"') Do If "%%~xG" == ".tif" Echo %%G
    
  2. Dirfindstr.exe传递结果,以仅过滤以不区分大小写的字符串.tif结尾的结果:

    For /F "Delims=" %%G In ('Dir /A-D /B /S "R:\wolter\testversion-input\*.tif" ^| "%__AppDir__%findstr.exe" /EIL ".tif"') Do Echo %%G
    
  3. 使用where.exe来匹配确切的扩展名:

    For /F "Delims=" %%G In ('""%__AppDir__%where.exe" /R "R:\wolter\testversion-input" "*.tif" 2> NUL"') Do Echo %%G
    

    不过,where.exe也与%PATHEXT%下列出的扩展名匹配,这意味着尽管它可能会省略您的.tiff文件,但可能会返回.tif.com之类的扩展名, .tif.exe.tif.bat.tif.cmd.tif.vbs.tif.vbe.tif.js.tif.jse.tif.wsf,{{ 1}}和.tif.wsh。因此,为了增强鲁棒性,您应该暂时取消定义该变量:

    .tif.msc