我该如何运行另一个vbscript脚本?
我想代码只需要几行,但是我以前没有尝试过这样做,两个脚本之间不传递任何东西,只需调用/运行另一个脚本。
例如,要运行的脚本名为TestScript.vbs,另一个要调用/运行的脚本名为Secondscript.vbs,两者都位于C:\Temp中。
谢谢 马克
我该如何运行另一个vbscript脚本?
我想代码只需要几行,但是我以前没有尝试过这样做,两个脚本之间不传递任何东西,只需调用/运行另一个脚本。
例如,要运行的脚本名为TestScript.vbs,另一个要调用/运行的脚本名为Secondscript.vbs,两者都位于C:\Temp中。
谢谢 马克
看看以下内容是否有效
Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "TestScript.vbs"
' Using Set is mandatory
Set objShell = Nothing
.vbs
与Windows脚本宿主(cscript.exe
或wscript.exe
)相关联。 - user692942你可以尝试使用Wshshell.Run方法启动进程,但这种方法对进程的控制很少。或者你可以使用WshShell.Exec方法,它将使你有能力终止进程、获取响应、传递更多参数(而不仅仅是命令行参数)、获取状态以及其他操作。
使用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是一个整数,用于确定窗口的显示方式。有关更多信息,请参见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的描述相同。
ProgramArgs也是如此。
ScriptEngine执行脚本所使用的引擎。由于exec方法需要win32应用程序,因此您需要指定它。通常是“WScript.exe”或“CScript.exe”。请注意,为了使用stdin和stdout(稍后我们将介绍这些内容),您必须选择“CScript.exe”。
Process是引用脚本将启动的程序的对象。它有几个成员,它们是: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个参数:
objShell.Run "TestScript.vbs 42 ""an arg containing spaces"" foo"
您还可以加载脚本的主体,并在同一进程中执行它:
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile("script2.vbs")
body = ts.ReadAll
ts.Close
Execute body
如果你不想因为参数中的空格而感到烦恼,同时也想使用变量,请尝试以下方法:
objshell.run "cscript ""99 Writelog.vbs"" /r:" & r & " /f:""" & wscript.scriptname & """ /c:""" & c & ""
where
r=123
c="Whatever comment you like"
我看到下面的代码在工作。 很简单,但我猜没有记录。 还有其他人使用过“Execute”命令吗?
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
试一试。
Option Explicit
On error resume next
Dim Shellobj
Set Shellobj = CreateObject("WScript.Shell")
Shellobj.Run "Test.vbs"
Set Shellobj = Nothing
CreateObject("WScript.Shell").Run "Your-VBScript-Here"
- user9556248