2009-11-06 109 views
15

如何獲得一個vbscript來運行另一個vbscript?從另一個vbscript運行一個vbscript

我想象它只有幾行代碼,但沒有嘗試過這樣做,之間沒有任何東西被傳遞,只需要調用/運行其他。

例如,正在運行的腳本稱爲TestScript.vbs,它調用/運行的另一個腳本將被稱爲Secondscript.vbs,它們都位於C:\ Temp中。

感謝 馬克

+0

你可以通過使用.bat – ukanth 2009-11-06 09:30:21

+0

我知道它可以用a。蝙蝠,但沒有一種方法可以在實際的腳本中做到這一點? – markdigi 2009-11-06 10:26:27

回答

20

看看下面的作品

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

objShell.Run "TestScript.vbs" 

' Using Set is mandatory 
Set objShell = Nothing 
+0

試過這個,變量未定義,我是否需要爲它添加一個聲明? – markdigi 2009-11-06 10:28:34

+0

忽略我原來的回覆 - 這是垃圾。希望以上內容能夠解決您的問題。 – Martin 2009-11-06 10:55:32

7

剛剛完成,你可以發送3個參數是這樣的:

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

謝謝,blairxy--那是我尋找的信息。 – Smandoli 2012-07-05 15:39:59

5

您也可以加載的身體腳本並在相同的過程中執行它:

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

如果你不想生氣,在參數空間,並希望使用變量試試這個:

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

其中

r=123 
c="Whatever comment you like" 
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)

1

我看到下面的代碼工作。 很簡單,但我想不記錄。 其他人使用'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 
6

您可以嘗試使用Wshshell.Run方法,讓你你開始使用它的過程中難以控制。或者你可以使用WshShell.Exec方法,這將給你控制終止它,得到的響應,更多參數傳遞(除命令行ARGS等),獲取狀態,和其他

要使用運行(簡單方法)

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一樣運行讀取運行的描述
ProgramArgs DITTO
的ScriptEngine您將使用的引擎用於執行腳本。由於exec方法需要一個win32應用程序,所以你需要指定這個。通常是「WScript.exe」或「CScript.exe」
進程這是引用腳本將啓動的程序的對象。它有幾個成員,它們是:ExitCode,ProcessID,Status,StdErr,StdIn,StdOut,Terminate。

更多詳細信息有關過程對象

  1. 的ExitCode這是在進程終止時,其返回的退出代碼的成員。
  2. ProcessID這是分配給進程的ID,每個進程都有唯一的processID。
  3. 狀態這是表示進程狀態的代碼號,當進程終止時它被設置爲'-1'。
  4. 標準錯誤這是表示標準錯誤流
  5. 標準輸入這是表示標準輸入流,用它來編寫額外的參數或任何你想傳遞給腳本你的對象對象運行。 (Process.StdIn.WriteLine "Hello Other Worlds"
  6. 的StdOut這是表示標準輸出流的對象,這是READONLY所以你可以使用Process.StdOut.ReadLine如果沒有要讀腳本將掛在等待的輸出。這意味着腳本將顯示爲未響應
  7. 終止調用此方法強制終止進程。

有關WshShell.Exec更多信息,請Exec Method Windows Scripting Host

2

試試這個。

Option Explicit 

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

Shellobj.Run "Test.vbs" 

Set Shellobj = Nothing