如何让vbscript运行另一个vbscript?
我想象它只有几行代码,但之前没有尝试过这样做,2之间没有任何传递,只需要调用/运行另一个。
例如,正在运行的脚本名为TestScript.vbs,调用/运行的另一个脚本称为Secondscript.vbs,它们都位于C:\ Temp。
由于 标记
答案 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成员的更多详细信息
Process.StdIn.WriteLine "Hello Other Worlds"
)Process.StdOut.ReadLine
。这是被调用脚本将接收调用脚本的stdin发送的任何信息的流。如果您使用了stdin的示例,那么StdOut.Readline将返回" Hello Other Worlds"。如果没有要读取的内容,则脚本将在等待输出时挂起。意味着该脚本将显示为无响应 Read
或ReadAll
代替ReadLine
。如果要读取X个字符数,请使用Read (X)
。或ReadAll
如果您想要其余的流。 有关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)