使循环批处理文件中的匹配无效

Invalidate match in batch file for loop

我的目录结构如下:

>C
    >SomeFile
        >.IgnoreMe
            >VitalSystemInfo.eiafj
            >DontTouchThis.ei3rw3j
        >Picture.jpg
        >Pandas.gif
        >Code.cpp
        >AnotherDirectory
            >MoreStuff.bacon

我有一个循环要遍历它

for /R %f in (C:\SomeFile) do echo %f

如何排除 .IgnoreMe

您似乎对 for /r 的语法有点困惑。应该是

for /r "folder" %f in (filemask) do echo %f

如果您将其放入 .bat 脚本中,您还应该双抽百分号。


无论如何,如果您所做的只是 echo 结果,那么排除“.IgnoreMe”的最简单方法是将输出通过管道传输到 find /v ".IgnoreMe".

for /r "c:\SomeFile" %%f in (*) do echo %%f | find /v /i ".IgnoreMe"

另一方面,如果您使用 echo 只是为了演示而不是实际生产,那么您可以使用 for /f 循环执行 dir /s /b 来达到相同的效果。

for /f "delims=" %%f in ('dir /s /b "c:\SomeFile" ^| find /v /i ".IgnoreMe"') do echo %%f

如果你真的想玩得开心,你可以利用 for /d 排除隐藏文件夹这一事实。

attrib +h "c:\SomeFile\.IgnoreMe" >NUL 2>NUL
for /d /r "c:\SomeFile" %%I in (*) do (
    for %%J in ("%%~I\*") do echo "%%~fJ"
)

尽管代码更多,但它比使用 find /v 进行排除更有效(更快)。您经常会发现内部 cmd 函数比 find.exe.

等可执行文件执行得更快