在批处理文件中打破嵌套for循环

Bal*_*i C 8 batch-file

在遇到这个问题两次后,我想我会在这里发布,看看是否有人知道如何绕过它.

我似乎无法突破嵌套循环使用goto,因为它看起来就像它突破内循环,然后括号不匹配,因为它从未到达内部关闭循环.

我把它缩小到一个非常简单的例子

for %%a in (1,2,3) do (
for %%b in (4,5,6) do (
echo Breaking
goto :BREAK
)
:BREAK
)
Run Code Online (Sandbox Code Playgroud)

这导致错误

) was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

我想可能添加额外的括号可能会解决问题,但除非我知道我要打破,否则它将无法解决,如果这是一个有条件的突破,那就是同样的问题.

是否有任何简单的替代方法可以将内循环分解回外部,即使是使用if's和else's 的条件中断?

小智 10

通过在标签中放置内循环来打破.

for %%a in (1, 2, 3) DO (

   call :innerloop 
)
:innerloop
for %%b in (4, 5, 6) DO (
  if %%b==<something> (
    echo    break
    goto :break
  )

)
:break
Run Code Online (Sandbox Code Playgroud)


Aac*_*ini 5

在中断后,您还可以省略与FOR绑定的控制变量的其余迭代:

@echo off
for %%a in (1,2,3) do (
   echo Top-level loop: %%a
   set break=
   for %%b in (4,5,6) do if not defined break (
      echo Nested loop: %%a-%%b
      if %%b == 4 (
         echo Breaking
         set break=yes
      )
   )
)
Run Code Online (Sandbox Code Playgroud)

此方法将嵌套for-body的代码保留在其原始位置,并允许在for-body内的多个点处轻松设置中断.

安东尼奥