循环浏览带有扩展名的文件也会占用下一个字母

时间:2019-05-31 23:28:00

标签: batch-file command-line

例如,我不仅获得.mid文件,而且还获得.midi文件,我想避免这种情况:

enter image description here

如果可能的话,我想避免在DO语句中使用If条件。
我需要使用这个简单的for循环,因为它不会在子文件夹中循环,这是我想要的行为。

3 个答案:

答案 0 :(得分:2)

不幸的是,大多数命令将*.ext视为以.ext开头的任何扩展名,因此,如您所见,它也包括*.extn

因此,您可以将的第一行更改为:

FOR %i IN ('Dir /B/A-D *.mid^|FindStr /IEC:".mid"') DO @ECHO %~nxi

或者:

FOR %i IN ("*.mid") DO @IF /I "%~xi"  == ".mid" ECHO %~nxi

您还可以使用正确处理扩展名的命令 where.exe

For /F Delims^=^ EOL^= %A In ('Where .:*.mid 2^>Nul') Do @Echo %~nxA

中将 % 个字符加倍。

答案 1 :(得分:2)

for /f %i in ( ' dir /b *.mid^|findstr /e /i /L /c:".mid" ' ) do @echo %i

不简单,但避免使用if语句。由dir过滤的简单findstr,以找到/e/i不区分大小写的/L文字/c:常量字符串结尾的行。

“甚至不”表示您实际上要扫描子目录。为此,请将/s开关添加到dir命令。还建议将/on添加到dir命令中以适应FAT文件系统。

答案 2 :(得分:0)

这是解决方案:

FOR /F "delims= eol=" %i IN ('WHERE .:*.mid 2^> NUL') DO @ECHO %~nxi

有关更多文件:

FOR /F "delims= eol=" %i IN ('WHERE .:*.mid .:*.midi 2^> NUL') DO @ECHO %~nxi

或(等效语法)

FOR /F "delims= eol=" %i IN ('WHERE "%CD%:*.mid" "%CD%:*.midi" 2^> NUL') DO @ECHO %~nxi

有关更多文件和路径:

FOR /F "delims= eol=" %i IN ('WHERE "%Path1%:*.exe" "%Path2%:*.dll" 2^> NUL') DO @ECHO %~nxi

%CD%或。表示“当前目录”,但:
%CD%会导致带有空格的路径出错,在这种情况下,必须将其用双引号引起来。 。对于带空格的路径也很好。

在这些示例中,在目录中搜索文件不是递归的。