主頁(yè) > 知識(shí)庫(kù) > vbscript include的辦法實(shí)現(xiàn)代碼第1/2頁(yè)

vbscript include的辦法實(shí)現(xiàn)代碼第1/2頁(yè)

熱門標(biāo)簽:鐵路電話系統(tǒng) 智能手機(jī) 美圖手機(jī) 銀行業(yè)務(wù) 呼叫中心市場(chǎng)需求 檢查注冊(cè)表項(xiàng) 服務(wù)器配置 網(wǎng)站文章發(fā)布
任何真正實(shí)用的工程開發(fā)都必然是多文件的。但是VBScript創(chuàng)建多文件工程要麻煩一點(diǎn),它對(duì)多文件工程,代碼復(fù)用的支持并不是太好。在C/C++工程里,我們已經(jīng)習(xí)慣了通過一個(gè)include語句,并且聲明一個(gè)函數(shù)原形的方式來使用其它模塊中的函數(shù),這樣一個(gè)復(fù)雜的工程可以比較容易地分解成一些小的模塊,以更容易理解和掌握。VBScript中情況有些不同。這與它的設(shè)計(jì)目標(biāo)有關(guān)。最初VBScript是用在客戶端腳本,以支持與客戶端作簡(jiǎn)單的交互,如簡(jiǎn)單的輸入檢查等等。在瀏覽器里顯然沒有辦法支持對(duì)另一個(gè)文件中的函數(shù)的調(diào)用,你不知道那個(gè)文件是否存在,何時(shí)存在。那么以本地腳本形式執(zhí)行的VBScript又怎么樣呢?想想看這條命令:cscript.exe yourscript.vbs。顯然一個(gè)VBS運(yùn)行在一個(gè)進(jìn)程空間里(cscript進(jìn)程),它也沒有辦法得到另一個(gè)文件中的函數(shù)。

認(rèn)識(shí)到了VBScript的局限性,我們來看如何解決它。

第一種需要可能是需要在一個(gè)腳本運(yùn)行的中間直接運(yùn)行另外一個(gè)腳本。這可以通過下面的方法來完成:

Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "wscript c:\Test.vbs param1", , True

注意到這里我們Test.vbs運(yùn)行在另外一個(gè)進(jìn)程空間(wscript進(jìn)程)里,加上執(zhí)行當(dāng)前腳本的WSH,我們一共有兩個(gè)進(jìn)程。這是通過WSHShell.Run來做到的,這個(gè)方法的原型是:

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

如果時(shí)序很重要,你可以在bWaitOnReturn這個(gè)參數(shù)中指定主腳本是否要等待被執(zhí)行的腳本運(yùn)行結(jié)束后才能繼續(xù)。

另一點(diǎn)需要注意的地方是strCommand參數(shù),這個(gè)參數(shù)是一個(gè)復(fù)合體,以空格區(qū)分各個(gè)域。如果需要將運(yùn)行參數(shù)傳遞給被調(diào)用的腳本,應(yīng)該在第二個(gè)空格后面輸入。下面的例子顯示了如何獲取主腳本傳遞來的參數(shù)。對(duì)了,是通過WScript.Arguments來訪問。WSCript還有其他一些有趣的屬性,請(qǐng)記得讀一下文檔。

Set oArgs = WScript.Arguments
For i = 0 to oArgs.Count - 1
WScript.Echo oArgs(i)
Next

關(guān)于參數(shù)解析,這里給出一個(gè)Windows 2000 support tools中的一個(gè)腳本的例子。你可以復(fù)用這個(gè)函數(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)
if UCase(a) = UCase(fullArgName) then

' erase it so we can look for unknown args later
v = args(x)
args(x) = ""

if Len(v) > argNameLength then
GetArgValue = Mid(v, argNameLength + 1)
exit function
else
GetArgValue = ""
exit function
end if
end if
end if
next
end function

更多的時(shí)候,我們需要在腳本之間共享變量,以及相互調(diào)用函數(shù)。我們想要得到C/C++中那樣的便利性:通過一個(gè)Include聲明,就可以將另外一個(gè)模塊中的函數(shù)和變量引入到當(dāng)前的模塊中。在VBScript中,可以通過ExecuteGlobal來實(shí)現(xiàn):

Sub Include(sInstFile)
Dim oFSO, f, s
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set f = oFSO.OpenTextFile(sInstFile)
s = f.ReadAll
f.Close
ExecuteGlobal s
End Sub

這樣,在腳本中加上這樣一句調(diào)用:Include "mylib.vbs",就可以使用mylib.vbs中聲明的全局變量和函數(shù)了!注意這里的函數(shù)ExecuteGlobal有一個(gè)類似的函數(shù)Execute,這里如果使用Execute的話,就達(dá)不到我們想要的效果。因?yàn)橥ㄟ^Execute暴露的名字,其作用范圍局限于Execute所處的級(jí)別,在這里,也就是在函數(shù)Include內(nèi)部。這幾乎肯定不是你想要的結(jié)果。

還有別的方法嗎?是的。VBScript內(nèi)在的支持COM方式。如果可以將你的腳本編譯成一個(gè)COM組件,就當(dāng)然可以在別的腳本中調(diào)用組件中的方法了。恰好,MS提供了工具Script Component Wizard來幫助我們將一些VBScript文件打包成一個(gè)組件,并提供注冊(cè)方法。

現(xiàn)在我們來學(xué)一些新的方法。我的意思是,這些方法是僅為WSH支持的,你可能以前并沒有遇見過。WSH支持一種叫*.wsf的文件,這個(gè)文件本身是XML格式的,通過該文件可以將你的VBScript腳本,以及其它類型的腳本,比如batch,perl等等組裝在一起,交給WSH來執(zhí)行。這方面文檔還算詳細(xì),這里就不多介紹了。

這一節(jié)里,介紹了由單個(gè)腳本文件組裝成一個(gè)較大的工程的四種方法,通過運(yùn)用這些方法,你可以建立自己的常用函數(shù)庫(kù),在各個(gè)腳本之間共享變量和傳遞數(shù)據(jù),等等。
在網(wǎng)上找到一段實(shí)現(xiàn)的代碼,在這次的項(xiàng)目中起了大作用了。用vbs實(shí)現(xiàn)很多復(fù)雜的業(yè)務(wù)時(shí),需要把一些公共的函數(shù),class等寫在一個(gè)公共的可復(fù)用的vbs文件里,像個(gè)庫(kù)一樣,其他的腳本都包含這個(gè)庫(kù)的腳本。
復(fù)制代碼 代碼如下:

Sub Include(sInstFile)
Dim oFSO, f, s
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set f = oFSO.OpenTextFile(sInstFile)
s = f.ReadAll
f.Close
ExecuteGlobal s
End Sub

使用的時(shí)候,這個(gè)把這個(gè)sub放在代碼里,然后用 Include "comm.vbs" 這樣來包含以下就可以了
12下一頁(yè)閱讀全文

標(biāo)簽:上海 滄州 紅河 河南 長(zhǎng)治 新疆 沈陽(yáng) 樂山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《vbscript include的辦法實(shí)現(xiàn)代碼第1/2頁(yè)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266