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

为什么在搜索*.tif文件时,Windows命令DIR也会输出*.tiff文件?,windows,batch-file,cmd,Windows,Batch File,Cmd,我想使用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\

我想使用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
在我的驱动器
C:
文件夹
C:\wolter\testversion input\
中查找
TIF
TIF
文件,但是在我的驱动器上,
R:
文件夹中的
R:\wolter\testversion input\
仅通过命令
DIR
找到
TIF
文件,尽管此文件夹也包含
TIF
TIFF
文件

我的目标是只查找
TIF
文件


如何仅查找和处理文件扩展名为
.tif
的文件,而不包括文件扩展名为
.tiff
的文件?

默认情况下,将根据其符合8.3标准的文件名匹配扩展名。您可以禁用8.3命名(将文件名限制为8个字符,可选扩展名限制为3个字符)

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

“%\uuuu AppDir\uuuuu%fsutil.exe”行为集disable8dot3 1
请注意,禁用8.3命名通常可以提高目录枚举性能,特别是在同一目录中存在大量同名文件的情况下。但是,有些应用程序可能无法找到使用长文件名LFN的文件和目录。此外,禁用不会删除已创建的SFN

对于替代方案,您有几个选择

  • 使用结果的元变量展开检查匹配的扩展(最慢):

    对于/F“Delims=“%%G In('Dir/A-D/B/S”R:\wolter\testversion input\*.tif“'),如果“%%~xG”==”.tif”Echo%%G,则执行该操作
    
  • 将结果从
    Dir
    传递到
    findstr.exe
    ,仅过滤以不区分大小写字符串结尾的字符串
    .tif

    For/F“Delims=“%%G In('Dir/A-D/B/S“R:\wolter\testversion input\*.tif”^ |“%\uu AppDir\uuuu%findstr.exe”/EIL.tif”)执行回显%%G
    
  • 使用与精确扩展名匹配的
    where.exe

    For/F“Delims=“%%G In(“%”“%\uuuuu AppDir\uuuu%where.exe”/R“R:\wolter\testversion input”“*.tif”2>NUL“)执行回显%%G
    
    但是,
    where.exe
    ,也与
    %PATHEXT%
    下列出的扩展名匹配,这意味着虽然它可能会忽略
    .tiff
    文件,但它可能会返回扩展名,如
    .tif.com
    .tif.exe
    .tif.bat
    .tif.cmd
    .tif.vbs
    .tif.vbe
    .tif.js
    .tif.jse
    .tif.wsf
    .tif.wsh
    ,以及
    .tif.msc
    。因此,为了增强稳健性,您应该暂时取消定义该变量:

    For/F“Delims=“%%G In(”(设置路径=)和“%\uuuuu AppDir\uuuuu%where.exe”/R“R:\wolter\testversion input”“*.tif“2>NUL”)执行Echo%%G
    

  • 默认情况下,扩展名将根据其符合8.3标准的文件名进行匹配。您可以禁用8.3命名(将文件名限制为8个字符,可选扩展名限制为3个字符)

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

    “%\uuuu AppDir\uuuuu%fsutil.exe”行为集disable8dot3 1
    
    请注意,禁用8.3命名通常可以提高目录枚举性能,特别是在同一目录中存在大量同名文件的情况下。但是,有些应用程序可能无法找到使用长文件名LFN的文件和目录。此外,禁用不会删除已创建的SFN

    对于替代方案,您有几个选择

  • 使用结果的元变量展开检查匹配的扩展(最慢):

    对于/F“Delims=“%%G In('Dir/A-D/B/S”R:\wolter\testversion input\*.tif“'),如果“%%~xG”==”.tif”Echo%%G,则执行该操作
    
  • 将结果从
    Dir
    传递到
    findstr.exe
    ,仅过滤以不区分大小写字符串结尾的字符串
    .tif

    For/F“Delims=“%%G In('Dir/A-D/B/S“R:\wolter\testversion input\*.tif”^ |“%\uu AppDir\uuuu%findstr.exe”/EIL.tif”)执行回显%%G
    
  • 使用与精确扩展名匹配的
    where.exe

    For/F“Delims=“%%G In(“%”“%\uuuuu AppDir\uuuu%where.exe”/R“R:\wolter\testversion input”“*.tif”2>NUL“)执行回显%%G
    
    但是,
    where.exe
    ,也与
    %PATHEXT%
    下列出的扩展名匹配,这意味着虽然它可能会忽略
    .tiff
    文件,但它可能会返回扩展名,如
    .tif.com
    .tif.exe
    .tif.bat
    .tif.cmd
    .tif.vbs
    .tif.vbe
    .tif.js
    .tif.jse
    .tif.wsf
    .tif.wsh
    ,以及
    .tif.msc
    。因此,为了增强稳健性,您应该暂时取消定义该变量:

    For/F“Delims=“%%G In(”(设置路径=)和“%\uuuuu AppDir\uuuuu%where.exe”/R“R:\wolter\testversion input”“*.tif“2>NUL”)执行Echo%%G
    

  • .do if/i“%%~xa”==”.tif“echo%%a
    .do if/i“%%~xa”==”.tif“echo%%a值得一提的是,禁用8.3名称不会擦除已经可用的名称…值得一提的是禁用8.3名称不会擦除已经可用的名称…