批处理文件 – Windows批处理:无法从被调用的子例程退出 – 即
我有一个子程序,调用它来检查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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么R data.table不支持Windows上的非ASCII键
- .net – 寻找SC.exe实用程序的API,以及有关自我更新Windows
- windows – “作为服务登录”实际上意味着什么?
- arrays – 使用Dart将Uint8List转换为String
- windows-8 – Windows8:设备标识符
- windows – 退出域控制器的最佳实践,该域控制器也是DNS服务
- windows-runtime – WinRt. UnhandledException处理程序. S
- windows – 如何在DOS中进行字符串比较条件?
- windows – 带有Indy组件的SendEmail
- 如何在Windows任务栏中删除多个emacs实例