2013-07-02 155 views
2

我使用下面的腳本調用另一個腳本.The問題是,我要通過我的WScript.Arguments到第二腳本,我打電話。可有人檢索參數請告訴我該怎麼做。從另一個VBScript文件傳遞參數調用VBScript中

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

objShell.Run "TestScript.vbs"  

Set objShell = Nothing 

回答

6

你需要適當引用的參數來構建你的參數列表。您還需要區分命名參數和未命名參數。至少,所有含有空格的參數都必須放在雙引號之間。它沒有傷害,但是,簡單地引用的所有參數,所以你可以做這樣的事情:

Function qq(str) 
    qq = Chr(34) & str & Chr(34) 
End Function 

arglist = "" 
With WScript.Arguments 
    For Each arg In .Named 
    arglist = arglist & " /" & arg & ":" & qq(.Named(arg)) 
    Next 
    For Each arg In .Unnamed 
    arglist = arglist & " " & qq(arg) 
    Next 
End With 

CreateObject("WScript.Shell").Run "TestScript.vbs " & Trim(arglist), 0, True 
+0

超級cool..Thanks傢伙UR幫助 – user505210

+0

我就行'statement'的'預計年底這個錯誤的arglist = arglist中和「」 QQ(ARG)',就在'QQ的第一個字符之前(ARG) ' – user

+0

@user我的不好。 ''''''和'qq(arg)'之間應該有一個&符號。固定。 –

1

用途:

objShell.Run "TestScript.vbs arg1 arg2" 

如果其中一個參數包含空格,那麼你就需要在報價中嵌入這些,大概就是這個樣子:

objShell.Run "TestScript.vbs arg1 arg2 ""this is three""" 

,或者它可以接受撇號(我最近沒有嘗試過)。

+0

在我的第一個劇本我有這樣的語句設置objArgs = WScript.Arguments,我想通過這個objArgs作爲參數傳遞給下一script..It只是將objArgs作爲字符串傳遞給下一個腳本,而不是作爲具有值的對象。 – user505210

+0

@ user505210 - 你不能傳遞對象作爲參數與.RUN或.Exec創建的進程;你必須發送所有想要的信息/轉換爲字符串(不要硬,因爲WScript.Arguments(.Named)是一個字符串列表)。 –

+0

使用'.Run'時傳遞的參數基本上只是字符串,但不能通過這個簡單的命令行方法傳遞一個對象 - 事件,儘管接收腳本將它們存儲在一個對象中:參數。如果你真的想通過腳本之間的一個對象,你就必須序列化和從一個單獨的文件解序列他們 - 這是不是使用VBScript一個簡單的過程。我建議,與Ekkehard一樣,你只是將字符串/值傳遞給第二個腳本。 –

0

我找到了答案有點混亂,所以這裏是我的,這在我的腦海裏更簡單地顯示它。另一個答案沒有錯,只是不同(略)。

Set shell = CreateObject("WScript.Shell") 
shell.CurrentDirectory = "C:\some\path\" 
x = "testing" 
shell.Run "test1.vbs " & x 

C:\some\path\test1.vbs文件:

在test.vbs文件

x = WScript.Arguments.Item(0) 
msgbox x 

所得從test.vbs文件消息框,傳遞給test1.vbs文件:

testing