vbscript include的辦法實(shí)現(xiàn)代碼第1/2頁
2019-10-26 18:02:20
供稿:網(wǎng)友
任何真正實(shí)用的工程開發(fā)都必然是多文件的。但是VBScript創(chuàng)建多文件工程要麻煩一點(diǎn),它對多文件工程,代碼復(fù)用的支持并不是太好。在C/C++工程里,我們已經(jīng)習(xí)慣了通過一個include語句,并且聲明一個函數(shù)原形的方式來使用其它模塊中的函數(shù),這樣一個復(fù)雜的工程可以比較容易地分解成一些小的模塊,以更容易理解和掌握。VBScript中情況有些不同。這與它的設(shè)計目標(biāo)有關(guān)。最初VBScript是用在客戶端腳本,以支持與客戶端作簡單的交互,如簡單的輸入檢查等等。在瀏覽器里顯然沒有辦法支持對另一個文件中的函數(shù)的調(diào)用,你不知道那個文件是否存在,何時存在。那么以本地腳本形式執(zhí)行的VBScript又怎么樣呢?想想看這條命令:cscript.exe yourscript.vbs。顯然一個VBS運(yùn)行在一個進(jìn)程空間里(cscript進(jìn)程),它也沒有辦法得到另一個文件中的函數(shù)。
認(rèn)識到了VBScript的局限性,我們來看如何解決它。
第一種需要可能是需要在一個腳本運(yùn)行的中間直接運(yùn)行另外一個腳本。這可以通過下面的方法來完成:
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "wscript c:/Test.vbs param1", , True
注意到這里我們Test.vbs運(yùn)行在另外一個進(jìn)程空間(wscript進(jìn)程)里,加上執(zhí)行當(dāng)前腳本的WSH,我們一共有兩個進(jìn)程。這是通過WSHShell.Run來做到的,這個方法的原型是:
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
如果時序很重要,你可以在bWaitOnReturn這個參數(shù)中指定主腳本是否要等待被執(zhí)行的腳本運(yùn)行結(jié)束后才能繼續(xù)。
另一點(diǎn)需要注意的地方是strCommand參數(shù),這個參數(shù)是一個復(fù)合體,以空格區(qū)分各個域。如果需要將運(yùn)行參數(shù)傳遞給被調(diào)用的腳本,應(yīng)該在第二個空格后面輸入。下面的例子顯示了如何獲取主腳本傳遞來的參數(shù)。對了,是通過WScript.Arguments來訪問。WSCript還有其他一些有趣的屬性,請記得讀一下文檔。
Set oArgs = WScript.Arguments
For i = 0 to oArgs.Count - 1
WScript.Echo oArgs(i)
Next
關(guān)于參數(shù)解析,這里給出一個Windows 2000 support tools中的一個腳本的例子。你可以復(fù)用這個函數(shù),以解析任何以/ArgName:Value形式指定的參數(shù)。
' searches for and returns the value of a command line argument of the form
' /argName:value from the supplied array. erases the entry in the array so
' that only untouched entries remain.
function GetArgValue(argName, args())
dim a
dim v
dim argNameLength
dim x
dim argCount
dim fullArgName
fullArgName = "/" & argName & ":"
argCount = Ubound(args)
' Get the length of the argname we are looking for
argNameLength = Len(fullArgName)
GetArgValue = "" ' default to nothing
for x = 0 To argCount
if Len(args(x)) >= argNameLength then
a = Mid(args(x), 1, argNameLength)