如何从托管的脚本中关闭父cmd控制台窗口?

时间:2013-09-30 17:52:34

标签: windows vbscript cmd

我在注册表中使用以下命令在Windows资源管理器的上下文菜单中本地运行vbscript:

cmd /T:1F /K "cscript.exe //nologo "C:\Some Path\Some Folder\MyScript.vbs" "%1""

我正在使用/K开关有两个原因:在脚本错误的情况下保持控制台窗口打开,并更改控制台的前后颜色(这实际上是使用{{1切换,但由于某种原因我不明白,当使用/T开关时,颜色会恢复为默认值。

我的问题:如何在正常执行结束时关闭主机控制台窗口(附加到“cmd.exe”进程)? /C显然会返回到控制台提示符。我考虑过基于CommandLine的Win32_Process的WMI查询,但是如果使用相同的参数(即文件)多次调用脚本,那么这不起作用。有没有办法获得最顶层的父进程的id,例如,我可以用它来终止?

1 个答案:

答案 0 :(得分:5)

我相信您只需将&&exit附加到命令字符串:

cmd /T:1F /K "cscript.exe //nologo "C:\Some Path\Some Folder\MyScript.vbs" "%1"&&exit"

请注意,由于附加的引号,引用的参数不会被引用。你可能会更好:

cmd /T:1F /K ^"cscript.exe //nologo "C:\Some Path\Some Folder\MyScript.vbs" "%~1"^&&exit^"


更新

脚本引擎在运行时错误时不设置退出代码 - 它将该任务留给脚本编写者。如果存在语法错误,它会设置正退出代码。这是一个非常不幸的设计。

我认为最简单的方法是修改您的VBS脚本,以便在成功时始终以负值退出:WScript.Quit -1。然后,只有在退出代码为负数时,才能有条件地退出控制台。

cmd /T:1F /K ^"cscript.exe //nologo "C:\Some Path\Some Folder\MyScript.vbs" "%~1"^||if not errorlevel 0 exit^"