您可以尝试使用 Wshshell.Run 方法,该方法使您几乎无法控制从它开始的过程。或者您可以使用 WshShell.Exec 方法,它可以让您控制终止它、获取响应、传递更多参数(命令行参数除外)、获取状态等
使用运行(简单方法)
Dim ProgramPath, WshShell, ProgramArgs, WaitOnReturn,intWindowStyle
Set WshShell=CreateObject ("WScript.Shell")
ProgramPath="c:\test run script.vbs"
ProgramArgs="/hello /world"
intWindowStyle=1
WaitOnReturn=True
WshShell.Run Chr (34) & ProgramPath & Chr (34) & Space (1) & ProgramArgs,intWindowStyle, WaitOnReturn
ProgramPath 是您要运行的脚本的完整路径
ProgramArgs 是您要传递给脚本的参数。 (注意:参数由空格分隔,如果您想使用包含空格的参数,则必须将该参数括在引号中 [安全的方法是使用 CHR (34) 示例ProgramArgs= chr (34) & "/Hello World" & chr (34)])
IntWindowStyle 是确定窗口显示方式的整数。关于此和 WaitOnReturn 的更多信息可以在这里找到WshShell.Run Method
WaitOnReturn 如果为 true,则脚本将暂停直到命令终止,如果为 false,则脚本将在启动命令后立即继续。
注意:Run 方法可以返回退出代码,但您必须将 WaitOnReturn 设置为 True,并将“WshShell.Run”分配给一个变量。 (例如:ExitCode=WshShell.Run (Command,intWindowStyle,True))
使用 EXEC(高级方法)
Dim ProgramPath, WshShell, ProgramArgs, Process, ScriptEngine
Set WshShell=CreateObject ("WScript.Shell")
ProgramPath="c:\test run script.vbs"
ProgramArgs="/hello /world"
ScriptEngine="CScript.exe"
Set Process=WshShell.Exec (ScriptEngine & space (1) & Chr(34) & ProgramPath & Chr (34) & Space (1) & ProgramArgs)
Do While Process.Status=0
'Currently Waiting on the program to finish execution.
WScript.Sleep 300
Loop
ProgramPath 与 Run 相同 READ RUN'S DESCRIPTION
ProgramArgs DITTO
ScriptEngine 您将用于执行脚本的引擎.由于 exec 方法需要一个 win32 应用程序,因此您需要指定它。通常是“WScript.exe”或“CScript.exe”。请注意,为了使用标准输入和标准输出(我们将在后面介绍这些内容),您必须选择“CScript.exe”。
Process 这是引用程序脚本将启动。它有几个成员,它们是:ExitCode、ProcessID、Status、StdErr、StdIn、StdOut、Terminate。
更多关于 Process Object 成员的细节
-
ExitCode 这是进程终止时返回的退出代码。
-
ProcessID 这是分配给进程的 ID,每个进程都有一个唯一的 processID。
-
Status 这是一个表示进程状态的代码编号,当进程终止时它被设置为“-1”。
-
StdErr 这是代表标准错误流的对象
-
StdIn 这是代表标准输入流的对象,用它来编写附加参数或任何你想传递给你正在调用的脚本的东西。 (
Process.StdIn.WriteLine "Hello Other Worlds")
-
StdOut 这是代表标准输出流的对象,它是READONLY,因此您可以使用
Process.StdOut.ReadLine。这是被调用脚本将接收调用脚本的标准输入发送的任何信息的流。如果您使用标准输入的示例,则 StdOut.Readline 将返回“Hello Other Worlds”。如果没有可读取的内容,则脚本将在等待输出时挂起。这意味着脚本将显示为无响应
注意:如果需要,您可以使用 Read 或 ReadAll 而不是 ReadLine。如果您想读取 X 个字符,请使用 Read (X)。或者ReadAll,如果你想要剩下的信息流。
-
终止调用该方法强制终止进程。
有关 WshShell.Exec 的更多信息,请访问 Exec Method Windows Scripting Host