VBScript

出自Local Chinese Wikipedia
imported>Terry8503242026年5月14日 (四) 06:12的修訂 VBScript:​ // Edit via Wikiplus)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
跳至導覽 跳至搜尋
VBScript
File:VBScript file format icon.png
實作者微軟
面市時間1996年,​29年前​(1996
目前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    作業系統Windows
    副檔名.vbs, .vbe, .wsf, .wsc (.hta, .htm, .html, .asp)
    網站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    主要實作產品
    Windows Script Host, Active Server Pages
    受影響於
    Visual Basic
    影響語言
    Windows PowerShell

    VBScript("Microsoft Visual Basic Scripting Edition")是微軟Visual Basic 為藍本開發的一種已廢棄的動態指令碼英語Active Scripting語言。它允許 Microsoft Windows 系統管理員生成用於管理電腦的強大工具,無需錯誤處理,並具有子程式和其他進階編程結構,亦讓使用者能夠控制諸多計算環境。2023年,微軟宣布棄用VBScript。[1]2024年5月,發布VBScript階段移除計畫,2027年後不再預設啟用,並且未來的Windows版本也會永久移除VBScript。[2]

    使用範圍[編輯]

    由於VBScript可以通過Windows Script Host呼叫COM,因而可以使用Windows作業系統中可以被使用的程式媒體櫃,比如它可以使用Microsoft Office的媒體櫃,尤其是使用Microsoft AccessMicrosoft SQL Server的程式媒體櫃,當然它也可以使用其它程式和作業系統本身的媒體櫃。在實踐中VBScript一般被用在以下三個方面:

    Windows作業系統[編輯]

    VBScript可以被用來自動地完成重複性的Windows作業系統任務。在Windows作業系統中,VBScript可以在Windows Script Host的範圍內執行。Windows作業系統可以自動辨認和執行*.VBS和*.WSF兩種檔案格式,此外Internet Explorer可以執行HTA和CHM檔案格式。VBS和WSF檔案完全是文字式的,它們只能通過少數幾種對話視窗與使用者通訊。HTA和CHM檔案使用HTML格式,它們的程式碼可以像HTML一樣被編輯和檢查。在WSF、HTA和CHM檔案中VBScript和JavaScript的程式碼可以任意混合。HTA檔案實際上是加有VBS、JavaScript成分的HTML檔案。CHM檔案是一種線上說明英語Online help,使用者可以使用專門的編輯程式將HTML程式編輯為CHM。

    Windows 作業系統也提供一些 VBScript 指令碼來進行進階管理功能,例如管理 Windows 啟用金鑰的slmgr.vbs(Windows Server License Manager Script)。

    網頁瀏覽器(客戶端的VBS)[編輯]

    網頁中的VBS可以用來控制客戶端的網頁瀏覽器(以瀏覽器執行VBS程式)。VBS與JavaScript在這一方面是競爭者,它們可以用來實現動態HTML,甚至可以將整個程式結合到網頁中來。

    至今為止VBS在客戶方面未能占優勢,因為它只獲得Microsoft Internet Explorer的支援(Mozilla Suite可以透過安裝一個套件來支援VBS),並且IE11起已不再支援VBScript[3]。而JavaScript則受到所有網頁瀏覽器的支援。在Internet Explorer中VBS和JavaScript使用同樣的權限,它們只能有限地使用Windows作業系統中的對象。

    網頁伺服器(伺服器方面的VBS)[編輯]

    在網頁伺服器方面VBS是微軟的Active Server Pages的一部分,它與JavaServer PagesPHP是競爭對手。在這裡VBS的程式碼直接嵌入到HTML頁內,這樣的網頁以ASP結尾。網頁伺服器Internet資訊服務執行ASP頁內的程式部分並將其結果轉化為HTML傳遞給網頁瀏覽器供使用者使用。這樣伺服器可以進行資料庫聞訊並將其結果放到HTML網頁中。

    示範[編輯]

    Hello World[編輯]

    最簡單的例子:

    MsgBox "Hello World"
    

    .vbs檔案儲存。再使用cscript.exewscript.exe執行。

    一個更複雜的例子中,示出了使用MsgBox作為函式(返回一個結果),並使用了三個參數,其中第二個參數使用的是常數。

    Dim x
    ' These three produce the same result. However, the use of constants as in the third line 
    ' is considered best practice.
    x = MsgBox("Hello World:Text",1+64+4096,"Hello World:Title")
    x = MsgBox("Hello World:Text",4161,"Hello World:Title")
    x = MsgBox("Hello World:Text", vbOKCancel+vbInformation+vbSystemModal, _
               "Hello World:Title")
    
    ' Presents the number corresponding to the button pressed. Different constants will produce 
    ' different behaviours. For example, vbOKCancel specifies two buttons in the dialogue box, 
    ' whereas vbYesNoCancel specifies three.
    x = MsgBox("Hello World:Text", vbYesNoCancel+vbInformation,"Hello World:Title")
    MsgBox "The result is " & x
    

    終止任務[編輯]

    VBScript能訪問Windows管理規範 (WMI),就像Windows工作管理員。以下的程式碼執行時將會終止(「殺掉」)任何關於notepad.exe的處理程序。

    'Terminate all processes involving the name <strProcessToKill>
    Option Explicit
    Dim strComputer, strProcessToKill, objWMIService, colProcess, objProcess
    
    strComputer = "."
    strProcessToKill = "notepad.exe"
    Set objWMIService = GetObject("winmgmts:" _ 
       & "{impersonationLevel=impersonate}!\\" _ 
       & strComputer _ 
       & "\root\cimv2") 
    Set colProcess = objWMIService.ExecQuery _
       ("Select * from Win32_Process Where Name = '" & strProcessToKill & "'")
    For Each objProcess in colProcess
       MsgBox "... terminating " & objProcess.Name
       objProcess.Terminate()
    Next
    

    使用Option Explicit並不是必須的,但它被認為是VBScript的最佳實踐[4][5]

    建立具有唯一的名稱的十個檔案[編輯]

    這個實例顯示如何建立檔案並向它添加內容。它還演示了字串連接。

    For i = 1 to 10
    	createFile( i )
    Next
    
    Public sub createFile(a)
    
    	Dim fso,myFile
    	filePath = "C:\file_name" & a & ".txt"
    	Set fso=CreateObject("Scripting.FileSystemObject")
    	Set MyFile= fso.CreateTextFile( filePath)
    	MyFile.WriteLine("This is a separate file")
    	MyFile.close
    
    End Sub
    

    傳送按鍵[編輯]

    SendKeys方法類比一個或多個按鍵到活動視窗(類比在鍵盤上輸入)。 在該範例中,指令碼傳送字串「Hello World!」3次,每次暫停2秒(2000毫秒)。SendKeys巨集可能會在某些程式中失效,因為一些軟體(如在安裝時輸入許可證金鑰)將檢查是否是真正的按鍵,而不是虛擬的。

    set shl = createobject("wscript.shell")
    shl.sendkeys "Hello World!"
    wscript.sleep 2000
    shl.sendkeys "Hello World!"
    wscript.sleep 2000
    shl.sendkeys "Hello World!"
    wscript.sleep 2000
    

    執行期間,「Hello World!」將顯示在命令提示字元。

    Windows檔案操作[編輯]

    對象FileSystemObject執行一些檔案操作(例如測試一個檔案是否存在),並且還建立一個文字檔案(一個TextStream對象)。

    myfilename = "C:\Wikipedia - VBScript - Example - Hello World.txt"
    MakeHelloWorldFile myfilename
    
    Sub MakeHelloWorldFile (FileName)
    'Create a new file in C: drive or overwrite existing file
       Set FSO = CreateObject("Scripting.FileSystemObject")
       If FSO.FileExists(FileName) Then 
          Answer = MsgBox ("File " & FileName & " exists ... OK to overwrite?", vbOKCancel)
          'If button selected is not OK, then quit now
          'vbOK is a language constant
          If Answer <> vbOK Then Exit Sub
       Else
          'Confirm OK to create
          Answer = MsgBox ("File " & FileName & " ... OK to create?", vbOKCancel)
          If Answer <> vbOK Then Exit Sub
       End If
       'Create new file (or replace an existing file)
       Set FileObject = FSO.CreateTextFile (FileName)
       FileObject.WriteLine "Time ... " & Now()
       FileObject.WriteLine "Hello World"
       FileObject.Close()
       MsgBox "File " & FileName & " ... updated."
    End Sub
    

    MakeHelloWorldFile將會在按下按鈕後於C:\ 驅動器根目錄建立(若已經存在則更新)一個小文字檔案。

    Excel對象操作[編輯]

    Option Explicit '所有变量必须显式声明
    
    Dim app,workbook,sheet
    Dim row,col
    
    Set app = WScript.CreateObject("Excel.Application")
    app.Visible = True
    Set workbook = app.WorkBooks.Add
    
    Set sheet = workbook.Worksheets(1)
    '10x10 random value
    For row = 1 To 10
      For col = 1 To 10
        sheet.Cells(row,col).Value = CInt(Int((100 * Rnd()) + 1))
      Next
    Next
    
    Set sheet = workbook.Worksheets(2)
    '10x10 random value
    sheet.Range("A1:J10").Formula = "=Int(Rand() * 100 + 1)"
    

    語言[編輯]

    VBScript主要的優點有:

    • 由於VBScript由作業系統,而不是由網頁瀏覽器解釋,它的檔案比較小。
    • 易學。
    • 在所有2000 / 98SE以後的Windows版本都可直接使用。
    • 可以使用其它程式和可使用的物件(尤其是Microsoft Office)。

    缺點有:

    • 現在VBS無法作為電子郵件的附件了。Microsoft Outlook拒絕接受VBS為附件,收信人無法直接使用VBS附件。
    • VBS的各種編輯器不受歡迎。
    • 作業系統沒有任何特別的保護設施。VBS程式與其它JS、EXE、BAT或CMD程式一樣對待。作業系統沒有監察惡意功能的能力。

    和VB的對比[編輯]

    不能為變數定義類型[編輯]

    在VB中,為變數定義類型使用「Dim 變數名 As 類型」的語句格式。

    但是在VBScript中這樣寫是錯誤的,VBScript中的變數都是弱型別(即Variant變體),因此它不需要指定類型。只能使用「Dim 變數名」的格式,直譯器會自動根據賦值的類型定義變數類型。

    不能使用條件編譯[編輯]

    在VB中,可以使用#If…Then、#ElseIf…Then、#Else、#End If、#Const… = …等語句定義編譯時使用的語句

    而由於VBScript不需要編譯即可被WSH(Windows Script Host)直接解釋執行,所以並不需要條件編譯語句。

    安全性[編輯]

    微軟決定Outlook和Outlook Express中的HTML郵件可以使用VBScript後出現了許多利用Windows Script Host和ActiveX的功能的電腦病毒。這些病毒之所以能夠傳播開來也是因為一開始這些系統功能完全未受保護。雖然VBScript和JavaScript使用同樣的使用作業系統的功能的安全措施,今天這些功能被看作不符合標準。

    一般很難保護VBScript的程式碼不被使用者看到。

    參考資料[編輯]

    1. Deprecated features in the Windows client - What's new in Windows. 7 November 2023 [2024-12-05]. (原始內容存檔於2023-09-03). 
    2. Shankar Chilla, Naveen. VBScript deprecation: Timelines and next steps. Microsoft Community Hub. 2024-05-22 [2024-05-28]. (原始內容存檔於2024-10-05) (English). 
    3. (英文)VBScript is no longer supported in IE11 edge mode for the Internet zone. [2014-05-25]. (原始內容存檔於2015-04-07). 
    4. Remarks on Option Explicit Statement頁面存檔備份,存於網際網路檔案館), MSDN Library
    5. Why force yourself to declare all variables?, In VBScript For Dummies, John Walkenbach, IDG Books Worldwide, Inc., 1996

    外部連結[編輯]