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

首頁 > 編程 > VBScript > 正文

vbscript include的辦法實現代碼

2020-06-26 18:18:59
字體:
來源:轉載
供稿:網友
vbscript本身沒有include這樣包含其他vbs文件的支持,在asp或html頁面里可以用<script ...這樣來包含一個vbs文件,如果是直接運行的vbs腳本,就只有用其他辦法來代替這個功能了。
 
任何真正實用的工程開發都必然是多文件的。但是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" 這樣來包含以下就可以了
vbscript本身沒有include這樣包含其他vbs文件的支持,在asp或html頁面里可以用<script ...這樣來包含一個vbs文件,如果是直接運行的vbs腳本,就只有用其他辦法來代替這個功能了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2018中文字幕一区二区三区| 日韩专区在线播放| 在线观看国产精品淫| 亚洲最新在线视频| 亚洲深夜福利视频| 亚洲日韩第一页| 国产91精品高潮白浆喷水| 欧美极品少妇全裸体| 日韩精品免费在线观看| 国产一区二区三区高清在线观看| 国产一区二区三区在线视频| 精品国产乱码久久久久久天美| 亚洲日本成人女熟在线观看| 日韩精品中文字幕在线| 亚洲精品免费一区二区三区| 国产精品一区二区久久国产| 国语自产精品视频在线看抢先版图片| 日韩精品高清在线观看| 久久九九国产精品怡红院| 亚洲欧美激情四射在线日| 亚洲娇小xxxx欧美娇小| 日韩中文字幕视频在线观看| 不卡av电影在线观看| 91九色国产视频| 欧美丝袜第一区| 欧美丰满老妇厨房牲生活| 久久中文久久字幕| 日韩国产高清污视频在线观看| 久久亚洲春色中文字幕| 少妇高潮久久久久久潘金莲| 亚洲国产福利在线| 亚洲欧洲日产国码av系列天堂| 国产成人自拍视频在线观看| 亚洲一区亚洲二区亚洲三区| 日韩激情视频在线| 欧美一级视频免费在线观看| 亚洲成人三级在线| 毛片精品免费在线观看| 欧美一级片一区| 久久久久国色av免费观看性色| 日韩乱码在线视频| 欧美高清视频在线播放| 国产精品久久激情| 91免费看片在线| 久久成年人免费电影| 91色中文字幕| 欧美国产日韩一区| 55夜色66夜色国产精品视频| 久久777国产线看观看精品| 精品国产91久久久久久老师| 日韩黄色在线免费观看| 欧美中文字幕视频在线观看| 日韩亚洲国产中文字幕| 亚洲欧美一区二区三区在线| 91精品国产自产在线| 亚洲精品电影久久久| 国产精品爽爽爽| 欧美在线视频免费播放| 国产网站欧美日韩免费精品在线观看| 久久精品中文字幕免费mv| 久久久亚洲成人| 亚洲国产高清高潮精品美女| 国产午夜精品免费一区二区三区| 亚洲天堂网在线观看| 亚洲色图校园春色| 亚洲成人精品视频| 怡红院精品视频| 亚洲黄色www| 国产精品一区二区av影院萌芽| 国产欧美日韩专区发布| 色噜噜狠狠狠综合曰曰曰88av| 亚洲性生活视频| 97在线免费观看| 精品一区电影国产| 亚洲欧美另类在线观看| 另类天堂视频在线观看| 精品久久中文字幕久久av| 精品国产一区二区三区在线观看| 国产精品久久久久久亚洲影视| 欧美激情免费在线| 亚洲天堂第一页| 久久91亚洲人成电影网站| 国产精品久久久久久一区二区| 成人黄色片在线| 疯狂欧美牲乱大交777| 亚洲精品第一页| 久久99视频免费| 国产精品亚洲自拍| 国产成人精品电影| 欧美激情综合亚洲一二区| 久久男人的天堂| 亚洲人成电影网站色| 亚洲国产欧美精品| 亚洲自拍偷拍视频| 欧美在线一级va免费观看| 91欧美激情另类亚洲| 欧美激情综合色综合啪啪五月| 欧美日韩xxx| 国产综合在线观看视频| 一区二区在线视频播放| 成人午夜在线影院| 97超视频免费观看| 亚洲欧美一区二区三区久久| 亚洲欧美日韩精品| 欧美成人免费播放| 日韩成人激情视频| 91av在线播放视频| 96pao国产成视频永久免费| 国产精品视频专区| 日韩欧美中文第一页| 69国产精品成人在线播放| 精品国产一区二区三区在线观看| 久久频这里精品99香蕉| 国产精品专区第二| 北条麻妃一区二区三区中文字幕| 亚洲一区二区三区毛片| 欧美精品videos| 久久久亚洲影院你懂的| 日韩女优在线播放| 中国人与牲禽动交精品| 久久99久久99精品中文字幕| 日韩欧美在线视频观看| 欧美在线影院在线视频| 欧美精品久久久久久久久| 最近中文字幕日韩精品| 久久成年人免费电影| 国产精品日韩精品| 亚洲直播在线一区| 欧美在线观看网址综合| 国产精品久久久久久久久久99| 色悠悠久久88| 国产一区二区在线播放| 国产美女高潮久久白浆| 精品国产福利视频| 久久久噜久噜久久综合| 精品国内产的精品视频在线观看| 91成人国产在线观看| 久久五月天色综合| 91在线无精精品一区二区| 欧美在线免费观看| 久国内精品在线| 中文字幕久精品免费视频| 亚洲第一av在线| 黄色一区二区在线| 欧美性猛交xxxx乱大交蜜桃| 午夜欧美不卡精品aaaaa| 国产成人精品a视频一区www| 亚洲精品美女久久久| 日韩国产在线播放| 欧美午夜片欧美片在线观看| 原创国产精品91| 国产精品美女免费看| 国产精品视频公开费视频| 国产精品免费电影| 久久久999国产精品| 亚洲国产精品视频在线观看| 中文字幕欧美精品日韩中文字幕| 亚洲国产一区二区三区在线观看| 欧美超级乱淫片喷水| 日韩免费电影在线观看| 久久噜噜噜精品国产亚洲综合| 国产欧美亚洲视频| 亚洲综合中文字幕在线观看| 久久久久久久国产精品视频|