我想使用 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。
对于替代方案,您有几种选择。
-
使用结果的元变量扩展来检查匹配的扩展(最慢):
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
-
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(使用前将#替换为@)