vbScript 中 WScript.Shell 對象的 run 和 exec 函數(shù)功能使用詳解
成都創(chuàng)新互聯(lián)長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為游仙企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,游仙網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
函數(shù)聲明:
Set Ws = CreateObject("Wscript.Shell")
Function Exec(ByVal Command As String) As WshExec
Function Run(ByVal Command As String, [ByVal WindowStyle], [ByVal WaitOnReturn]) As Integer
函數(shù)區(qū)別:
1,返回值不同
Run 的返回值是一個整數(shù),就是0或1成功和失敗兩個狀態(tài),而 exec 方法的返回值是一個對象,從返回對象中可以獲得控制臺輸出信息和控制臺錯誤信息,即 StdOut 和 StdErr 屬性等。
如:
Dim oShell,exeRs
Set oShell = CreateObject("WSCript.shell")
commandLine = "xcopy.exe"
Set exeRs = oShell.Exec(commandLine)
errMsg = exeRs.StdErr.ReadAll()
stdMsg = exeRs.StdOut.ReadAll()
WScript.echo "errMsg:" & errMsg & "stdMsg:" & stdMsg
ret = oShell.run(commandLine, 0, true)
WScript.echo "run method return value:" & ret
Set oShell = Nothing
Set exeRs = Nothing
可以取道控制臺錯誤和控制臺信息。
附記:WshExec 類具有屬性 ExitCode,ProcessID,Status,StdErr,StdIn,StdOut 以及一個函數(shù) Terminate,這些屬性和函數(shù)都很好理解。
Status 屬性具有三個值:
Const WshFailed = 2
Const WshFinished = 1
Const WshRunning = 0
2,執(zhí)行參數(shù)
Run 的后兩個參數(shù),一個是 cmd 窗口的風(fēng)格,一個是是否等待執(zhí)行完成。
最后一個參數(shù)很有用,如果你希望等待本次 cmd 執(zhí)行的程序結(jié)束后,再執(zhí)行run后面的語句,設(shè)置這個參數(shù)為true,否則后面的語句將不等待cmd窗口完成,直接運(yùn)行。
另外,如果你使用 exec 方法的時候,如果希望等待cmd中程序執(zhí)行完后,再執(zhí)行后面的語句,也可以通過下面的方法:
oExec.StdErr.ReadAll() 或者 oExec.StdOut.ReadAll()
道理上也應(yīng)該好理解,要得到輸出的信息,肯定要 cmd 執(zhí)行完后才會有輸出的。
Ws.Run 函數(shù)的參數(shù):
Set Ws = CreateObject("Wscript.Shell")
Ws.run "notepad.exe",,
run 函數(shù)有三個參數(shù):
第一個參數(shù)是你要執(zhí)行的程序的路徑,若路徑中存在空格,記得要用""括起來。
如"""C:\Program Files\nn.exe"""的形式或者Chr(34)&"C:\Program Files\nn.exe"&Chr(34)的形式。
第二個參數(shù)是窗口的形式,0是在后臺運(yùn)行;1表示正常運(yùn)行;2表示激活程序并且顯示為最小化;3表示激活程序并且顯示為最大化;一共有10個這樣的參數(shù)如下表。
第三個參數(shù)是表示這個腳本是等待還是繼續(xù)執(zhí)行,如果設(shè)為了 true,腳本就會等待調(diào)用的程序退出后再向后執(zhí)行。
其實,run 做為函數(shù),前面還有一個接受返回值的變量,一般來說如果返回為0,表示成功執(zhí)行,如果不為0,則這個返回值就是錯誤代碼,可以通過這個代碼找出相應(yīng)的錯誤。
窗口風(fēng)格 說明
0 隱藏一個窗口并激活另一個窗口。
1 激活并顯示窗口。如果窗口處于最小化或最大化狀態(tài),則系統(tǒng)將其還原到原始大小和位置。第一次顯示該窗口時,應(yīng)用程序應(yīng)指定此標(biāo)志。
2 激活窗口并將其顯示為最小化窗口。
3 激活窗口并將其顯示為最大化窗口。
4 按最近的窗口大小和位置顯示窗口。活動窗口保持活動狀態(tài)。
5 激活窗口并按當(dāng)前的大小和位置顯示它。
6 最小化指定的窗口,并按照 Z 順序激活下一個頂部窗口。
7 將窗口顯示為最小化窗口?;顒哟翱诒3只顒訝顟B(tài)。
8 將窗口顯示為當(dāng)前狀態(tài)。活動窗口保持活動狀態(tài)。
9 激活并顯示窗口。如果窗口處于最小化或最大化狀態(tài),則系統(tǒng)將其還原到原始大小和位置。還原最小化窗口時,應(yīng)用程序應(yīng)指定此標(biāo)志。
10 根據(jù)啟動應(yīng)用程序的程序狀態(tài)來設(shè)置顯示狀態(tài)。
參數(shù)(的)詳細(xì)信息可以參考 msdn:
http://msdn.microsoft.com/zh-cn/library/ateytk4a(en-us,VS.85).aspx
http://msdn.microsoft.com/zh-cn/library/d5fk67ky(en-us,VS.85).aspx
注:經(jīng)過實驗驗證,執(zhí)行一般的exe,建議使用Exec()