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

批处理文件 – Windows批处理:无法从被调用的子例程退出 – 即

发布时间:2020-12-14 03:58:10 所属栏目:Windows 来源:网络整理
导读:我有一个子程序,调用它来检查ERRORLEVEL. 子例程调用其他子例程来记录消息,发送电子邮件,然后退出脚本.它转到:END,然后在调用后返回到stmt @echo offecho starting...call:checkTimeecho +++ after CTGOTO:END:checkTimeecho the time is %TIME%goto:ENDgot
我有一个子程序,调用它来检查ERRORLEVEL.
子例程调用其他子例程来记录消息,发送电子邮件,然后退出脚本.它转到:END,然后在调用后返回到stmt

@echo off
echo starting...
call:checkTime
echo +++ after CT
GOTO:END

:checkTime
echo the time is %TIME%
goto:END
goto:EOF

:END

解决方法

问题措辞不多,但我想我明白了(特别是如果我专注于标题)

我对你的问题的解释:

在批处理文件的各个位置,检查ERRORLEVEL.每当检测到错误时,您都希望执行一些标准错误处理,然后退出批处理脚本.您试图创建一个子例程来执行标准处理,但子例程返回给调用者而不是退出脚本.您的问题是,如何强制您的错误处理例程退出而不是返回调用者?

回答:

如果在被调用的子例程中没有发生任何错误检测,那么您可以简单地转到错误处理器而不是CALLing它.

如果您希望能够调用例程并从另一个调用的例程中退出,那么您可以继续使用CALL语句,但是使用EXIT而不是GOTO:EOF或GOTO:END来终止错误例程.

回复评论的附录

是的,GOTO无法传递参数,CALLed例程将始终返回给调用者(除非例程以EXIT结束)

是的,EXIT将关闭当前的CMD shell,这通常会关闭控制台窗口.

但是……您可以让批处理文件通过另一个CMD shell执行,这样EXIT就不会关闭窗口!

我看到的唯一潜在缺点是,一旦批处理文件(以及运行它的CMD shell)终止,环境的更改将会丢失.这对您来说可能是也可能不是问题.

@echo off
if "%~1" equ "_GO_" goto :main
cmd /c ^""%~f0" _GO_ %*^"
exit /b

:main
shift /1
echo %%1=%1  %%2=%2

echo before call
call :exitRoutine
:: should not get here
echo after call
exit /b

:exitRoutine
echo exiting batch file witin exitRoutine
exit

(编辑:李大同)

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

    推荐文章
      热点阅读