【问题标题】:In vbscript, how do I run a batch file or command, with the environment of the current cmd prompt window?在 vbscript 中,如何在当前 cmd 提示窗口的环境下运行批处理文件或命令?
【发布时间】:2011-04-14 09:23:26
【问题描述】:

在vbscript中,如何在当前的cmd提示窗口中运行批处理文件或命令,

无需启动新进程。

例如。根据 script56.chm (显然是 vbscript 帮助) Windows 脚本宿主
运行方法(Windows 脚本宿主)
“在新进程中运行程序”

所以如果我有使用它的代码,例如一个 VBS 文件和一个 BAT 文件。 环境变量 g 的值为 abc g=abc 从那个命令窗口, VBS 文件调用 BAT 文件与 windows 脚本主机运行。 bat 进程设置 g=z。并完成.. vbs 进程完成。 环境变量保持不变,为 g=abc。

我知道 CreateObject("Wscript.Shell").Run "c:\test.bat", 0 使用 1 而不是 0 时会启动一个新窗口。(因为 0 隐藏了窗口)

我该怎么做 - 在调用 vbs 的同一 cmd 环境中从 vbs 运行 bat 文件,因此更改会影响调用它的 cmd 环境吗? -在这两个窗口的情况下,我如何从批处理文件中访问父cmd窗口的环境?

【问题讨论】:

标签: command-line vbscript batch-file cmd environment-variables


【解决方案1】:

如何在当前 cmd 提示窗口中运行批处理文件或命令,而不启动新进程?

我认为你不能;您的 vbscript 在脚本主机引擎(例如 cscript.exewscript.exe)下运行,批处理文件由命令解释器(通常为 cmd.exe)解释。两者都是单独的可执行文件,据我所知,两者都不能作为进程内库使用,因此您无法在同一进程中解释 .vbs 和 .cmd 文件。我也高度怀疑运行 VBScript 的脚本主机引擎是否也可以在其父 cmd.exe 中运行批处理文件 - 我认为您不能将新的批处理文件“注入”到正在运行的 cmd.exe 中。

如何从批处理文件访问父 cmd 窗口的环境?

不仅仅是访问,而是改变——MSDN's "Changing Environment Variables" 对此非常明确:“在进程创建期间更改子进程的环境变量是一个进程可以直接更改另一个进程的环境变量的唯一方法。一个进程永远不能直接更改不是该进程的子进程的另一个进程的环境变量。” 您正在尝试更改 进程的环境,而不是子进程。 (不过,我确实想知道在这句话的上下文中“直接”是什么意思)。

我猜这是出于安全考虑;想象一下,如果任意进程可以(恶意或意外)更改正在运行的进程(例如您的 vbscript 主机引擎进程)的 PATH(或 COMSPEC)环境变量,可能造成的破坏——它可能无法完全启动您的 bat 文件,从而破坏您的程序。

您似乎不走运 - 但​​是,还有许多其他机制可以在进程之间传递信息。以下是在批处理文件和 vbscript 之间进行对话时相当容易实施的一些建议,尽管它绝不是详尽无遗的:

  • 退出代码
  • 写入和解析控制台输出 (stdout) 或临时文件

如果您绝对需要在父 cmd.exe 中设置环境变量(并且绝对需要 vbscript 的中间步骤),那么您可能必须编写一个包装批处理文件,它运行 vbscript,使用它产生的信息,然后设置环境变量;因为 wrapper cmd 正在执行 in 顶级 cmd 进程,所以它将能够在那里更改 env var。

脚注:请注意,您可以在 VBScript 中更改永久系统/用户环境变量(相对于进程环境变量),但如果您尝试创建瞬态;除此之外,这不会影响已经运行的进程(如父 cmd.exe)。

【讨论】:

  • This solution 给出了如何编写建议的包装批处理文件的示例。
  • 我要补充..因为它是一个调用 bat 的 vbs 的 cmd 窗口(它在自己的 cmd 窗口中运行).. 这更多是子进程和祖父进程通信或设置每个进程的问题其他的环境变量 ;-) 但我明白了.. 看起来不可能。有趣的是,在您链接到的那个问题/“解决方案”中看到不同的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
相关资源
最近更新 更多