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

标签 windows vbscript cmd

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

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

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

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

最佳答案

我相信您可以简单地将 &&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^"

关于windows - 如何从其托管的脚本中关闭父 cmd 控制台窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100629/

相关文章:

vbscript - 如何用vbscript播放Windows Player中的所有歌曲?

windows - WMIC命令批量输出非UTF-8文本文件

node.js - 跨平台方式获取目录列表并在每个目录中运行 npm install

batch-file - CMD/batch 获取子文件夹的基本名称

windows - Windows 的 CMake 安装目标 bin 等效项

windows - 在 Windows Batch 中打印文本文件的特定行

sql-server - 从存储过程经典asp返回一个值和一个结果集

ruby-on-rails - Windows 上 Rails 的延迟工作?

C++ 指向字节数组优化的指针

java - Visual Basic 或 VBScript 作为 Java 脚本引擎