午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    VBS中Run和Exec的區(qū)別
    來源:易賢網(wǎng) 閱讀:1440 次 日期:2016-06-30 10:02:05
    溫馨提示:易賢網(wǎng)小編為您整理了“VBS中Run和Exec的區(qū)別”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了VBS中Run和Exec的區(qū)別,需要的朋友可以參考下

    Set ws = CreateObject("WScript.Shell")

    '這里創(chuàng)建一個對象引用,以便在以下示例代碼中使用。

    'Demon注:這個變量名怎么這么猥瑣(WS)

    語法:(常識(Demon注:常識這個詞我喜歡):作為過程使用時,不要加括號,否則出現(xiàn)編譯器錯誤(參數(shù)唯一或沒有時加括號不會出錯,但建議不要加))

    代碼如下:

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

    [Set objExec =] ws.Exec(strCommand)

    WScript.Shell對象的這兩個方法:

    都可以用來運行程序,且可以帶參數(shù)。

    都可以在程序路徑中使用環(huán)境變量。

    都不能為程序指定工作目錄、不能設置優(yōu)先級(start命令可以)。

    要指定工作目錄,只能通過改變腳本宿主(wscript.exe/cscript.exe)的當前工作目錄:ws.CurrentDirectory = "工作目錄"。(常識:工作目錄有何意義:1、有些程序需要相應目錄下的dll等相關文件支持 2、相對路徑問題)

    Run和Exec的區(qū)別:

    1、Run可以直接運行文件(包括協(xié)議文件),會啟動相關聯(lián)的程序打開該文件(沒有關聯(lián)則出錯)。start有此功能(更高級,沒有關聯(lián)時會打開“打開方式”對話框)。Exec只能運行程序。

    代碼如下:

    ws.Run "c:\boot.ini"

    ws.Exec "notepad c:\boot.ini"

    2、Run不僅可以直接運行位于path環(huán)境變量目錄中的程序,還能運行在注冊表App Paths中設置的程序“別名”。start有此功能。Exec不行,只能直接運行位于path環(huán)境變量目錄中的程序。

    代碼如下:

    ws.Run "iexplore"

    'iexplore 在 App Paths 中登記了別名。

    ws.Exec "calc"

    3、Run可以等待程序運行結束再執(zhí)行下面的命令。start有此功能。Exec不行。

    代碼如下:

    ws.Run "notepad", ,true

    4、Exec運行的程序路徑中即使含有空格,也可以不加引號(參數(shù)如需引號,它的引號不能省略)。Run、start沒有這個本領。(常識:vbs中一個引號字符"本身要用兩個引號表示,即寫成""。也可以用Chr函數(shù)得到引號:chr(34))

    代碼如下:

    ws.Exec "C:\Program Files\Internet Explorer\IEXPLORE.EXE"

    ws.Exec """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""

    ws.Run  """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""

    5、最大的區(qū)別是:Run著重于啟動控制(設置窗口形式)。(start聽名字知道是為了啟動,也可以簡單設置窗口最大化、最小化。)Exec著重于后續(xù)控制,并著重于控制命令行程序。

    run可以設置程序運行時的運行模式(前臺后臺:是否隱藏窗口)、窗口大小、激活狀態(tài)(是否獲取“焦點”),具體參數(shù)請參考手冊。

    Exec在啟動程序后還能對其進行控制:獲取運行狀態(tài)、獲取PID、強行中止進程。如果運行的是命令行程序,還能提供對 StdIn/StdOut/StdErr 流的訪問:寫入執(zhí)行命令、獲取命令輸出等。運行命令行程序后只能通過StdIn寫入命令,控制臺窗口不再接受用戶輸入。

    代碼如下:

    ws.Run "notepad", 0

    '隱藏窗口

    ws.Run "notepad", 4

    '運行后不激活,不打擾原來的活動窗口

    注意,手冊上明確指出,Run不能約束所有程序都按它指定的窗口形式運行,有些程序不聽它的話,比如iexplore、calc等。運行ieplore時,它會奪取焦點成為活動窗口。Run無法以最小化運行calc。

    代碼如下:

    Set oExec = ws.Exec("mspaint")

    WScript.Echo oExec.ProcessId

    oExec.Terminate

    WScript.Echo oExec.Status '0為運行,1為結束

    Set oExec = ws.Exec("ipconfig")

    WScript.Echo oExec.StdOut.ReadAll

    Exec的應用:

    1、Runas自動輸入密碼:可能是設計時為安全考慮,runas不接收管道傳遞或從文件重定向得到,輸入密碼必須手動輸入,這個問題困擾了不少人,卻又難以解決,用Sendkeys也不一定穩(wěn)妥(Demon注:我之前也說過很多次,用Sendkeys是不靠譜的,因為無法保證目標窗口一直獲得焦點,但是經(jīng)常見到很多人用,真是不明真相的群眾,悲哀)。如果用Exec方法,就能輕松做到自動輸入。

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    Set oExec = ws.Exec("cmd.exe")

    oexec.StdIn.WriteLine "runas /user:username setup.bat"

    oexec.StdIn.WriteLine "password"

    2、Exec與Run的結合使用:Exec方法無法隱藏窗口,要得到命令行程序的輸出,就會有一個黑呼呼的窗口一閃而過,不僅難看,還會讓其他使用者誤以為是木馬什么的,很不完美。如何解決這個問題呢?就讓Exec與Run合作吧!

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    host = WScript.FullName

    'Demon注:這里不用這么復雜吧,LCase(Right(host, 11))不就行了

    If LCase( right(host, len(host)-InStrRev(host,"\")) ) = "wscript.exe" Then

        ws.run "cscript """ & WScript.ScriptFullName & chr(34), 0

        WScript.Quit

    End If

    Set oexec = ws.Exec( "ipconfig")

    Msgbox oExec.StdOut.ReadAll, , "ipconfig"

    '此時不要用WScript.Echo,因為當前是在控制臺運行

    'WScript.Echo的結果會在控制臺輸出,不會彈出對話框。

    vbsRun方法

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

    【參數(shù)】

    object 

    WshShell 對象。 

    strCommand 

    表示要運行的命令行的字符串值。包括要傳遞到可執(zhí)行文件的所有參數(shù)。 

    intWindowStyle 

    可選。表示程序窗口外觀的整數(shù)值。

    請注意,并非所有程序都使用此信息。 

    bWaitOnReturn 

    可選。布爾值,表示在繼續(xù)執(zhí)行腳本中的下一條語句之前,腳本是否等待執(zhí)行完程序。

    如果設為 true,則在執(zhí)行完程序后才執(zhí)行腳本,Run 方法返回由程序返回的任何錯誤代碼。

    如果設為 false(默認值),則 Run 方法將自動在啟動程序后立即返回 0(不是錯誤代碼)。

    【說明】

    Run 方法返回一個整數(shù)。Run 方法啟動在新 Windows 進程中運行的程序。

    可以讓腳本等到程序執(zhí)行完后再繼續(xù)執(zhí)行。這允許您同步運行腳本和程序。

    strCommand 參數(shù)內(nèi)的環(huán)境變量自動擴展。

    如果某個文件類型已正確注冊到某個程序中,則對該類型的文件調(diào)用 Run 方法時將執(zhí)行該程序。例如,如果您的計算機系統(tǒng)中裝有 Word,則對 *.doc 文件調(diào)用 Run 方法時將啟動 Word 并加載該文檔。

    【intWindowStyle 說明 】

    0 隱藏一個窗口并激活另一個窗口。 

    1 激活并顯示窗口。如果窗口處于最小化或最大化狀態(tài),則系統(tǒng)將其還原到原始大小和位置。第一次顯示該窗口時,應用程序應指定此標志。 

    2 激活窗口并將其顯示為最小化窗口。 

    3 激活窗口并將其顯示為最大化窗口。 

    4 按最近的窗口大小和位置顯示窗口。活動窗口保持活動狀態(tài)。 

    5 激活窗口并按當前的大小和位置顯示它。 

    6 最小化指定的窗口,并按照 Z 順序激活下一個頂部窗口。 

    7 將窗口顯示為最小化窗口?;顒哟翱诒3只顒訝顟B(tài)。 

    8 將窗口顯示為當前狀態(tài)。活動窗口保持活動狀態(tài)。 

    9 激活并顯示窗口。如果窗口處于最小化或最大化狀態(tài),則系統(tǒng)將其還原到原始大小和位置。還原最小化窗口時,應用程序應指定此標志。 

    10 根據(jù)啟動應用程序的程序狀態(tài)來設置顯示狀態(tài)。

    【示例 1】

    下面的 VBScript 代碼用記事本打開當前運行腳本的副本。

    代碼如下:

    Set WshShell = WScript.CreateObject("WScript.Shell")

    WshShell.Run "%windir%\notepad " & WScript.ScriptFullName

    下面的 VBScript 代碼與上述代碼完成的操作相同,不同之處在于,它指定窗口類型,等待用戶關閉記事本,關閉記事本時保存從記事本返回的錯誤代碼。

    代碼如下:

    Set WshShell = WScript.CreateObject("WScript.Shell")

    Return = WshShell.Run("notepad " & WScript.ScriptFullName, 1, true)

    【示例 2】

    下面的 VBScript 代碼打開一個命令窗口,將路徑改為 C:\,并執(zhí)行 DIR 命令。

    代碼如下:

    Dim oShell

    Set oShell = WScript.CreateObject ("WSCript.shell")

    oShell.run "cmd /K CD C:\ & Dir"

    Set oShell = Nothing

    Run 方法:

    Run方法有三個參數(shù),

    第一個參數(shù)是你要執(zhí)行的程序的路徑,

    第二個參數(shù)是窗口的形式,0后臺運行;1正常運行;2最小化;3最大化;缺省的話表示正常運行

    第三個參數(shù)是表示這個腳本是等待還是繼續(xù)執(zhí)行,如果設為了True,腳本就會等待調(diào)用的程序退出后再向后執(zhí)行。

    例1:

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    ws.Run "notepad",,True

    ws.Run "iexplore"

    例2:隱藏BAT執(zhí)行窗口

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    ws.Run "x.bat",0

    例3:

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    ws.Run "cmd /c netstat -an>>x.txt",0

    例4:

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    ws.Run "taskkill /f /im iexplore.exe",0

    Exec 方法

    例1:運行文件

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    ws.Exec "notepad c:/x.txt" ‘對于Exec應指明程序,此notepad是必須的

    例2:運行程序>獲取進程PID值>強行結束進程(沒有Run+taskkill強:如在記事本未保存的情況下結束進程,Exec會出錯,而Run不會)>判斷進程是否在運行(這個功能不錯)

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    Set e = ws.Exec("notepad")

    MsgBox e.ProcessId

    e.Terminate

    WSH.Sleep 1000

    MsgBox e.Status ‘0為運行,1為結束

    例3:直接獲取dos命令輸出,dos窗口會閃一下,Exec沒有窗口控制功能

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    Set e = ws.Exec("ipconfig")

    MsgBox e.Stdout.ReadAll

    例4:

    代碼如下:

    Set ws = CreateObject("WScript.Shell")

    Set e = ws.Exec("cmd /c echo Hi")

    MsgBox e.Stdout.ReadAll

    更多信息請查看腳本欄目
    易賢網(wǎng)手機網(wǎng)站地址:VBS中Run和Exec的區(qū)別

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)