亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

vbscript include的辦法實現代碼第1/2頁

2020-07-26 11:54:43
字體:
來源:轉載
供稿:網友
任何真正實用的工程開發都必然是多文件的。但是VBScript創建多文件工程要麻煩一點,它對多文件工程,代碼復用的支持并不是太好。在C/C++工程里,我們已經習慣了通過一個include語句,并且聲明一個函數原形的方式來使用其它模塊中的函數,這樣一個復雜的工程可以比較容易地分解成一些小的模塊,以更容易理解和掌握。VBScript中情況有些不同。這與它的設計目標有關。最初VBScript是用在客戶端腳本,以支持與客戶端作簡單的交互,如簡單的輸入檢查等等。在瀏覽器里顯然沒有辦法支持對另一個文件中的函數的調用,你不知道那個文件是否存在,何時存在。那么以本地腳本形式執行的VBScript又怎么樣呢?想想看這條命令:cscript.exe yourscript.vbs。顯然一個VBS運行在一個進程空間里(cscript進程),它也沒有辦法得到另一個文件中的函數。

認識到了VBScript的局限性,我們來看如何解決它。

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

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

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

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

如果時序很重要,你可以在bWaitOnReturn這個參數中指定主腳本是否要等待被執行的腳本運行結束后才能繼續。

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

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

關于參數解析,這里給出一個Windows 2000 support tools中的一個腳本的例子。你可以復用這個函數,以解析任何以/ArgName:Value形式指定的參數。

' 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

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

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

這樣,在腳本中加上這樣一句調用:Include "mylib.vbs",就可以使用mylib.vbs中聲明的全局變量和函數了!注意這里的函數ExecuteGlobal有一個類似的函數Execute,這里如果使用Execute的話,就達不到我們想要的效果。因為通過Execute暴露的名字,其作用范圍局限于Execute所處的級別,在這里,也就是在函數Include內部。這幾乎肯定不是你想要的結果。

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

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

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

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

使用的時候,這個把這個sub放在代碼里,然后用 Include "comm.vbs" 這樣來包含以下就可以了
12下一頁閱讀全文
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品2018| 欧美精品在线免费播放| 国产精品白嫩初高中害羞小美女| 亚洲欧美在线看| 国产精品美女呻吟| 亚洲人高潮女人毛茸茸| 日本久久精品视频| 亚洲性生活视频| 国产精品手机播放| 黄网动漫久久久| 亚洲白虎美女被爆操| 在线精品国产欧美| 国产精品免费久久久久影院| 色999日韩欧美国产| 国产福利精品av综合导导航| 国产精品国内视频| 亚洲综合在线做性| 美女视频黄免费的亚洲男人天堂| 欧美成人激情在线| 中文字幕一区二区精品| 亚洲国产精品va在线看黑人| 亚洲精品电影久久久| 亚洲香蕉在线观看| 午夜精品蜜臀一区二区三区免费| 欧美高跟鞋交xxxxxhd| 亚洲国产日韩欧美在线动漫| 欧美一区二区三区图| 国产精品美女无圣光视频| 成人网中文字幕| 精品国产拍在线观看| 美女视频久久黄| 久久视频国产精品免费视频在线| 成人黄色免费网站在线观看| 91啪国产在线| 欧洲成人在线视频| 日韩av在线免费| 久久精品这里热有精品| 亚洲精品99久久久久中文字幕| 亚洲qvod图片区电影| 久久精品国产成人| 一区二区三区视频免费在线观看| 成人高清视频观看www| 国产精品视频一区国模私拍| 亚洲欧美国产制服动漫| 欧美亚洲一级片| 日韩欧美aaa| 亚州国产精品久久久| 久久香蕉频线观| 久久天堂av综合合色| 亚洲色图欧美制服丝袜另类第一页| 俺去亚洲欧洲欧美日韩| 国产拍精品一二三| 2019中文字幕在线观看| 国产女人18毛片水18精品| 久久色免费在线视频| 韩日欧美一区二区| 国产欧美精品一区二区三区介绍| 欧美大片欧美激情性色a∨久久| 久久人91精品久久久久久不卡| 国产精品久久久久久久久男| 亚洲激情成人网| 中文字幕视频在线免费欧美日韩综合在线看| 91sao在线观看国产| 国产精品视频最多的网站| 亚洲福利小视频| 欧洲日本亚洲国产区| 亚洲一区二区三区视频播放| 国产69精品久久久久久| 精品久久中文字幕| 日本不卡视频在线播放| 国产精品爽爽爽| 国产97在线|日韩| 欧美激情国产精品| 性日韩欧美在线视频| 日韩免费高清在线观看| 欧美影院成年免费版| 夜色77av精品影院| 7777免费精品视频| 亚洲天堂av在线播放| 成人欧美一区二区三区黑人孕妇| 欧美在线播放视频| 日韩视频亚洲视频| 91精品久久久久久久| 亚洲美女激情视频| 欧洲成人在线观看| 国产日韩在线播放| 欧美精品做受xxx性少妇| 亚洲午夜久久久影院| 日韩精品中文字幕在线播放| 538国产精品一区二区在线| 国产精品www色诱视频| 久久精品一偷一偷国产| 成人免费黄色网| 欧美野外猛男的大粗鳮| 国产精品国产三级国产专播精品人| 久久不射热爱视频精品| 国产一区二区三区日韩欧美| 欧美成人免费全部观看天天性色| 亚洲综合中文字幕在线观看| 欧美国产日韩一区| 日韩国产精品亚洲а∨天堂免| 97精品一区二区视频在线观看| 亚洲成人1234| 国产精品嫩草影院久久久| 欧美精品免费播放| 日韩av电影国产| 亚洲精品一区二区网址| 欧美午夜精品久久久久久人妖| 国产乱人伦真实精品视频| 欧美日韩加勒比精品一区| 久久中文字幕视频| 欧美日韩国产二区| 日韩成人av在线播放| 国产精品久久久亚洲| 亚洲精品一区av在线播放| 性亚洲最疯狂xxxx高清| 久久夜色精品国产欧美乱| 精品久久久久久久久久| 国产欧美va欧美va香蕉在线| 亚洲一级免费视频| 亚洲国产欧美一区二区丝袜黑人| 精品国内自产拍在线观看| 欧美一级在线亚洲天堂| 欧美中在线观看| 色噜噜久久综合伊人一本| www日韩欧美| 日韩成人性视频| 97超级碰碰人国产在线观看| 黄色成人av在线| 91亚洲国产成人精品性色| 国产suv精品一区二区三区88区| 国产伦精品免费视频| 亚洲精品理论电影| 国内精品中文字幕| 国产日韩欧美电影在线观看| 91久久夜色精品国产网站| 国自产精品手机在线观看视频| 亚洲wwwav| 欧美黑人又粗大| 欧美日韩裸体免费视频| 亚洲一区二区日本| 97av视频在线| 中文字幕欧美在线| 亚洲视频视频在线| 亚洲欧美日韩网| 久久99国产综合精品女同| 亚洲男人第一网站| 性欧美亚洲xxxx乳在线观看| 日韩精品亚洲精品| 一区二区av在线| 精品国产欧美一区二区三区成人| 在线亚洲欧美视频| 亚洲女人天堂成人av在线| 久久成人精品视频| 国产亚洲一级高清| 国产精品黄色影片导航在线观看| 欧美有码在线观看视频| 欧美成人免费一级人片100| 欧美激情精品久久久久久| 国产日本欧美一区二区三区| 中文字幕日韩精品在线观看| 国产在线不卡精品| 综合激情国产一区| 欧美激情奇米色|