Windows 如果内部循环使用批处理脚本失败,如何从外部循环退出
如果内部循环使用批处理命令出现任何问题,有人能帮助我终止整个主程序吗 下面是我的代码。 这里,若在内环中找到的值是X,我需要退出主外环 但目前我的代码只能从内部循环中退出Windows 如果内部循环使用批处理脚本失败,如何从外部循环退出,windows,batch-file,cmd,Windows,Batch File,Cmd,如果内部循环使用批处理命令出现任何问题,有人能帮助我终止整个主程序吗 下面是我的代码。 这里,若在内环中找到的值是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 In
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
您已经设置了退出代码(errorlevel)。只要对它作出反应:
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
”这可能是一个好主意(并避免延迟扩展),但请注意,
if errorlevel 2
实际上意味着“if errorlevel为2或更高”。如果您的内部循环只返回0
或2
,那肯定是更好的解决方案。当它可能返回更多可能的错误级别时,您必须使用if errorlevel
极其小心地处理它们。(这就是原因,我选择了if!errorlevel!
而不是)只要在调用
命令行之后插入if errorlevel 2 goto:EOF
…谢谢Stephen,我有一个疑问,假设我有多个内部函数,那么我需要为每个内部循环维护errorlevel吗?例如,Call:inner1 Call:inner2 Call:inner3如果任何一个错误级别失败,如何使用单个错误级别限制执行?我不太明白。你想在一个内部循环失败后立即中断外部循环,还是想执行所有内部循环而不管它们是否成功,然后才知道其中一个是否失败?如果有多个内部循环,并且任何一个内部循环失败,我必须中断外部循环。只要重复两行调用…
和如果…
用于每个内部循环。(必要时,您可以将退出
更改为转到:错误
;当然,还可以在某个位置添加标签:错误
,以在出现任何“内环错误”时执行操作)(顺便说一句:任何goto
都将中断所有循环。因此如果%%B==X goto:ExitLoops
在内部循环中,将取消所有当前运行的循环,并跳转到标签ExitLoops
(而不是返回到外部循环)