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

2024-06-19

我想使用 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 finds TIF AND TIFF我的驱动器上的文件C:在文件夹中C:\wolter\testversion-input\与存储的TIF and TIFF文件,但在我的驱动器上R:在文件夹中R:\wolter\testversion-input\通过命令找到DIR only TIF文件,尽管此文件夹还包含TIF and TIFF files.

我的目标是只找到TIF files.

如何仅查找和处理具有文件扩展名的文件.tif排除具有文件扩展名的文件.tiff?


默认情况下,扩展名根据其 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. 将结果传递给Dir通过findstr.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. Use 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, .tif.wsh, and .tif.msc也。因此,为了获得额外的稳健性,您应该暂时取消该变量的定义:

    For /F "Delims=" %%G In ('"(Set PATHEXT=) & "%__AppDir__%where.exe" /R "R:\wolter\testversion-input" "*.tif" 2> NUL"') Do Echo %%G
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐