代码之家  ›  专栏  ›  技术社区  ›  Ganesh

内环使用批脚本失败后如何退出外环

  •  0
  • Ganesh  · 技术社区  · 5 年前

    如果内部循环在使用批处理命令时出现任何问题,有人能帮我终止整个主程序吗。

    下面是我的代码。

    这里需要从主外循环退出,如果在内部循环中找到的值是X.

    但目前我的代码只从内环退出。

    For %%A in (alpha beta gamma) DO (
       Echo Outer loop %%A
       Call :inner 
    )
    Goto :eof
    
    :inner
    For %%B in (U V W X Y Z) DO (
       if %%B==X ( exit /b 2 )
       Echo    Inner loop    Outer=%%A Inner=%%B
    
    )
    exit /b 1
    

    输出 :仅应如下所示。

    Outer loop alpha
       Inner loop    Outer=alpha Inner=U
       Inner loop    Outer=alpha Inner=V
       Inner loop    Outer=alpha Inner=W
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Stephan    5 年前

    您已经设置了退出代码(ErrRealLead)。就这么做吧:

    setlocal enabledelayedexpansion
    For %%A in (alpha beta gamma) DO (
       Echo Outer loop %%A
       Call :inner 
       if !errorlevel! equ 2 (echo inner loop failed & exit /b 2)
    )
    Goto :eof
    
    :inner
    For %%B in (U V W X Y Z) DO (
       if %%B==X ( exit /b 2 )
       Echo    Inner loop    Outer=%%A Inner=%%B
    
    )
    exit /b 1
    

    Aschipfl建议“ 只需插入 if ErrorLevel 2 goto :EOF 之后 call 命令行 "
    这可能是一个好主意(并避免延迟扩展),但要注意 if errorlevel 2 实际上是指“如果错误级别是2或更高”。如果你的内环只会回来 0 2 ,这绝对是更好的解决方案。当它可能返回更多可能的错误级别时,您必须非常小心地处理它们 if errorlevel . (这就是原因,我选择了 if !errorlevel! 相反)