跳轉到內容

Windows 程式設計/Windows 指令碼宿主

來自華夏公益教科書,開放的書籍,開放的世界

DOS 程式設計模型及其笨拙的批處理指令碼功能很快就被淘汰,微軟需要在 Windows 中新增一個替代的指令碼環境。由此產生的就是 **Windows 指令碼宿主** (WSH)。WSH 有兩種形式:控制檯模式版本 (csh.exe 或 cscript.exe) 和非控制檯版本 (wsh.exe 或 wscript.exe)。

WSH 語言

[編輯 | 編輯原始碼]

WSH 實際上並不是一種新語言,而是一個用於在其他 **Active Scripting** 語言中進行程式設計的環境。Active Scripting 語言是以 COM 元件形式實現的程式語言。您計算機上安裝的任何 Active Scripting 語言都可以與 WSH 一起使用。預設情況下,WSH 可以使用 JScript 和 VBScript 進行程式設計,但也可以安裝其他 Active Scripting 語言並在 WSH 中執行。其中一個更流行的第三方 Active Scripting 語言是 PerlScript,它通常作為 ActivePerl 發行版的一部分安裝。

WSH 指令碼還包含一定量的 XML 程式碼,這些程式碼有助於控制正在執行的指令碼的環境。用於指令碼的語言必須在 XML 標籤中指定。

WSH 是一個面向物件的程式設計環境,WSH 提供了大量的物件,Active Scripting 語言可以利用這些物件。

另一種 Microsoft 技術,**Active Server Pages** (ASP) 類似於 WSH,因為它是一個語言中立的指令碼環境,使用安裝的 Active Scripting 語言。但是,ASP 用作生成網頁的伺服器端指令碼工具。相比之下,WSH 更適合用於指令碼本地環境(儘管 WSH 也可以用作伺服器端網站指令碼引擎,如果你敢的話!)。

編寫 WSH 指令碼

[編輯 | 編輯原始碼]

WSH 指令碼檔案是一個純文字檔案,可以使用通用的“.wsh”副檔名。此外,許多其他副檔名與 WSH 相關聯,並且可能比簡單的 .wsh 副檔名更具描述性。例如,一個主要使用 VBScript 的 WSH 指令碼可能具有“.vbs”副檔名,而一個使用 JScript 的 WSH 指令碼可能具有“.js”副檔名。

每個 WSH 檔案都必須有一個 XML “JOB” 物件。每個指令碼可能有多個作業,但每個作業必須具有唯一的 ID。例如,以下是一些示例作業標籤

<job id="Task1">
<job id="GetHarddriveInfo">
<job id="CreateLogFile">

接下來,我們必須指定將用於實現特定作業的指令碼語言

<script language="JScript" src="IncludeFile.js"/>
<script language="VBScript">

從示例中可以看出,我們可以將外部原始檔包含到我們的指令碼檔案中以供執行。在一個作業物件中,所有指令從上到下執行。在每個作業中,我們可能有多種不同的指令碼語言在使用,它們位於單獨的塊中。

在指令碼部分的末尾,我們必須使用“</script>”標籤關閉標籤。在作業結束時,我們使用“</job>”標籤關閉。

"WScript" 物件

[編輯 | 編輯原始碼]

WSH 提供了 **WScript** 物件,該物件具有一些方法和欄位,可在 WSH 指令碼中使用。WScript 物件不需要例項化,並且始終在任何指令碼中可用。例如,WScript 物件的“Echo”方法打印出特定字串。WSH 的 csh.exe(控制檯版本)將字串列印到控制檯,而 wsh.exe(非控制檯版本)將字串列印到訊息框中。以下是一個多語言示例

<job id="TestEcho">
   <script language="Jscript">
       WScript.Echo("Printing from JScript");
   </script>
   <script language="VBScript">
       WScript.Echo "Printing from VBScript"
   </script>
   <script language="PerlScript">
       $WScript->Echo("Printing from PerlScript");
   </script>
</job>

當然,如果您還沒有在計算機上安裝 PerlScript,則無法使用它。

XML 標籤

[編輯 | 編輯原始碼]

WSH 指令碼中可以使用許多其他 XML 標籤。

<description >

[編輯 | 編輯原始碼]

<description> 標籤包含一定數量的純文字,用於描述當前檔案。例如

<description> 
  This script writes a status entry to the log file, and updates the website. 
</description>

現在,這似乎是編寫註釋的一種很困難的方式,但 <description> 標籤還有另一個用途。假設我們將上面的程式碼段儲存到一個指令碼檔案中,例如“testdesc.wsh”。現在,如果我們使用“/?”引數執行我們的指令碼,我們將得到以下結果

C:\>testdesc.wsh /?
This script writes a status entry to the log file, and updates the website.

當我們向指令碼傳送“/?”引數時, <description> 標籤中寫入的所有文字都會列印到控制檯。

華夏公益教科書