例如,我不仅获得.mid文件,而且还获得.midi文件,我想避免这种情况:
如果可能的话,我想避免在DO语句中使用If条件。
我需要使用这个简单的for循环,因为它不会在子文件夹中循环,这是我想要的行为。
答案 0 :(得分:2)
不幸的是,大多数命令将*.ext
视为以.ext
开头的任何扩展名,因此,如您所见,它也包括*.extn
:
因此,您可以将command-line的第一行更改为:
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
从batch-file中将 %
个字符加倍。
答案 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%会导致带有空格的路径出错,在这种情况下,必须将其用双引号引起来。
。对于带空格的路径也很好。
在这些示例中,在目录中搜索文件不是递归的。