问题描述
我想使用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。
对于替代方法,您有一些选择。
-
使用结果的元变量扩展来检查匹配的扩展(最慢):
For /F "Delims=" %%G In ('Dir /A-D /B /S "R:\wolter\testversion-input\*.tif"') Do If "%%~xG" == ".tif" Echo %%G
-
从
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
-
使用
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