从另一个vbscript运行vbscript

时间:2009-11-06 09:29:06

标签: vbscript

如何让vbscript运行另一个vbscript?

我想象它只有几行代码,但之前没有尝试过这样做,2之间没有任何传递,只需要调用/运行另一个。

例如,正在运行的脚本名为TestScript.vbs,调用/运行的另一个脚本称为Secondscript.vbs,它们都位于C:\ Temp。

由于 标记

8 个答案:

答案 0 :(得分:22)

查看以下内容是否有效

Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")

objShell.Run "TestScript.vbs" 

' Using Set is mandatory
Set objShell = Nothing

答案 1 :(得分:8)

要完成,您可以发送3个这样的参数:

objShell.Run "TestScript.vbs 42 ""an arg containing spaces"" foo" 

答案 2 :(得分:6)

您可以尝试使用Wshshell.Run方法,该方法几乎无法控制您从中开始的过程。或者你可以使用WshShell.Exec方法,它可以让你控制终止它,获得响应,传递更多参数(除了命令行args),获取状态和其他

使用Run(简单方法)

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'变量。 (EX: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 39描述相同 ProgramArgs DITTO
ScriptEngine 您将用于执行脚本的引擎。由于exec方法需要win32应用程序,因此需要指定它。通常是" WScript.exe"或" CScript.exe"。请注意,为了使用stdin和stdout(我们将覆盖更深层次的内容),您必须选择" CScript.exe"。
进程这是引用脚本将启动的程序的Object。它有几个成员,它们是:ExitCode,ProcessID,Status,StdErr,StdIn,StdOut,Terminate。

有关Process Object成员的更多详细信息

  1. ExitCode 这是流程终止时返回的退出代码。
  2. ProcessID 这是分配给流程的ID,每个流程都有唯一的流程ID。
  3. 状态这是一个代码编号,用于指示流程的状态,设置为' -1'当进程终止时。
  4. StdErr 这是表示标准错误流的对象
  5. StdIn 这是表示标准输入流的Object,用于编写其他参数或您要传递给正在调用的脚本的任何内容。 (Process.StdIn.WriteLine "Hello Other Worlds"
  6. StdOut 这是代表标准输出流的对象,它是 READONLY ,因此您可以使用Process.StdOut.ReadLine。这是被调用脚本将接收调用脚本的stdin发送的任何信息的流。如果您使用了stdin的示例,那么StdOut.Readline将返回" Hello Other Worlds"。如果没有要读取的内容,则脚本将在等待输出时挂起。意味着该脚本将显示为无响应
    注意:如果需要,您可以使用ReadReadAll代替ReadLine。如果要读取X个字符数,请使用Read (X)。或ReadAll如果您想要其余的流。
  7. 终止调用此方法以强制终止该过程。
  8. 有关WshShell.Exec的更多信息,请转到Exec Method Windows Scripting Host

答案 3 :(得分:5)

您还可以加载脚本的主体并在同一过程中执行它:

Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile("script2.vbs")
body = ts.ReadAll
ts.Close
Execute body

答案 4 :(得分:2)

试试这个。

Option Explicit

On error resume next
Dim Shellobj
Set Shellobj = CreateObject("WScript.Shell")

Shellobj.Run "Test.vbs" 

Set Shellobj = Nothing

答案 5 :(得分:1)

如果您不想对参数中的空格感到生气并希望使用变量,请尝试以下方法:

objshell.run "cscript ""99 Writelog.vbs"" /r:" &  r & " /f:""" & wscript.scriptname & """ /c:""" & c & ""

,其中

r=123
c="Whatever comment you like"

答案 6 :(得分:1)

我看到下面的代码正常工作。 很简单,但我想没有记录。 其他人使用了“执行”#39;命令?

   Dim body, my_script_file
   Set Fso = CreateObject("Scripting.FileSystemObject")


   Set my_script_file = fso.OpenTextFile(FILE)
   body = my_script_file.ReadAll
    my_script_file.Close

    Execute body

答案 7 :(得分:0)

由于Martin's Answer对我来说根本不起作用(“找不到文件”)而且atesio's Answer不允许调用两个包含重复变量定义的脚本,这里是另一个最终工作的替代方案对我来说:

filepath =  Chr(34) & "C:\...\helloworld.vbs" & Chr(34)
Set objshell= CreateObject("WScript.Shell") 
objshell.Run "wscript " & filepath, , True
Set objshell= Nothing

(Windows 8.1)