加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何从’call’ed例程中终止Windows批处理文件?

发布时间:2020-12-14 04:18:13 所属栏目:Windows 来源:网络整理
导读:我有一个 Windows批处理文件,里面有几个子程序,如下所示: call :agoto :eof:acall :bgoto :eof:b:: How do I directly exit here from here?goto :eof 我在Vista的cmd窗口中运行它. 如果我在批处理文件中的某处检测到错误,我希望它以非零错误级别退出.我可
我有一个 Windows批处理文件,里面有几个子程序,如下所示:
call :a
goto :eof

:a
call :b
goto :eof

:b
:: How do I directly exit here from here?
goto :eof

我在Vista的cmd窗口中运行它.
如果我在批处理文件中的某处检测到错误,我希望它以非零错误级别退出.我可以在例程中编写任何内容:b将导致批处理文件像这样终止.

>我试过’退出’,关闭整个cmd窗口.那不是我想要的.
>我试过’退出/ B 1′.这将返回上一个例程.要在每次“调用”之后使用此方案,我必须在每次“调用”之后仔细写入“if errorlevel 1 exit / B 1”以将错误传递回调用堆栈.我不想在每次通话后写这一行.

这篇文章很有意思,但没有其他选择的行为符合我的要求. http://www.computerhope.com/exithlp.htm

还有另一种方式吗?

谢谢.

您可以像这样调用子例程:
call :b||exit /b 1

这相当于

call :b
if errorlevel 1 exit /b 1

它略短,为您节省一条线,但它仍然不理想,我同意.

除此之外,我没有看到任何方式.

编辑:好的,我有办法,但它是Pure Evil?.

错误使用最大堆栈大小,因此错误递归限制,我们创建了另一个子程序,通过递归调用自身来简化堆栈:

@echo off
echo Calling a
call :a
echo Called a
goto :eof
:a
echo Calling b
call :b
echo Called b
goto :eof
:b
echo Trying to exit
call :exit
goto :eof
:exit
call :exit

但是,这会导致令人讨厌的错误消息

******  B A T C H   R E C U R S I O N  exceeds STACK limits ******
Recursion Count=704,Stack Usage=90 percent
******       B A T C H   PROCESSING IS   A B O R T E D      ******

此外,我的机器需要大约2秒钟.

您可以通过更改call语句来抑制错误消息,如下所示:

call :exit >nul 2>&1

它会将想要输出的所有内容重定向到一个很大的空白.

但考虑到填充堆栈所需的时间,我认为第一个变体会更容易.

我还在考虑使用第二个批处理文件,在没有调用的情况下运行时基本上会停止第一个批处理文件.但不知何故,这对子程序不起作用.展开调用堆栈似乎仍然存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读