如何在不关闭Secure CRT程序及会话的前提下退出运行中的VBScript
解决方案
核心修改逻辑
你当前脚本会关闭SecureCRT的核心原因是ThisIsTheEnd子过程中调用了crt.Quit,该方法的作用就是关闭整个SecureCRT程序。只需要修改终止逻辑,即可实现仅停止脚本、保留程序和会话运行的需求。
具体修改步骤
方案1:主动抛错终止脚本(推荐,最简实现)
SecureCRT的VBScript环境中,未捕获的自定义错误只会终止当前运行的脚本,不会对SecureCRT主程序和已连接的会话产生任何影响,完美适配你的需求。
只需要修改ThisIsTheEnd子过程即可:
Sub ThisIsTheEnd MsgBox"Thank you, come again" ' 删掉原有的crt.Quit语句,新增下面这行 Err.Raise vbObjectError + 1001, "UserAbort", "脚本主动终止" End Sub
修改后,你在任意节点调用ThisIsTheEnd都会立刻终止整个脚本的运行,当前会话保持连接,可直接手动输入其他命令。
方案2:全局标志位控制(无错误提示版本)
如果不希望脚本终止时弹出VBS错误提示,可以新增全局标志位,在每个执行节点判断是否需要终止:
- 在脚本最开头新增全局变量定义
Dim g_bAbortScript g_bAbortScript = False
- 修改
ThisIsTheEnd子过程
Sub ThisIsTheEnd MsgBox"Thank you, come again" g_bAbortScript = True Exit Sub End Sub
- 在每个子过程的每一步执行前、以及全局代码调用子过程后都加标志位判断,比如:
' 全局代码中的判断示例 If Intro =2 Then MsgBox"Operation Cancelled" ThisIsTheEnd If g_bAbortScript Then Exit Sub ' 加这行阻止后续代码执行 End If ' 子过程中的判断示例 Sub Profile If g_bAbortScript Then Exit Sub ' 原有业务代码 ' ... 每一段业务逻辑前都加一次标志位判断 End Sub
额外代码优化建议
你当前脚本中ElseIf SELPROFILE<>1 or 2 or 3 Then的判断逻辑存在语法错误,VBS中该写法永远返回True,建议直接改成Else即可,前面已经覆盖了1、2、3的合法取值,剩下的所有输入都是无效值。
内容的提问来源于stack exchange,提问作者dimitris1780
相关产品推荐
相关产品推荐

