Microsoft Windows Script 技術

本節內容

JScript
是 Microsoft 特別針對 Internet 開發，功能非常強大的 scripting 語言。JScript.NET 是 Microsoft 下一個世代採用的 ECMA 262 語言。JScript.NET (與 ECMAScript Edition 4 共同開發) 的改善包括真實編譯程式碼、具型別與不具型別的變數、類別 (包含繼承、函式多載化 (Function Overloading)、屬性存取子以及其他)、套件、跨語言支援以及存取 .NET Frameworks。
VBScript
Microsoft Visual Basic Scripting Edition 將 active scripting 帶入多樣化的環境中，包括 Microsoft Internet Explorer 中的 Web 用戶端指令碼和 Microsoft Internet Information Services 中的伺服端指令碼。
Script 執行階段
Dictionary 物件相當於 PERL 中的關聯陣列。項目可以是任何形式的資料，並且儲存在陣列中。每個項目會對應一個唯一的索引鍵。索引鍵會用來擷取個別的項目，通常是一個整數或字串，不過也可以是陣列之外的任何型態。

FileSystemObject (FSO) 物件模型可以讓您在許多屬性、方法和事件中使用熟悉的 object.method 語法來處理檔案及資料夾。

Script Encoder 是一個簡單的指令行工具，它可以幫助 script 的設計者將最終的指令碼編碼，如此 Web 主機和 Web 用戶端將無法檢視或修改其來源。

Windows Script 元件
Microsoft® Windows® Script 元件提供您一種簡單的方法，以 Microsoft®Visual Basic®Scripting Edition (VBScript) 和 Microsoft®JScript®等 Scripting 語言建立 COM 元件。
Windows Script Host
Microsoft Windows Script Host (WSH) 是可以讓您在基本的作業系統 (Windows 95 或 Windows NT 4.0) 中執行 Visual Basic Scripting Edition 和 JScript 的一種工具。
Windows Script Interfaces
Microsoft Windows Script Interfaces 會介紹一種新的方式讓應用程式可以增加 scripting 和 OLE Automation 功能。

相關章節

Microsoft Windows Script Technologies 首頁
專門介紹 Microsoft scripting 技術的網站。介紹的內容非常廣泛，包括 Jscript、VBScript、Windows Script Host、Windows Script Components、Remote Scripting、Script Control 和 Script Debugger 的完整文件。您可以下載最新版本的 JScript 和 VBScript，以及其他 Microsoft scripting 技術的更新與增強功能。

© 2001 Microsoft Corporation. All rights reserved.


JScript

JScript

Jscript 使用者指南

在 Internet Explorer 使用 JScript

JScript 語言參考程式


JScript 使用者指南

JScript 基礎學習

進階JScript


JScript 基礎學習

什麼是 JScript?

撰寫 JScript 程式碼

JScript 變數

JScript 資料型態

JScript 運算子

運算子優先順序

控制程式流程

條件式編譯

條件式編譯變數

JScript 函數

JScript 物件

內建物件

建立自己的物件

JScript 保留字


什麼是 Jscript？

JScript 是一種 Microsoft 設計的 ECMA 262 語言規格(ECMAScript 第三版)。除了少數影響不大的例外 (為了與以往的版本相容)，JScript 具有符合ECMA 標準的完整設計。本總覽的主旨在於協助您開始使用 JScript。

使用 JScript

JScript 是一個直譯型、並以物件為基礎的 Scripting 語言。雖然它的功能比有資格稱為物件導向的語言 (例如 C++ ) 還要來得少，但是就其所要達到的目的而言，JScript 的功能卻更為強大。

JScript 並不是另一個語言的縮減版 (它與 Java 之間並沒有什麼直接關連)，而且也不是其他任何軟體的簡化版。不過，它仍有一些限制。舉例來說，您無法使用它撰寫一些獨立式應用程式，而且它也沒有支援讀取或撰寫檔案的內建功能。JScript scripts 甚至只能在直譯程式或"主機"上執行，如Active Server Pages (ASP)，Internet Explorer，或Windows Script Host。

JScript 的語言型態並不嚴謹。這表示您不需要非常明確地宣告變數的資料型態。事實上，JScript 的做法更進一步的讓您無法在JScript中明確地宣告資料型態。在許多情況下，JScript 會在需要時自動執行轉換。例如，您如果在文字 (字串) 所組成的項目中加入一個數字，這個數字就會轉換成文字。

至於本使用者指南的其他部份，則是有關 JScript 功能的概述。有關程式語言執行的完整資訊，請參閱程式語言參考。

備註 在接下來的許多範例中，程式碼要比您在實際Web網頁中可能看到的程式碼來得更加明確、簡單。本自學課程的主要目的不是要炫耀陳述編碼的簡潔程度和樣式，而是要給您明確的觀念。無論如何，日後您能讀取和了解六個月前撰寫的程式碼，無須感到難堪。


撰寫 JScript 程式碼

Microsoft JScript 和其他許多程式設計語言一樣，都是以文字格式撰寫而成，並組織成各個陳述式 (包含相關陳述式的區塊) 和註解。您可以在陳述式中使用變數、立即的資料，如字串和數字（稱為"字串"）以及運算式。

陳述式

JScript 程式是許多陳述式的集合。一個JScript 陳述式就相當於英文中的一個句子。JScript 陳述式以這樣的方式結合運算式，使它們可以執行完整的任務。

陳述式由一個或多個運算式，關鍵字，或運算子（符號）構成。雖然陳述式可以寫成多行，但是一般而言，陳述式還是寫成單行。同樣的，兩個或兩個以上的陳述式也可以用分號隔開寫在同一行裡。通常，新的一行開頭就是新的陳述式。最好是明確結束陳述式。您可以使用分號 (;)，它也是代表JScript 陳述式終結的字元。這裡有兩個 JScript 陳述式的範例。

aBird = "Robin"; // 指派文字"Robin" 到變數aBird
var today = new Date(); // 指派今天的日期到變數today

利用大括號 ({}) 括住的一組 JScript 陳述式叫作區塊。位於同一個區塊的陳述式族群可以視為是單一陳述式。這表示您可以在大多數JScript 預期單一陳述式的地方使用區塊。其他顯著的例外情形則包含有for 和while 迴圈的標題。注意一個區塊中的主要陳述式會以分號結束，可是區塊本身卻不是這樣。

一般而言，陳述式區塊可用於函數和條件式中。注意跟C++ 和其他一些語言不同的是，JScript 並不將區塊視為新的範圍；只有函數才會建立新範圍。下面的範例中，第一個陳述式是某函數定義的開始，該函數包含五個陳述式的區塊。接下來是三個沒有加上大括號的陳述式；這些陳述式並不是一個區塊，因此也不是函數定義的一部分。

function convert(inches) {
   feet = inches / 12; //此5個陳述式屬於同一個區塊。
   miles = feet / 5280;
   nauticalMiles = feet / 6080;
   cm = inches * 2.54;
   meters = inches / 39.37;
}
km = meters / 1000; //此3個陳述式不包括在同一區塊中。
kradius = km;
mradius = miles;

註解

單行的 JScript 註解是以一對斜線 (//) 作為開頭。這裡是一個單行註解的範例。

aGoodIdea = "Comment your code thoroughly.";  //  這是一個單行註解。

多行的JScript 註解是以一個斜線和星號作為開頭(/*)，並且以星號在前，斜線在後(*/)作為結束。

/*
這是一個多行註解，說明之前的程式碼陳述式。

陳述式指派一個值到aGoodIdea變數。這個包含在括號之間的值稱為一個常值。一個常值並非間接的引用訊息，而是直接且明確地包括訊息。括號並非常值的一部份。
*/
備註 如果想要把一個多行註解嵌入另一個註解，JScript 會以一種預料外的方式解譯最後的多行註解。標示嵌入多行註解結尾的*/ 會被解譯為整個多行註解的結尾。這表示跟在嵌入多行註解之後的文字會被排除在註解之外，而解譯為JScript 程式碼，這樣一來，就產生了語法上的錯誤。

建議您把所有的註解寫成單行註解的區塊。如此一來，您就可以在稍後把程式碼較大的部分寫成多行註解。

// 這是另一行多行註解，寫成一系列的單行註解。
// 在陳述式執行後，可以引用aGoodIdea的內容。
// 使用本身名稱的變數，如同在下一個陳述式中，字串常值就是
// 利用連結方式建立的一個新變數而附加到aGoodIdea 變數。

var extendedIdea = aGoodIdea + " You never know when you'll have to figure out what it does.";

指定和等式

JScript 陳述式中使用等號 (=) 指派值到變數中:它就是指派運算子。= 運算子左邊一律是Lvalue。Lvalues的幾個例子是:

  • 變數，
  • 陣列元素，
  • 物件屬性。

= 運算子的右邊一律是Rvalue。Rvalue 可以是任何型別的任意值，包括運算式的值。這裡是一個JScript 指派陳述式的例子。

anInteger = 3;

JScript 編譯器將這個陳述式解譯為「將 anInteger 變數的值指定為 3」或「anInteger 的值等於 3」。

確定您了解= 運算子 (指定) 和== 運算子(等於)之間的差異。當您要比較兩個值以知道它們是否相等，請使用兩個等號(==)。這個部分在控制程式流程中會有詳細的說明。

運算式

JScript 運算式是Jscript的一個「詞組」，JScript 直譯程式可以利用它得出一個值。這個值可以是任何有效的JScript 型別 - 一個數字，字串，物件等等。最簡單的運算式是常值。這裡是幾個JScript 常值運算式的例子。

3.9                       // 數值常值
"Hello!"                  // 字串常值
false                     // 布林常值
null                      // null常值
{x:1, y:2}                // 物件常值
[1,2,3]                   // 陣列常值
function(x){return x*x;}  // 函數常值

更複雜的運算式還包含了變數，函數呼叫，以及其他運算式。您可以使用運算子以結合數個運算式成為複合運算式。運算子的例子如下：

+  // 加法
-  // 減法
*  // 乘法
/  // 除法

這裡是幾個JScript 複合運算式的例子。

var anExpression = 3 * (4 / 5) + 6;
var aSecondExpression = Math.PI * radius * radius;
var aThirdExpression = aSecondExpression + "%" + anExpression;
var aFourthExpression = "(" + aSecondExpression + ") % (" + anExpression + ")";


JScript 變數

在任何程式語言裡，一個概念會使用資料加以量化。

How old am I?

在 Jscript 中，給予概念的名稱就是變數；它代表了一個個體執行的值。使用這個變數，其實是使用變數代表的資料。這裡有一個例子：

NumberOfDaysLeft = EndDate – TodaysDate;

從機制方面來說，變數用來儲存、擷取、操作各種出現在 Script 中不同的值。如果給予變數有意義的名稱，可以讓人們更易於了解 Script 所做的事。

宣告變數

一個變數第一次出現在 Script 中就是它的宣告。這次的出現會使變數安置在記憶體中，便於您稍後在 Script 中使用。請務必在使用變數之前先用 var 關鍵字宣告變數。

var count;  // 單個宣告。
var count, amount, level;  // 以一個 var 關鍵字宣告多個變數。
var count = 0, amount = 100;  // 一個陳述式的變數宣告與初始化。

如果不在 var 陳述式中初始化變數，此變數會自動顯示 undefined 的 Jscript 值。雖然這樣做並不安全，宣告陳述式中省略 var 關鍵字卻是合法的 JScript 語法。 此時，JScript 直譯程式將使得變數出現在全域範圍。不過當您在程序階層宣告變數時，如果不想讓變數出現在全域範圍，您就必須在宣告變數時使用 var 關鍵字。

命名變數

變數名稱是識別項。在Jscript中，識別項用來：

  • 命名變數，
  • 命名函數，
  • 提供迴圈的標籤。

JScript 是大小寫相異的語言。也就是說，一個名為 myCounter 的變數跟一個名為 MYCounter 的變數是不同的。變數名稱的長度不限。下列是幾項建立合法變數名稱的原則：

  • 第一個字元必須是ASCII字母 (大小寫皆可)、底線 (_)字元。注意數字不能拿來當第一個字元。
  • 後面的字元必須是字母、數字、或底線。
  • 變數名稱不能為保留字。

這裡是一些正確變數名稱的例子：

_pagecount
Part9
Number_Items

這裡是一些不正確變數名稱的例子：

99Balloons // 不能以數字開頭。
Smith&Wesson // (&) 字元不是正確的變數名稱字元。

當您想要宣告並初始化一個變數，可是又不想給它特定的值，您可以指定其 JScript 值為 null 裡有個例子。

var bestAge = null;
var muchTooOld = 3 * bestAge; // muchTooOld 的值為 0。

如果宣告了一個變數，但沒有指定值，那麼這個變數確實存在，只是其 Jscript 值為 undefined。這裡有個例子。

var currentCount;
var finalCount = 1 * currentCount; // finalCount 的值是 NaN，因為 currentCount 未定義。

注意在 JScript 中 null 和 undefined 最大的不同是， null 就好比數字 0，而 undefined 好比特殊值 NaN (非數字)。null 值和 undefined 值經比較後一律相等。

宣告變數時可以省略 var 關鍵字，並為它指定一個值。 這是不明確的宣告。

noStringAtAll = ""; // 不明確地宣告變數 noStringAtAll。

未經宣告的變數不能使用。

var volume = length * width; // 錯誤 - 長度與寬度不存在。

強制轉換

JScript 直譯程式只能評估運算元的資料型態相同的運算式。如果沒有強制轉換，執行兩種不同資料型態的運算式 (例如一個數字和一個字串) 會產生錯誤結果。Jscript 卻不是這樣。

JScript 的語言架構不夠嚴謹。這代表 JScript 的變數並沒有固定的型態 (相對於嚴謹的架構像 C++ 語言)。JScript 變數的型態即相當於其所包含之值的型態。這有一個好處，就是在您決定它的值為何種型態時，有了很大的彈性空間。

當您在 Jscript 中同時執行好幾種不同類型的值時，不用害怕 JScript 直譯程式會出問題。因為 Jscript 直譯程式會自動地將一種資料類型轉換 (強制轉換) 成另一種，然後再執行。例如：

執行 | 結果
增加一個數字和字串 | 數字強制轉換成字串。
增加一個布林和字串 | 布林強制轉換成字串。
增加一個數字和布林 | 布林強制轉換成數字

再想想下面的例子。

var x = 2000;      // 一個數字。
var y = "Hello";   // 一個字串。
x = x + y;         // 強制轉換成字串的數字。
document.write(x); // 輸出 2000Hello。

若要明確將字串轉換成整數，請使用parseInt 方法。要明確將字串轉換成數字，請使用 parseFloat 方法。注意為了比較，字串會自動轉換成相等的數字，但是字串會保留作為加法的運算 (連結)。


JScript 資料型態

JScript 有三種基本資料型態，兩種組合資料型態，以及兩種特殊資料型態。

基本的資料型態是：

  • 字串
  • 數字
  • 布林

組合 (引用) 資料型態是：

  • 物件
  • 陣列

特殊資料型態是：

  • Null
  • Undefined

String 資料型態

字串值是一串由 0 個或 0 個以上的 Unicode 字元(字母，小數點和標點符號)結合而成。字串資料型態可以用來表示Jscript的文字內容。把字串常值括在相符的單括號或雙括號裡，就可以把字串常值包含在 Script 中了。雙括號可以包含在括在單括號的字串裡，而單括號也可以包含在括在雙括號的字串裡。下列是字串的範例：

"Happy am I; from care I'm free!"
'"Avast, ye lubbers!" roared the technician.'
"42"
'c'

注意 JScript 並沒有代表單一字元的型態。在 Jscript 中如果要代表單一字元的型態，可以建立只含一個字元的字串。含 0 個字元的字串 ("") 是一個空白(長度為 0) 的字串。

數字資料型態

Jscript 中的整數和浮點值並無明顯區分；兩者都可以作為 JScript 數字 (JScript 內部把所有的數字表示成浮點值)。

整數值

整數可以是正的、負的或 0。它們可以以基數 10 (十進位)、8 (八進位)、和16 (十六進位)的方式呈現。JScript 大部分的數字都寫成十進位。 八進位的數字以 0 開頭，只包含數字0 到7。 如果有一個數字的開頭是 "0"，但卻也包含數字 "8" 和 / 或 "9"，那麼它就是一個小數數字。

十六進位("hex") 的整數以"0x" (0和 x|X) 開頭。 只包含了數字0 到9，和字母A 到F (不論大小寫)。字母 A 到 F就像單個小數點， 分別代表以 10 為基數的數字 10 到 15。也就是說，0xF 等於 15，而 0x10 等於 16。

八進位和十進位的數字可以是負數，但是不能有小數部分，而且也不能以科學表示法（指數）寫成。

浮點值

浮點值可以是整數加上小數。此外，它們也可以用科學表示法來表示。也就是說，大寫或小寫的 "e" 都可以表示 「10的次方」。JScript 使用八進位IEEE 754浮點標準的數值表示法來表示數字。也就是說，您可以寫出大到像?.7976931348623157x10308，和小到像 ?x10-324 的數字。以 "0" 開頭，而且包含小數點的數字，就稱為小數浮點數。

注意如果數字以 "0x" 或 "00" 開頭並包含小數點，就會產生錯誤。這裡是一些JScript 數字的範例。

數字 | 說明 | 十進位表示法
.0001, 0.0001, 1e-4, 1.0e-4 | 4 個浮點數，值皆相等。 | 0.0001
3.45e2 | 一個浮點數。 | 345
42 | 一個整數。 | 42
0378 | 一個整數。雖然看起來像八進位數字(以0開頭)，8 不是正確的數字，所以這個數字是十進位數字。 | 378
0377 | 一個八進位整數。注意它雖然只比上面的數字小1，它真正的值卻截然不同。 | 255
0.0001 | 一個浮點數字。即使以0開頭，它卻不是八進位數字，因為它有一個小數點。 | 0.0001
00.0001 | 這是一個錯誤。開頭的兩個0顯示它是個八進位數，可是八進位數字是不能有小數點的。. | N/A (編譯器錯誤)
0Xff | 十六進位的整數。 | 255
0x37CF | 十六進位的整數。 | 14287
0x3e7 | 十六進位的整數。注意 'e' 並不是指數。 | 999
0x3.45e2 | 這是一個錯誤。十六進位數字不能有小數部分。 | N/A (編譯器錯誤)

此外，JScript 還有一些特殊數值如下︰

  • NaN (非數字)。 用不正確的資料，像字串或未定義的值執行數學運算時，就會使用這個數值
  • 正的無限大。 當正數大到無法顯示在Jscript中時，就會使用這個數值
  • 負的無限大。當負數大到無法顯示在Jscript中時，就會使用這個數值
  • 正負 0。JScript 區分正 0 和負 0。

布林資料型態

儘管字串和數字資料型態實際上有各種不受限制的值，布林資料型態卻只能有 2 種值，那就是 true 和 false。 布林值是 truth — 陳述情況的確認 (說明情況是否為 true )。

在Scripts 中作比對時，一律得出布林值的結果。想想下行的JScript 程式碼。

y = (x == 2000);

在這裡，檢查變數x 的值是否等於數字2000。如果是，比對結果就是布林值true，也就是變數y的值。 如果x 不等於數字2000，比對出來的布林值就是false。

布林值在控制結構中特別有用。在這裡，把一個創造出布林值的比對，直接與使用布林值的陳述式結合。想想下列的 JScript 程式碼範例。

if (x == 2000)
    z = z + 1;
else
    x = x + 1;

當布林值是true (此時，z = z + 1)，JScript 的if/else 陳述式會執行一個動作，如果布林值是false，則執行另一個動作 (x = x + 1)。

任何運算式都可以當成比較運算式。任何得出0、null、undefined或是空白字串的運算式，其值都是false。得出其他值的運算式則視為true。 例如，您可以使用這樣的運算式：

if (x = y + z) // 不是你要的結果 — 請看下面！

注意上一行並未檢查 x 是否等於y + z，因為只使用了一個等號 (指定) 。相反的，如果上面的程式碼把y + z的值指定給變數x，然後檢查整個運算式的結果值(x的值)是否為0。要檢查x 是否等於y + z，請使用下列的程式碼。

if (x == y + z) // 不同於上面的程式碼！

有關比較的詳細資訊，請參閱控制程式流程。

Null 資料型態

JScript 的null 資料型態只有一個值：null。null 關鍵字不能拿來作為一個函數或變數的名稱。

一個包含null的變數，就是"無值" 或 "無物件"。換句話說，它是無效的數字、字串、布林值、陣列、或物件。您可以指定變數的值為null以刪除這個變數的內容，但又不刪掉這個變數。

注意 Jscript 中的 null 不同於0 (就像C 和 C++中的null一樣)。還有Jscript的typeof 運算子會把null 值視為 type 物件，而非type null。 這種可能導致混淆的行為，是為了跟以往的版本相容所致。

Undefined 資料型態

遇到下列情況，會傳回未定義的值。也就是使用：

  • 不存在的物件屬性，
  • 已經宣告，但未指定值的變數。

注意不能把變數拿來跟為定義的值比對，檢測這個變數是否存在，雖然您可以藉此檢查這個變數的型態是否為 "undefined"。從下列的程式碼範例中， 可以推測這個程式設計者嘗試要檢測變數x 是否已宣告：

// 此方法無用
if (x == undefined)
    // 嘗試別的辦法

// 這個方法也沒用 – 請檢查
// 字串"undefined"
if (typeof(x) == undefined)
    // 嘗試別的辦法

// 這個辦法行的通
if (typeof(x) == "undefined")
    // 嘗試別的辦法

試著比較未定義的值和null。

someObject.prop == null;

比較結果為true，

  • 如果 someObject.prop 屬性是 null值，
  • 如果 someObject.prop 屬性不存在。
  • 要檢查一個物件屬性是否存在，可以使用新的 in 運算子：
if ("prop" in someObject)
    //someObject 具有 'prop' 屬性。


JScript 運算子

JScript 具有相當完整的運算子，其中包含算術、邏輯、位元和指定運算子，以及一些其它的運算子。

計算運算子

說明 | 符號
一元負數 | -
遞增 | ++
遞減 | —
乘號 | *
除號 | /
模數算數 | %
加號 | +
減號 | -

邏輯運算子

說明 | 符號
邏輯 NOT | !
小於 | <
大於 | >
小於或等於 | <=
大於或等於 | >=
等於 | ==
不等於 | !=
邏輯 AND | &&
邏輯 OR | ||
條件式 (三元) | ?:
逗號 | ,
恆等式 | ===
非恆等式 | !==

位元運算子

說明 | 符號
位元 NOT | ~
位元左移 | <<
位元右移 | >>
不帶正負號的右移 | >>>
位元 AND | &
位元 XOR | ^
位元 OR | |

指定運算子

說明 | 符號
指定 | =
複合指定 | OP=

其他運算子

說明 | 符號
delete | delete
typeof | typeof
void | void
instanceof | instanceof
new | new

== (等於) 和=== (恆等) 的不同在於等於運算子會強制轉換不同型態的值，然後再進行比較。例如， 比較字串"1" 和數字1 的結果是true。另一方面，恆等運算子卻無法這麼做，因此字串"1"不會等於數字1。

主要字串、數字和布林以值做比較。如果值相同，它們就是相等的。物件 (包括 Array、Function、String、Number、Boolean、Error、Date 和RegExp 物件)則以引用來做比較。 如果這些型態的其中兩個變數有相同值，當這兩個變數引用的是同一個物件時，它們比較的結果只能是true。

例如：

// 兩個主要字串的值相同。
var string1 = "Hello";
var string2 = "Hello";

// 兩個String物件的值相同。
var StringObject1 = new String(string1);
var StringObject2 = new String(string2);

// 結果為true。
if (string1 == string2)
     // 嚐試別的辦法(即將執行)

// 結果為false。
if (StringObject1 == StringObject2)
    //嚐試別的辦法(即將執行)

// 比較兩個String 物件的值，
// 使用toString()或valueOf()方法。
if (StringObject1.valueOf() == StringObject2)
     //嚐試別的辦法(即將執行)


運算子優先順序 (JScript)

JScript

運算子優先順序

運算子優先順序是Jscript的一組規則。控制著運算式進行時，運算執行的順序。優先權較高的運算會比優先權較低的運算先執行。例如，乘法優先於加法。

下表依最高到最低的優先順序來列出運算子。同一列中的運算子會按照從左到右的順序來評估。

運算子 | 說明
. [] () | 欄位存取、陣列索引、函數呼叫和運算式群組
++ — - ~ ! delete new typeof void | 一元運算子、傳回資料型態、物件建立、未定義的值
* / % | 乘法、除法、模數除法
+ - + | 加法、減法、字串串連
<< >> >>> | 位元移位
< <= > >= instanceof | 小於、小於或等於、大於、大於或等於、instanceof
== != === !== | 等於、不等於、恆等、非恆等
& | 位元AND
^ | 位元XOR
| | 位元OR
&& | 邏輯AND
|| | 邏輯OR
?: | 條件式
= OP= | 指定、含運算的指定
, | 多重評估

括弧是用來改變由運算式決定的評估順序。這代表括弧內的運算式會在其值用於陳述式的其他部分之前先進行評估。

例如：

z = 78 * (96 + 3 + 45)

在此運算式中有五個運算子：=、*、()、+ 和另一個+。根據運算子優先順序的原則，它們的評估順序是：()，+，+，*，=。

  1. 括弧內的運算式會第一個進行評估： 其中有兩個加號運算子，它們的優先權是相同的，從左而右評估這個運算式。96 加 3 然後再加上 45，結果就是 144。
  2. 乘法會第二個進行：78乘於144就等於 11232。
  3. 指定會最後進行：將 11232 指定給 z。


控制程式流程

通常，JScript 指令碼的陳述式是按照撰寫的順序一個接著一個執行。這叫做循序執行，而且是程式流程預設好的行進方向。

有一種方式可以把程式流程的循序執行轉換成指令碼的另一部份。那就是，不要執行循序執行中的下一個陳述式，而改成執行別的陳述式。

這種控制轉換必需合乎邏輯，指令碼才能發揮作用。程式控制的轉換是依據真實的陳述式(傳回一個true 或false的布林值)來決定。建立一個運算式，然後測試其結果是否為true。完成這個工作需要兩種程式結構。

第一個是選項結構。使用這個結構指定程式流程的交互使用路徑，建立程式的連結(就像路的分岔)。Jscript裡有4個選項結構可供使用。

  • 單一選項結構 (if)，
  • 雙重選項結構(if/else)，
  • 內建的三元運算子?:
  • 多重選項結構(switch)。

第二種程式控制結構是重複結構。使用這個結構指定當某種情況為true 時，重複執行某個動作。當有符合控制陳述式描述的情況時(通常是在經過一些迭代後)，控制項就會傳到下一個重複結構後的陳述式。Jscript裡有4個重複結構可供使用。

  • 迴圈開頭的時候檢查運算式 (while)，
  • 在迴圈結尾檢查運算式(do/while)，
  • 對物件的每一個屬性執行 (for/in)。
  • 計算重複的次數 (for)。

您可以建立複合的指令碼，把選項結構與重複結構放在一起。

第三種程式流程的結構是由例外事件處理所提供的，但是不包含在此參考文件中。

使用條件式陳述式

JScript 支援 if 和 if...else 條件式陳述式。在 if 陳述式中將會測試某一個條件，而此條件如果符合測試，那麼就會執行相對應的 JScript 程式碼 。但在 if...else 陳述式中，如果此條件與測試不符，那麼就會執行不同的程式碼。將 if 陳述式寫成一行算是最簡單的形式，不過多行的 if 和 if...else 陳述式則比較常見。

下列各範例中顯示能與 if 和 if...else 陳述式搭配使用的一些語法。第一個範例顯示最簡單的布林測試。若 (且唯若) 括弧中的項目評估為（或強制轉換為）true 時，就會執行 if 後面的陳述式或陳述式區塊。

//smash()函數定義於程式碼某處。
//測試 newShip 是否為 true 的布林測試。
if (newShip)
   smash(champagneBottle,bow);

//在此例中，除非兩個條件皆為 true，否則測試會失敗。
if (rind.color == "deep yellow " && rind.texture == "large and small wrinkles")
{
   theResponse = ("Is it a Crenshaw melon?");
}

//在此例中，若有任一條件為 true，測試便成功。
var theReaction = "";
if ((dayOfWeek == "Saturday") || (dayOfWeek == "Sunday"))
{
   theReaction = ("I'm off to the beach!");
}
else
{
   theReaction = ("Hi ho, hi ho, it's off to work I go!");

}

條件式運算子

JScript 也支援隱含的條件形式。它會在將要測試的條件後面加上一個問號 (而不是在條件的前面使用 if 這個字)，同時也指定兩個選項，一個用在條件相符時，另一個則用在條件不相符時。這兩個選項之間必須以一個冒號分隔開來。

var hours = "";

// 指定 hours 包含 theHour 或 theHour - 12
// 的值。

hours += (theHour >= 12) ? " PM" : " AM";

如果要同時檢查好幾種情況，而且已經知道哪一種比較可能成功，哪一種比較可能失敗， 可以使用一個叫做「評估捷徑」的功能加快Script的執行速度。當 JScript 評估一個邏輯運算式時，它只會評估到足以得出結果的子運算式個數。

例如，如果有一個 andAnd' 運算式 ((x == 123) && (y == 42))，JScript 首先檢查 x 是否為 123。如果不是，整個運算式的結果就不是 true，即使 y 等於42。因此，JScript 不會檢查y，而直接傳回 false值。

同樣的，如果好幾個情況中的一個必定為true (使用|| 運算式)，在任何一個情況通過時，檢查會立即停止。 這在要檢查的情況中有函數呼叫執行或其他複合運算式時特別有效。有了這個概念，在撰寫Or 運算式時，可以先從情況較有可能為true 的開始寫起。在撰寫And 運算式時，則從情況較有可能為false 的開始寫起。

這樣設計Script 的好處為：在下列的例子中，如果runfirst() 傳回 0 或 false，就不會執行 runsecond() 。

if ((runfirst() == 0) || (runsecond() == 0)) {
    // 某個程式碼
}

使用迴圈

重複執行一個陳述式或陳述式區塊的方法有好幾種。一般而言，重複執行就稱為迴圈或迭代。執行一次的迴圈叫做迭代。它通常是透過某個變數的測試來控制，每次執行迴圈時，這個值就會變更。JScript 支援以下各種類型的迴圈︰for 迴圈、for...in 迴圈、while 迴圈、do...while 迴圈。

使用 for 迴圈

for 陳述式會指定一個計數變數、一個測試條件，以及一個會更新計數變數的動作。在每一次要執行迴圈之前，都會測試條件。如果條件通過了，迴圈裡的程式碼就會執行。如果沒有通過，就不會執行，而且程式會停留在迴圈之後的第一行程式碼。在執行迴圈之後，就會更新這個計數變數，然後再開始下一個迭代。

如果執行迴圈的條件一直無法相符，就不會執行這個迴圈。如果測試條件一直符合的話，就會產生無限迴圈。前者的迴圈在某些情況下會需要使用，而後者的無限迴圈則儘量避免，所以在撰寫迴圈條件時請特別注意。

/*
在迴圈末端執行("icount++" in the following examples)
更新的運算式，此執行發生在檢查條件之前，形成迴圈主體的陳述式區塊執行之後。
*/

var howFar = 10; // 設定10次迴圈的限制。
var sum = new Array(howFar); // 建立一共有10個成員的陣列，從0到9。
var theSum = 0;
sum[0] = 0;

for(var icount = 0; icount < howFar; icount++) { // 此時從0計數到9。
theSum += icount;
sum[icount] = theSum;
}

var newSum = 0;
for(var icount = 0; icount > howFar; icount++) { // 完全不執行，因為icount 不大於 howFar
newSum += icount;
}

var sum = 0;
for(var icount = 0; icount >= 0; icount++) { // 這是個無限的迴圈。
sum += icount;
}

使用 for...in 迴圈

JScript 提供一種特殊類型的迴圈，可處理一個物件的所有使用者自訂的屬性，或是處理陣列裡的所有元素。在 for...in 迴圈中的迴圈計數器是一個字串，而不是一個數字。其中包含了目前陣列元素的索引或是目前的屬性名稱。

下列的程式碼範例應該在Internet Explorer中執行，因為它使用了alert 方法，這個方法並不是Jscript的一部份。

// 建立具有一些屬性的物件。
var myObject = new Object();
myObject.name = "James";
myObject.age = "22";
myObject.phone = "555 1234";

// 列舉物件中的(循環)_所有屬性
for (prop in myObject)
{
    // 顯示"屬性'名稱'為James"??等等。
    window.alert("The property '" + prop + "' is " + myObject[prop]);
}

雖然for...in 迴圈看來類似VBScript的For Each...Next 迴圈，但兩者的功能不同。Jscript的for...in 迴圈針對JScript 物件的屬性迭代。VBScript的For Each...Next 迴圈卻是針對一個集合物件中的項目迭代。 要迭代Jscript中的集合物件，必須使用Enumerator 物件。即使有些物件，像Internet Explorer中的物件，可以同時支援VBScript的For Each...Next 和Jscript的for...in 迴圈，大多數的物件卻非如此。

使用 while 迴圈

while 迴圈類似 for 迴圈。兩者所不同的是，while 迴圈沒有內建式計數變數或更新運算式。如果想要控制陳述式或陳述式區塊的重複執行，但是需要一個功能更多的規則，而不只是"執行這個程式碼n次"的話，請使用while 迴圈。下列範例使用 Internet Explorer 物件與while 迴圈來請教使用者一個簡單的問題。

var x = 0;
while ((x != 42) && (x != null))
{
    x = window.prompt("What is my favourite number?", x);
}

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");
備註 由於 while 迴圈沒有明確的內建式計數變數，因此甚至比其他類型的迴圈更容易造成無限迴圈。甚至因為不易察覺迴圈條件所更新的位置和時間，所以容易撰寫出不能更新條件的 while 迴圈。所以，在設計 while 迴圈時，應該要特別地謹慎。

就像在以上注意到的，JScript 中的do...while迴圈也很類似while 迴圈，除了do...while迴圈可以保證至少執行一次，因為是在迴圈的末端才檢查條件，而不是在開端。例如，以上的迴圈可以改寫成：

var x = 0;
do
{
    x = window.prompt("What is my favourite number?", x);
} while ((x != 42) && (x != null));

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");

使用 break 和 continue 陳述式

在Microsoft Jscript中，如果某個 (假設非常特殊的) 條件符合的話(注意break 也用來跳離一個switch 區塊)，用break 陳述式來停止迴圈執行的陳述式。如果此迴圈是 for 或 for...in 迴圈的話，就可使用 continue 陳述式立即跳到下一次迭代，以便跳過剩下的程式碼區塊而仍然照常更新計數變數。

以下範例建立在前一個範例的基礎上，使用break 和continue 陳述式來控制迴圈。

var x = 0;
do
{
    x = window.prompt("What is my favourite number?", x);

    // 使用者取消了嗎？如果取消了，退出迴圈
    if (x == null)
        break;

    // 他們輸入數字了嗎？
    // 如果是，不用再要求他們輸入數字。
    if (Number(x) == x)
        continue;

    // 要求使用者只能輸入數字
    window.alert("Please only enter in numbers!");

} while (x != 42)

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");


JScript 函數

Microsoft JScript 函數執行動作；它們也可以傳回值。有時候值是計算或比較的結果。函數又稱為「全域方法」。

函數會結合同一個名稱下面的數個動作，這能讓程式碼更有效率。您也可以撰寫一組陳述式，為它命名，然後在您想要的時間執行整組陳述式，只要先呼叫它，並傳送一些它所需要的資訊即可。

若要為函數傳送一些資訊，只要將資訊加上括號，並放在此函數名稱的後面即可。那些要傳送到函數的資訊片段，就稱為引數或參數。有些函數並不具有任何引數；有些函數帶有一個或數個引數。有些函數的引數個數，是視您如何使用此函數而定。

JScript 可支援兩種函數︰一種是內建在語言中的函數，另一種是自訂的函數。

特殊的內建函數

在 JScript 語言中有一些內建函數。其中有一些能讓您處理運算式和特殊字元，還有一些能將字串轉換成數值。一個非常有用的內建函數是 eval()，它能評估任何以字串形式出現在Jscript中的有效程式碼。eval() 函數會取一個引數來評估程式碼。這裡是一個使用這個函數的範例。

var anExpression = "6 * 9 % 7";
var total = eval(anExpression); // 指定變數總數為5。
var yetAnotherExpression = "6 * (9 % 7)";
total = eval(yetAnotherExpression) // 指定變數總數為12。
// 指定總數為一字串。(注意括弧)
var totality = eval("'...surrounded by acres of clams.'");

想知道更多相關訊息與內建函數，請參閱語言參考。

建立自訂函數

您可以建立自己的函數，並在需要的時候使用它們。一個函數定義是由一個函數陳述式以及一個Jscript陳述式的區塊所組成。

在下面的範例中，checkTriplet 函數會取三角形各邊的長度當作它的引數，以及利用檢查此三個數字是否構成畢氏定理的條件，從中計算此三角形是否為直角三角形 (畢氏定理︰直角三角形最長一邊的平方等於另兩邊的平方和)。checkTriplet 函數會呼叫另兩個函數的其中一個來進行實際測試。您可以建立自己的函數，並在任何需要的地方使用它們。函數定義是由一個函數陳述式和一個 JScript 陳述式的區塊所組成。

請注意，在浮點數版本的測試中，會將一個非常小的數字 ("epsilon") 當作測試變數來使用。此乃因為在浮點計算中具有不確定性和捨入錯誤，如果直接測試這三個數是否構成畢氏定理的話，將會非常不實用，除非您能先確定這三個值都是整數。因為直接測試如果愈精確的話，下面範例中的程式碼就愈能決定它是否正確，如果邊的值是整數，就使用函數。

var epsilon = 0.00000000001; // 測試某個非常小的數。

// 用來測試整數的函數。
function integerCheck(a, b, c)
{
   // 測試本身。
   if ( (a*a) == ((b*b) + (c*c)) )
      return true;

   return false;
} // 測試整數的函數結尾。

// 測試浮點數的函數。
function floatCheck(a, b, c)
{
   // 創造測試數字。
   var delta = ((a*a) - ((b*b) + (c*c)))

   // 此測試需得出絕對值
   delta = Math.abs(delta);

   // 如果差異小於空串（epsilon），那麼值就很接近。
   if (delta < epsilon)
      return true;

   return false;
} //測試浮點數的函數結尾。

// 測試三角形（triplet）。
function checkTriplet(a, b, c)
{
   // 建立一個交換值的暫時變數
   var d = 0;

   // 首先，將最長的邊移到"a"位置。

   // 如果有必要，交換a 和b
   if (b > a)
   {
      d = a;
      a = b;
      b = d;
   }

   // 如果有必要，交換a和c
   if (c > a)
   {
      d = a;
      a = c;
      c = d;
   }

   // 測試三個數字。它們是整數嗎？
   if (((a % 1) == 0) && ((b % 1) == 0) && ((c % 1) == 0))
   {
      // 如果是，請使用精確的測試。
      return integerCheck(a, b, c);
   }
   else
   {
      // 如果不是，請盡量取得一合理的值。
      return floatCheck(a, b, c);
   }
} // 三角形測試函數的結尾。

// 接下來的三個陳述式指定範例值以供測試。
var sideA = 5;
var sideB = 5;
var sideC = Math.sqrt(50.001);

// 呼叫函數。呼叫後'result'內含結果。
var result = checkTriplet(sideA, sideB, sideC);


JScript 物件

JScript物件是屬性和方法的集合物件。方法是屬於物件成員的一種功能，屬性則是屬於物件成員的一個或一組值 (以陣列或物件形式表示)。JScript 支援三種物件：內建物件，使用者建立的物件，主機提供的主機物件(像Internet Explorer中的window 和 document) 和 Active X 物件(外部元件)。

陣列形式的物件

在 JScript 中，物件和陣列的處理方式是一樣的。兩者都可以指定任意的屬性，而陣列的確也只是一種特殊的物件。Array和Object的不同在於陣列有一種"神奇的"length屬性，而物件沒有。這代表如果您指定一個值給一個陣列中最大的元素— 例如myArray[100] = "hello" — 那麼length屬性會自動更新為101(新長度)。同樣的，如果修改陣列的 length 屬性，它會刪除陣列中其他比這個屬性小的元素。

JScript 中的所有物件都支援"expando" 屬性，或是在執行階段可以機動地增加或移除的屬性 。這些屬性可以是任何名稱，包括數字。如果屬性名稱是一個簡單的識別項<<ref for identifier rules>>，可以跟一個句點一起寫在物件名稱的後面，如：

var myObj = new Object();

// 增加兩個expando 屬性，'name'和'age'
myObj.name = "Fred";
myObj.age = 42;

如果屬性名稱不是一個簡單的識別項，或者您在撰寫Script時還不知道這個名字，您可以在方括號中使用任意運算式來標示屬性的索引。Jscript中所有expando 屬性的名稱都會先轉成字串，再加到物件上。

var myObj = new Object();

// 增加兩個不能用object.property 語法撰寫的
// expando 屬性。
// 第一個屬性內含無效字元(空白)，所以必須
// 寫在方括號中。
myObj["not a valid identifier"] = "This is the property value";

// 第二個expando 名稱是一個數字，所以必須
// 放在方括號中。
myObj[100] = "100";

傳統上，陣列元素是索引數值，從0開始。這些元素與length 屬性互動。然而，因為所有的陣列都是物件，所以也都支援expando 屬性。不過請注意，expando 屬性並不是在各方面都與length 屬性互動。例如：

//一個陣列有三個元素。
var myArray = new Array(3);

//增加一些資料
myArray[0] = "Hello";
myArray[1] = 42;
myArray[2] = new Date(2000, 1, 1);

//顯示3，是陣列的長度
window.alert(myArray.length);

//增加一些expando 屬性
myArray.expando = "JScript!";
myArray["another Expando"] = "Windows";

//仍然顯示3，因為這兩個expando屬性
// 不會影響長度
window.alert(myArray.length);

雖然JScript 不直接支援多維的陣列，陣列元素中卻能儲存任何類型的資料 — 包括其他陣列。所以把陣列儲存在另一個陣列的元素中，可以取得多維陣列的行為。例如， 下列的程式碼建立了一個維數多達5的表格：

// 改變數字以建立更大的表格。
var iMaxNum = 5;
// 迴圈計數器
var i, j;

// 新陣列。陣列一開始就變成iMaxNum + 1
// 從0開始算起，不是從1。
var MultiplicationTable = new Array(iMaxNum + 1);

// 主要數字的迴圈(表格的每一列)
for (i = 1; i <= iMaxNum; i++)
{
    // 在表格中建立欄位
    MultiplicationTable[i] = new Array(iMaxNum + 1);

    // 把相乘的結果填入列
    for (j = 1; j <= iMaxNum; j++)
    {
        MultiplicationTable[i][j] = i * j;
    }
}

window.alert(MultiplicationTable[3][4]); // 顯示12
window.alert(MultiplicationTable[5][2]); // 顯示10
window.alert(MultiplicationTable[1][4]); // 顯示4


自訂物件

要建立自訂物件的個體執行，必須先為它們定義一個建構元函數。一個建構元函數可以建立一個新物件，以及它們的屬性、方法 (如果正確的話)。例如，下列範例為pasta物件定義一個建構元函數。注意this關鍵字的用法是引用目前的物件。

// pasta是一個有4個參數的建構元。
function pasta(grain, width, shape, hasEgg)
{
    // 用什麼麥作成的?
    this.grain = grain;

    // 有多大? (number)
    this.width = width;

    // 斷面（cross-section）是什麼? (字串)
    this.shape = shape;

    // 有加蛋黃嗎? (布林值)
    this.hasEgg = hasEgg;
}

一旦建立了一個物件建構元，用new 運算子來建立它的個體執行。

var spaghetti = new pasta("wheat", 0.2, "circle", true);
var linguine = new pasta("wheat", 0.3, "oval", true);

您可以增加一個物件執行個體的屬性以改變這個執行個體，但是這些屬性並不會成為同一個建構元建立的其他物件定義的一部份，而且不會出現在其他的個體執行中，除非您刻意地把它加進去。如果想要更多的屬性出現在其他的個體執行中，必須把屬性加到建構元函數中，或者加到建構元的原型物件裡(原型物件在進階參考文件中討論)。

// 增加spaghetti的屬性。
spaghetti.color = "pale straw";
spaghetti.drycook = 7;
spaghetti.freshcook = 0.5;

var chowFun = new pasta("rice", 3, "flat", false);
//chowFun 物件與其他物件都不見了
// pasta 物件擁有加到spaghetti 物件中的
// 三個新屬性。

// 增加'foodgroup' 屬性到pasta 原型物件
// 所有pasta物件的個體執行都可以使用這個屬性，
// 包括那些已經建立的個體執行。
pasta.prototype.foodgroup = "carbohydrates"

// 現在變成spaghetti.foodgroup，chowFun.foodgroup?等等。全部
// 包含值"carbohydrates"

定義中包含方法

將方法 (功能)包含進一個物件的定義中是有可能的。有一種方法，就是新增包含建構元函數中的屬性，這個建構元函數是引用在別處定義的函數。例如，下列範例延伸了以上定義的pasta 建構元函數，進一步包含了將被呼叫的 toString 方法（如果您要顯示物件值的話）。

// pasta 是一個有4個參數的建構元。
// 第一部份與上述的
函數pasta相同(麥、大小、形狀、 hasEgg)
{
    // 用什麼麥作成的？
    this.grain = grain;

    // 有多大? (數字)
    this.width = width;

    //斷面（cross-section）是什麼? (字串)
    this.shape = shape;

    // 有加蛋黃嗎? (布林值)
    this.hasEgg = hasEgg;

    // 在這裡加入toString 方法(定義在下面)。
    // 注意我們並沒有把括號放在
    // 函數名稱之後; 這並不是一個函數呼叫，而是一個
    // 函數本身的引用。
    this.toString = pastaToString;
}

// 顯示pasta物件內容的真正函數。
function pastaToString()
{
    // 傳回物件屬性

    return "Grain: " + this.grain + "\n" +
        "Width: " + this.width + "\n" +
        "Shape: " + this.shape + "\n" +
        "Egg?: " + Boolean(this.hasEgg);
}

var spaghetti = new pasta("wheat", 0.2, "circle", true);
// 這將會呼叫toString()並顯示spaghetti物件
// 的屬性(Internet Explorer所需的屬性)。
window.alert(spaghetti);


內建物件

Microsoft JScript 提供11個內建(或"built-in") 物件。也就是Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error和String 物件。每一個內建物件都有關聯的方法和屬性。詳情請參閱語言參考。某些物件也在這部份中有詳細的說明。

Array 物件

陣列的下標可以視為是一個物件的屬性而引用到數值索引中。注意把已命名的屬性增加到一個Array 物件時，不能拿數字當索引；它們跟陣列元素是截然不同的。

要建立一個新陣列，請使用new 運算子和Array() 建構元， 就像下列例子。

var theMonths = new Array(12);
theMonths[0] = "Jan";
theMonths[1] = "Feb";
theMonths[2] = "Mar";
theMonths[3] = "Apr";
theMonths[4] = "May";
theMonths[5] = "Jun";
theMonths[6] = "Jul";
theMonths[7] = "Aug";
theMonths[8] = "Sep";
theMonths[9] = "Oct";
theMonths[10] = "Nov";
theMonths[11] = "Dec";

當使用Array 關鍵字建立一個新陣列時，JScript 包含了紀錄輸入數字的length 屬性。如果不指定一個數字，長度就會設定為0，而陣列就沒有輸入的資料項目。如果指定了一個數字，長度就會設定為這個數字。如果指定了一個以上的參數，參數就會當成陣列中輸入的資料項目來使用。此外，參數會指定為length 屬性，就像下面的例子，也等於前面的例子。

var theMonths = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

當您用Array 關鍵字建立一個元素，並把這個元素增加到陣列時，JScript 會自動地改變length 值。JScript 的陣列索引值一律從0開始，不是從1，所以length屬性總是比陣列中最大的索引值還要多1。

String 物件

在Jscript中，您可以把字串(和數字) 當成物件測試。string 物件 有某些內建的方法可以讓您用在物件上。其中一個是substring 方法，它會傳回一部份字串。此方法會取兩個數字當成引數。

aString = "0123456789";
var aChunk = aString.substring(4, 7);  // 設定aChunk 為"456"。
var aNotherChunk = aString.substring(7, 4);  // 設定aNotherChunk 為"456"。
// 使用前述建立Array 的範例:
firstLetter = theMonths[5].substring(0,1);  // 設定firstLetter 的變數為"J"。

String 物件的另一個屬性是length 屬性。這個屬性包含了字串中的字元數(空字串的字元數為0)。這是個可以直接用在計算中的數值。

var howLong = "Hello World".length  // Sets the howLong variable to 11.

Math 物件

Math 方法有一些事先定義的屬性及方法。這些屬性是特定的數字。其中一個為pi值(approximately 3.14159...)。稱為Math.PI 屬性，可以在下列範例中看到。

// 宣告一個變數並指定一個值給它。
var circleArea = Math.PI * radius * radius;  // 注意Math 和PI的大寫字母。

Math 物件的其中一個內建方法，就是指數（exponentiation）方法，或是pow方法。pow方法把一個數字提升到固定的次方。下列範例使用了pi 和指數方法。

// 這個公式利用已知的半徑求一個球體的體積。
volume = (4/3)*(Math.PI*Math.pow(radius,3));

Date 物件

Date 物件可用來表示任意日期和時間，以取得目前的系統時間，並計算日期之間的差異。它有幾個已定義的屬性與方法。通常，Date 物件提供一個星期的星期值、月份、日期和年份；以及時數、分鐘數和秒數。這個訊息是根據格林威治標準時間（GMT）1970年1月1日00:00:00.000以後的毫秒數 (比較正確的名稱是UTC，或是"Universal Coordinated Time"，因為它是指全球標準時間公佈的標誌)。JScript 可以處理範圍在西元前250,000年到西元後 255,000年之間的日期。

要建立一個新的Date 物件，請使用new 運算子。下列範例計算到目前為止經過的年數、日數，以及還剩下多少日數。

/*
這個範例使用已經事先定義好的月份名稱的陣列。
第一個陳述式用"Day Month Date 00:00:00 Year"的格式指定今天的日期
給thisIsToday變數。
*/
var thisIsToday = new Date();

var toDay = new Date();  // 擷取今天的日期。

// 摘錄年份、月份和日期。
var thisYear = toDay.getFullYear();
var thisMonth = theMonths[toDay.getMonth()];
var thisDay = thisMonth  + " " + toDay.getDate() + ", " + thisYear;

Number 物件

除了某些在Math 物件中的特殊數值屬性 (例如PI)外， Microsoft JScript 的Number 物件中還有其他的一些屬性可供使用。

屬性 | 說明
MAX_VALUE | 可能的最大值，大約是1.79E+308；正負皆可。(每個不同系統的值會有些微差異)。
MIN_VALUE | 可能的最小數字，大約是2.22E-308；正負皆可(每個不同系統的值會有些微差異)
NaN | 特殊的非數字值。
POSITIVE_INFINITY | 任何大於最大正數的正值(Number.MAX_VALUE)會自動轉換成這個值；表示為無限大。
NEGATIVE_INFINITY | 任何小於最小負數的負值(-Number.MAX_VALUE) 會自動轉換成這個值；表示為無限小。

Number.NaN 是一個定義為「非數字」的特殊屬性。例如，除以0，就會傳回NaN。想要剖析一個不能剖析為數字的字串也會傳回Number.NaN。NaN 跟任何數字和自己比較都不相等。要測試一個NaN 結果，就不要跟Number.NaN比較；請改用isNaN() 函數來比較。


JScript 保留字

JScript有一些保留字是不能用來作為識別項的。保留字對JScript 語言有特殊的涵義，因為它們是語言語法的一部份。使用一個保留字會使您在下載Script時引起編譯上的錯誤。

Jscript也有一串未來保留字。這些字目前並不是Jscript語言的一部份，它們是留待未來使用的。

Jscript保留字

break | delete | function | return | typeof
case | do | if | switch | var
catch | else | in | this | void
continue | false | instanceof | throw | while
debugger | finally | new | true | with
default | for | null | try |

JScript 未來保留字

abstract | double | goto | native | static
boolean | enum | implements | package | super
byte | export | import | private | synchronized
char | extends | int | protected | throws
class | final | interface | public | transient
const | float | long | short | volatile

選擇識別項時很重要的一點是，避免使用那些已經是JScript 內建物件或函數名稱的字，像是String或parseInt。


進階 JScript

進階物件建立

遞迴

變數範圍

複製、傳遞和比較資料

使用陣列

特殊字元

解決Script的問題


進階物件建立

建構元是用來呼叫實行或初始化一個特定型別物件的函數。您可以使用new 關鍵字來呼叫建構元。這裡有一些使用建構元的範例。

var myObject = new Object();             // 建立一個沒有屬性的泛用物件。
var myBirthday = new Date(1961, 5, 10);  // 建立一個Date物件。
var myCar = new Car();                   // 建立使用者自訂的物件，並初始化其屬性。

建構元會傳送一個傳址到新建立的空白物件中，作為特殊的this 關鍵字的值。然後負責正確的初始化新物件 (建立屬性並給予它們初始值)。當工作完成，建構元會傳回它所建構的物件。

撰寫建構元

您可以使用與事先定義好的建構元函數，如Object()， Date()，和Function()相結合的new 運算子，來建立並初始化物件。物件導向程式有一個強大的功能，就是能夠定義自訂建構元函數，以便在您的Script中建立自訂物件。建立自訂建構元就能夠建立有已定義屬性的物件。這裡是一個自訂建構元的範例(注意this關鍵字的用法)。

function Circle (xPoint, yPoint, radius) {
    this.x = xPoint;  // 圓中心的x元件。
    this.y = yPoint;  // 圓中心的y元件。
    this.r = radius;  // 圓半徑。
}

當呼叫Circle 建構元時，您提供了圓心與半徑的值 (這些元素是完全建立唯一一個circle物件所需的元素)。最後產生了一個包含三種屬性的Circle物件。這裡是如何實行Circle物件的方法。

var aCircle = new Circle(5, 11, 99);

使用原型來建立物件

當您撰寫建構元時，可以使用 prototype 屬性(本身就是每個建構元的值) 來建立共同的物件屬性及方法。來建立由此定義產生之所有物件保存的屬性。Prototype 屬性和方法乃是由參考複製到同類別的每一個物件上，所以類別中所有物件的值都相同。您可以變更物件中 prototype 屬性的值，並以新的值置換預設值，但只限於此物件的執行個體。此類別中其他成員物件並不會受到此變更的影響。這裡是一個使用自訂建構元的範例「畫圓」(注意this 關鍵字的使用)。

Circle.prototype.pi = Math.PI;
function ACirclesArea () {
    return this.pi * this.r * this.r; // 這個範圍的圓公式是洿2 。
}
Circle.prototype.area = ACirclesArea; // 計算這個範圍圓的公式現在變成了Circle Prototype 物件的方法。
var a = ACircle.area();               // 如何在Circle物件上呼叫這個範圍的函數。

您可以使用這個原則為已經事先定義的建構元函數（都有原型物件）定義附加屬性。例如，如果您想移除字串前面或後面的空白處(類似VBScript的Trim功能)，您可以在String 原型物件上建立自己的方法，而所有在script 當中的字串會很機動的承襲這個方法。

// 增加名為trim 的函數作為這個原型的方法。
// 這個String 建構元的物件。
String.prototype.trim = function()
{
    // 使用通用運算式置換前後的空白處
    // 空白字串的空白處
    傳回置換(/(^\s*)|(\s*$)/g, "");
}

// 內含空白處的字串
var s = "    leading and trailing spaces    ";

// 顯示"    leading and trailing spaces     (35)"
window.alert(s + " (" + s.length + ")");

// 移除前後面的空白處
s = s.trim();
// 顯示"leading and trailing spaces (27)"
window.alert(s + " (" + s.length + ")");

特殊字元

JScript 提供的特殊字元可讓您將某些無法直接鍵入的字元納入字串中。這些字元前面都必須加反斜線。反斜線是一種逸出字元，可告知 JScript 解譯程式下一個字元為特殊字元。

逸出順序 | 字元
\b | 退格
\f | 換頁
\n | 換行
\r | 復位
\t | 水平定位 (Ctrl-I)
\' | 單引號
\" | 雙引號
\\ | 反斜線

請注意，由於反斜線本身可用作逸出字元，因此您無法在 Script 中直接將它鍵入。若要寫入一條反斜線，您必須同時鍵入兩條 (\\)。

document.write('The image path is C:\\webstuff\\mypage\\gifs\\garden.gif.');
document.write('The caption reads, "After the snow of \'97. Grandma\'s house is covered."');


遞迴

遞迴是一種重要的程式設計方法，可用來讓某個函數從本身呼叫自己。計算階乘就是一個例子。0的階乘特別定義為 1，較大數字的階乘則是將 1 * 2 * ...，以 1 為增量乘到您要計算階乘的數字為止。

下一段是一個用來計算階乘之函數的定義。

「如果數字小於 0，則拒絕該數字。如果它不是整數，則將其小數部分無條件捨去。若數字是 0，它的階乘就是 1。若數字大於0，則將它乘以次低數字的階乘。」

若要計算大於0的任何數字的階乘，您必須至少計算另一個數字的階乘。您要使用的函數就是已在使用的函數，此函數必須呼叫它自己以取得次低數字，才能計算目前的數字。這就是遞迴的範例。

遞迴與迴圈 (looping) 的關係密切 - 任何可用遞迴處理的也都能用迴圈處理，反之亦然。通常一個特定的計算會將自己導向這兩個技術之中的任一個，而您只要選擇自己最方便使用的就可以了。

這其中顯然有問題，您可以輕易地建立一個無法得出確定結果的遞迴函數，而且永遠無法達到終點。這種遞迴會導致電腦執行所謂的「無限」迴圈。以下是一個例子：省略計算階乘之文字定義中的第一個規則 (有關負數的部分)，並試著計算任何負數的階乘。這麼做會失敗，因為要計算 -24 的階乘，您必須先計算 -25 的階乘，但是在這之前又得先計算 -26 的階乘，依此類推。如此一來永遠也不會達到終點。

因此，在設計遞迴函數時務必十分小心。如果您懷疑可能會造成無限遞迴，可以讓函數計算它呼叫自己的次數。如果自我呼叫的次數太多 (次數由您所決定) 也應讓它自動停止。

下面是一個階乘函數，為利用 JScript 撰寫的程式碼。

// 計算階乘值的函數。如果輸入一個
// 不正確的數字(也就是，小於0的數字)，-1
// 就會傳回以顯示這個錯誤。否則，這個
// 數字會轉換成最接近的整數，並且傳回
// 它的階乘值。
function factorial(aNumber)  {
aNumber = Math.floor(aNumber);  //若數字非整數，將之無條件捨去為整數。
if (aNumber < 0)  {  //若數字小於 0，拒絕計算。
    return -1;
    }
      if (aNumber == 0)  {  // 如果數字是0，它的階乘值就是1。
      return 1;
      }
        else return (aNumber * factorial(aNumber - 1));  //否則，遞迴執行直到完成。
}


變數有效範圍

JScript 包含兩個有效範圍：全域和區域。如果您宣告的變數不在函數定義範圍內，它就是全域變數，其值可從程式中的任何位置存取和修改。如果您宣告的變數在函數定義範圍內，它就是區域變數。只要執行函數，區域變數就會隨之建立和消失，無法在函數以外存取。

像C++ 語言也有"區塊範圍"(block scope）的限制。在這裡，任何一組的大括號"{}"定義出一個新的範圍。JScript 則不支援區塊範圍。

區域變數可以使用和全域變數一樣的名稱，但兩者是完全不同的，因此變更其中一個變數值並不會影響到另一個。在宣告區域變數的函數中，只有區域變數才有意義。

var aCentaur = "a horse with rider,";  // aCentaur 的全域定義。

// JScript 的程式碼在此省略。
function antiquities()  // 此函數中有宣告一區域變數 aCentaur。
{

// JScript 的程式碼在此省略。
var aCentaur = "A centaur is probably a mounted Scythian warrior";

// JScript 的程式碼在此省略。
aCentaur += ", misreported; that is, "; // 加入區域變數。

// JScript 的程式碼在此省略。
}  // 函數結束。

var nothinginparticular = antiquities();
aCentaur += " as seen from a distance by a naive innocent.";

/*
在函數中，變數值為 "A centaur is probably a mounted Scythian
warrior, misreported; that is, "；在函數外，變數值為：
"a horse with rider, as seen from a distance by a naive innocent."
*/

請切記變數會像在其所屬範圍的開頭宣告一樣作用，有時候會產生非預期的結果。

tweak();
var aNumber = 100;
function tweak()  {
    var newThing = 0;  //明確宣告 newThing 變數。

    // 此陳述式指派未定義的值到newThing，因為有一個名為aNumber的區域變數。
    newThing = aNumber;

    // 下一個陳述式指派值42到aNumberaNumber = 42的區域;
    if (false)  {
        var aNumber;  //此陳述式不會被執行。
        aNumber = 123;  //此陳述式不會被執行。
        }  //條件式結束。

}  // 函數定義結束。

當JScript 執行一個函數時，它首先會找出所有的變數宣告，

var someVariable;

並且建立還未定義初始值的變數。如果變數宣告了一個值，

var someVariable = "something";

那麼它在一開始便有這個未定義的值，並且只有當包含此宣告的那一行執行時（如果有的話），宣告的值才會出現。

JScript 在進行過變數宣告的階段後，才會開始執行程式碼，因此不論宣告是發生在一個條件式區塊中，或一些其他的結構裡，都不會有影響。一旦JScript 找出所有的變數，就會執行函數中的程式碼。如果在函數中明確地宣告一個變數- 也就是說，如果變數出現在指派運算式的左手邊，但並未宣告var - 那麼一個全域變數就建立了。


複製、傳遞和比較資料

在 JScript 中，資料的處理方式取決於其資料型態。

傳值與傳址的比較

數字和布林值 (true 和 false) 是以傳值方式進行複製、傳遞和比較。當您以傳值方式來複製或傳遞時，便會在電腦記憶體中配置一個空間，並將原始值複製入其中。如果您後來改變了原來的值，則複製的值並不會受到影響 (反之亦然)，因為二者是不同的實體。

物件、陣列和函數則以傳址方式進行複製、傳遞和比較。當您以傳址方式來複製或傳遞時，基本上就建立了一個指向原始項目的指標，並將該指標當作副本使用。如果您後來改變了原始項目，則原始項目和副本都會改變 (反之亦然)。實際上只有一個實體存在，「副本」並非是真的副本，它只是資料的另一份引用而已。

用傳址來比較時，兩個變數必須確實引用同樣的實體才能成功比對。例如，兩個截然不同的Array 物件永遠無法對等的比對，即使他們含有相同的元素。其中一個變數必須是另外一個變數用來成功比對的引用。要檢查兩個 Array是否擁有同樣的元素，可以比較toString() 方法的結果。

最後，傳址也可用來複製及傳送字串，但卻是用傳值來進行比較。必須注意的是，如果您有兩個String 物件 (建立為new字串("something"))， 它們會以傳址來比較，但是如果其中一個或兩個都是字串值，就會以傳值來比較。

備註 基於 ASCII 和 ANSI 字元集的組成方式，大寫字母依序置於小寫字母之前。例如在進行比較時，"Zoo" 會被判定為小於 "aardvark"。如果想要執行不區分大小寫的比對，可以對兩個字串呼叫toUpperCase() 或 toLowerCase()。

將參數傳遞至函數

當您以傳值方式將參數傳遞到函數時，實際上已產生了一份只存在於函數之中的參數副本。即使物件或陣列是透過傳址傳送的，如果在函數內以新的值覆寫，新的值無法反映在函數外。只有當物件屬性或陣列元素改變時，新的值才會顯現在函數外。

例如 (用Internet Explorer 物件模型):

// 複寫它的參數，所以呼叫程式碼中
// 不會反映改變。
function Clobber(param)
{
    // 複寫參數; 在呼叫程式碼中
    // 看不見。
    param = new Object();
    param.message = "This will not work";
}

// 修改參數屬性，這個改變在呼叫程式碼中
// 看的見。
function Update(param)
{
    // 修改物件屬性; 這個改變在呼叫程式碼中
    // 看的見。
    param.message = "I was changed";
}

// 建立物件，並給它一個屬性。
var obj = new Object();
obj.message = "This is the original";

// 呼叫Clobber，並列印obj.訊息。注意它並沒有改變。
Clobber(obj);
window.alert(obj.message); // 仍然顯示"這是原來的"。

// 呼叫Update，並列印obj.訊息。注意它已經改變了。
Update(obj);
window.alert(obj.message); // 顯示"我改變了"。

檢驗資料

當您以傳值方式來進行檢驗時，會比較兩個不同的項目是否相等，這類比較通常會逐位元組進行。若以傳址方式來進行檢驗，則必須檢查這兩個項目是否為指向同一個原始項目的指標。如果是，表示兩者相等；否則，即使它們包含完全相同的值 (位元組對位元組) 也是不相等的。

以傳址方式來複製和傳遞字串可以節省記憶體，但是由於字串一旦建立就無法變更，因此可能要以傳值方式來比較這些字串。如此可讓您檢驗兩個字串是否具有相同的內容，即使它們是個別產生的。


使用陣列

JScript 中的陣列是稀疏陣列，也就是說，如果您的陣列包含 0、1 和 2 三個元素，則可以建立元素 50 而不必管 3 到 49 的元素。如果陣列包含自動調整長度的變數 (有關自動控制陣列長度的說明，請參閱內建物件)，則長度變數會設為 51 而非 4。您當然可以建立元素編號不中斷的陣列，但沒有必要這麼做。

在 JScript 中，物件和陣列幾乎是相同的。兩個主要的不同是，一般物件沒有自動調整長度的屬性，而且陣列沒有物件的屬性和方法。

指定陣列

您可以利用中括號"[]"來指定陣列。中括號裡包含一個數值，或是一個評估為整數的運算式。下面的範例假設在 Script 中的其他位置已定義 entryNum 變數並指定了一個值。

theListing = addressBook[entryNum];
theFirstLine = theListing[1];

當作結合陣列使用的物件

通常利用點（dot）運算子"."存取物件的屬性。例如，

myObject.aProperty

在此，屬性名稱是識別項。也可以使用索引（index）運算子"[]"存取物件的屬性。在此，您把物件當成結合陣列。結合陣列的資料結構讓您機動性的把任意的資料值與任意的字串結合在一起。例如，

myObject["aProperty"] // 與上述同。

雖然使用索引運算子可以更廣泛地與存取陣列的元素相結合，但用於物件時，index 的屬性名稱一律以一個字串常值來表示。

注意存取物件屬性的兩種方式之間，有著重大的差異。

運算子 | 把屬性名稱當成 | 屬性名稱的意義
Dot "." | 一個識別項 | 不能像資料一樣的操作
Index "[]" | 一個字串常值 | 可以像資料一樣的操作

當您在執行期之前不知道屬性名稱為何時，這個差異就十分有用(例如，當您在根據使用者輸入建構物件時)。要從結合陣列擷取所有的屬性時，必須使用for � in 迴圈。


特殊字元 (JScript)

JScript

特殊字元

JScript 提供的特殊字元可讓您將某些無法直接鍵入的字元納入字串中。這些字元前面都必須加反斜線。反斜線是一種逸出字元，可告知 JScript 解譯程式下一個字元為特殊字元。

逸出順序 | 字元
\b | 退格
\f | 換頁
\n | 換行
\r | 復位
\t | 水平定位 (Ctrl-I)
\' | 單引號
\" | 雙引號
\\ | 反斜線

請注意，由於反斜線本身可用作逸出字元，因此您無法在 Script 中直接將它鍵入。若要寫入一條反斜線，您必須同時鍵入兩條 (\\)。

document.write('The image path is C:\\webstuff\\mypage\\gifs\\garden.gif.');
document.write('The caption reads, "After the snow of \'97. Grandma\'s house is covered."');


解決 Script 的問題

如果您不夠謹慎的話，在任何一個程式設計語言中都會產生一些問題，而且每一種語言都有它特殊的地方。以 null 值為例︰在JScript 和在 C 或 C++ 語言中，Null 值的行為就不相同。

茲將您在撰寫 JScript Script 時可能會遇到的問題說明如下。

語法錯誤

由於在程式設計語言中的語法，要比自然語言中的語法來得嚴格，所以當您在撰寫 Script 時，請務必要小心處理每一個細節。例如，您如果要將一個特殊的參數當作字串來使用，但在鍵入時忘記加上引號，那麼就會產生問題。

Script 解譯的順序

JScript 解譯是 Web 瀏覽器的 HTML 剖析程序的一部份。所以，如果您在文件的 <HEAD> 標記內放入一個 Script，那麼將會先解譯它，然後再檢查 <BODY> 標記。如果您在 <BODY> 標記中建立了一些物件，那麼在剖析 <HEAD> 標記時，它們並不會存在，而 Script 也不會處理它們。

備註 這個行為是針對Internet Explorer。ASP 和WSH 有不同的執行模式(如同其他的主機)。

自動型態強制轉換

JScript 是一個具有自動型態強制轉換的語言。縱然不同型態的值不會相等，但在下面範例中的運算式都會評估為 True。

"100" == 100;
false == 0;

要檢查型別和值是否相同，請使用完全相等的運算子===，以下兩個例子都會評估為false:

"100" === 100;
false === 0;

運算子優先順序

當您於執行特殊運算時評估運算式，必須特別注意運算子優先順序，而不是運算式的位置。因此，在下面的範例中，將會先執行乘法，然後再執行減法，即使減法先出現在運算式中也是一樣。

theRadius = aPerimeterPoint - theCenterpoint * theCorrectionFactor;

將 for...in 迴圈與物件搭配使用

當您使用 for...in 迴圈來處理物件的屬性時，無法預期或控制那些指定至迴圈計數變數之物件欄位的順序。此外，在不同程式語言中處理的順序可能也會不同。

with 關鍵字

with 陳述式雖然對處理那些已存在指定物件中的屬性非常方便，但是卻不能用來將屬性加入物件內。若要在物件中建立新的屬性，您必須特別引用此物件。

this 關鍵字

雖然您可以在物件的定義內使用 this 關鍵字，以便引用此物件本身，但是當該函數並不是一個物件定義時，您就不能使用 this 或類似的關鍵字來引用目前執行中的函數。不過，如果此函數將會指定給一個物件作為方法來使用的話，您就可以在函數內使用 this 關鍵字，以便引用此物件。

在 Internet Explorer撰寫一個會撰寫 Script 的 Script

如果直譯程式遇到 </SCRIPT> 標記時，它會終止目前的 Script。若要顯示 "</SCRIPT>" 本身，請將它至少重新撰寫成兩個字串，像是 "</SCR" 和 "IPT>"，然後您就可以在未包含它們的陳述式中將它們串連在一起。

隱含在 Internet Explorer的視窗參考

由於您可以同時開啟一個以上的視窗，所以若要取得任何一個隱含的視窗參考，都必須點一下目前的視窗。至於其他的視窗，您必須使用一個明確的參考。


條件式編譯

條件式編譯讓您在使用新JScript 語言功能的同時，還能與不支援這些功能的舊版本相容。

條件式編譯 @cc_on 條件式編譯 @if 或 @set 陳述式來啟動。使用Jscript的新功能也包含在條件式編譯的某些典型使用中，像在一個script中嵌入偵錯支援，以及追蹤程式碼的執行。

將條件式編譯一律放在註解中，這樣一來，不了解條件式編譯的主應用程式 (如 Netscape 領航員)才能略過它。這裡有一個例子。

/*@cc_on @*/
/*@if (@_jscript_version >= 4)
   alert("JScript version 4 or better");
   @else @*/
   alert("You need a more recent script engine.");
/*@end @*/

這個例子使用了只有在條件式編譯是被 @cc_on 陳述式啟動時，才會使用的特殊定界標。不支援條件式編譯的 Script 引擎只看到需要一個新Script 引擎的訊息出現。


條件式編譯變數

下列已事先定義的變數可以使用在條件式編譯中。如果變數不是 true，這個變數還未定義，而且存取時會變成NaN。

變數 | 說明
@_win32 | 在 Win32 system 中執行為 True。
@_win16 | 在 Win16 system 中執行為 True。
@_mac | 在蘋果麥金塔系統執行為 True。
@_alpha | 在 DEC Alpha 處理器中執行為 True。
@_x86 | 在 Internet 處理器中執行為 True。
@_mc680x0 | 在 Motorola 680x0 處理器中執行為 True。
@_PowerPC | 在 Motorola PowerPC 處理器中執行為 True。
@_jscript | 一律為 true。
@_jscript_build | 包含 JScript scripting 引擎的建立編號。
@_jscript_version | 包含 JScript 版本編號（主要與次要編號格式）。


通用運算式介紹

本文主要是提供有關通用運算式概論的介紹。

雖然每個章節盡量保持個別獨立性，但是大部分的主題內容是建立在之前章節所述的功能或概念上。所以我們建議您按照順序閱讀這些章節，以確保您通盤了解完整的內容。

通用運算式的介紹包含了下面各個章節：

通用運算式

早期發展

通用運算式的應用

通用運算式語法

建立一個通用運算式

優先順序

一般字元

特殊字元

非列印字元

字元比對

次數符號

錨定點

選項和群組

回溯值


通用運算式

除非您之前使用過通用運算式，要不然您可能對它的術語和概念不太熟悉。然而它們並不如您想像般陌生。

想像一下您是如何搜尋硬碟中的檔案。大致上您會使用像是 ? 和 * 字元來幫助您找到想要的檔案。 ? 字元可符合檔名中單一的字元，而 * 字元則是可找到零或多個字元。像是 ‘data?.dat’ 可以找到下面的檔案：

data1.dat
data2.dat
datax.dat
dataN.dat

如不用 ? 而改用 * 字元便會擴大找到的檔案數目。 ‘data*.dat’ 可以找到下面的檔案：

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat

雖然這種搜尋檔案的方式很有用，但也十分有限。 ? 和 * 萬用字元的有限功能讓您大致了解了通用運算式功能，但通用運算式的功能卻更強大且更具彈性。


早期發展

通用運算式可回溯到早期人類神經系統如何運作的研究。華倫麥考路克（Warren McCulloch）和華特比玆（Walter Pitts）這一對神經心理學者發展出一套數學方式，來描述這些神經網路。

1956年，數學家史蒂芬克里尼（Stephen Kleene）以先前麥考路克和比玆的研究為基礎，發表了一篇名為「神經網路的事件發表」（“Representation of Events in Nerve Nets”）的文章，文章中介紹了通用運算式的概念。通用運算式是一種他稱之為「通用集合代數」的運算式。「通用運算式」就此誕生。

後來他的研究給了肯特湯普森（Ken Thompson，Unix 主要發明人）早期發展搜尋運算邏輯一些幫助。通用運算式第一個可應用的程式是在 Unix 上的 qed 編輯程式。

最後如他們所說的，這成為歷史的一部份。從那時起，通用運算式已經是搜尋工具和文字導向的編輯程式中重要的部分了。


通用運算式的應用

在一個典型的尋找取代程序中，您必須提供與想要找的文字一模一樣的內容。這樣的技巧可能足夠應付靜態文字中單純的尋找和取代工作，但它很可能缺乏彈性，並使搜尋動態文字變得困難。

使用通用運算式，您可以：

  • 於一字串中測試搜尋模式。例如，您可測試一輸入字串以得知是否字串中有符合電話號碼格式或信用卡號碼格式。這稱為資料核定。
  • 取代文字。您可以使用通用運算式來找出文件中特定的文字，然後可完全地移除它或用其他文字來取代。
  • 依照尋找格式從一字串中擷取一子字串。您可以於文件或輸入欄位中找到特定文字。

例如，如果您需要搜尋一整個 web 站台以移除某些過時的內容，並更換某些 HTML 格式標籤，您可使用通用運算式來測試各個檔案，以確定您想要的內容或 HTML 格式標籤存在於其中的檔案。這樣，您可以縮小檔案範圍到只含有需要被移除或改變內容的檔案。然後您可以用通用運算式來移除過時的內容，最後再使用通用運算式來搜尋和置換需要被更改的標籤。

另一個通用運算式的好處是當遇到不以字串處理能力見長的語言時。VBScript (一個Visual Basic 的子集) 擁有豐富的字串處理能力。 Jscript像 C 語言一樣不含有這樣的功能。通用運算式提供了Jscript 可觀的字串處理能力。然而，通用運算式在 VBScript 中也可能更有效能，可允許您在一個單一運算式中執行多個字串操作。


通用運算式語法

通用運算式是一種文字模式，包含了一般字元 (例如 a 到 z 的字元 ) 和中繼字元（metacharacter）的特殊字元。這個模式在尋找文字時描述了一或多個字串。通用運算式就像是用來跟被搜尋字串比對的字元樣板。

下面是幾個您可能會遇到的通用運算式範例：

JScript | VBScript | 符合
/^\[ \t]*$/ | "^\[ \t]*$" | 比對一空白行。
/\d{2}-\d{5}/ | "\d{2}-\d{5}" | 核定一個 ID 由2位元數字、連字號和另一5位元數字組成的數字。
/<(.*)>.*<\/\1>/ | "<(.*)>.*<\/\1>" | 比對一個HTML 標記。

下面表格包含了完整的中繼字元清單，和它們在通用運算式內的作用：

字元 | 說明
\ | 標示下一個字元為一個特殊字元、常值、回溯值，或是一個8進位的逸出字元。例如，'n與'字元'n'相符。'\n' 與換行字元相符。序列'\\' 與"\" 相符，而'\(' 與'("相符。
^ | 比對輸入字串開始的位置。如果RegExp物件已設定多行（Multiline）屬性， ^ 也會比對'\n'或 '\r'之後的位置。
$ | 比對輸入字串結束的位置。如果RegExp物件已設定多行（Multiline）屬性，$ 也會比對'\n'或 '\r'之前的位置。
* | 比對先前的子運算式0次或多次。 舉例來說， "zo*" 與 "z"及"zoo"相符。*相當於{0,}。
+ | 比對先前的子運算式1次或多次。 舉例來說，'zo+' 與 "zo"及 "zoo"相符,但跟"z"不相符。+ 相當於{1,}。
? | 比對先前的子運算式0次或1次。 舉例來說， "do(es)?"跟 "do" 在 "do" 或 "does"中相符。? 等於 {0,1}。
{n} | n 是一個非負數的整數，必須完全符合 n 次。例如，'o{2}' 並不符合 Bob 中的 'o'，但可符合"food"中的前兩個 o。
{n,} | n 是一個非負數的整數. 至少符合n 次。 舉例來說，'o{2,}' 跟"Bob"中的"o"不符， 且 與"foooood"中所有o相符 。'o{1,}'等於 'o+'。'o{0,}' 等於 'o*'。
{n,m} | m 和 n是非負數的整數，而且n <= m。符合最少n次而符合最多 m 次。舉例來說， 'o{1,3}' 跟"fooooood"中前三個0相符。 'o{0,1}' 等於'o?'。注意逗號和號碼間不可有空格。
? | 當這個字元緊接於任何其他次數符號(*, +, ?, {n}, {n,}, {n,m})時，其比對模型式是不強烈。不強烈模式跟搜尋字串幾乎不相符，可是預設的 強烈模式 卻跟搜尋字串幾乎完全相符。 舉例來說， 字串 "oooo"，'o+?' 跟單一的 "o"相符, 而 'o+'跟所有的 'o' 相符。
. | 與每一個字元相符，除了字元"\n"以外。要與含有 '\n'的字元相符， 請使用 '[.\n]'的模式。
(pattern) | 比對模式並擷取相符的項目。擷取的相符項目可以在相符項目結果中的集合物件找到，只要利用 SubMatches 在 VBScript中的集合物件或 Jscript中$0?B>$9的屬性。 用 '\(' or '\)' 來比對括號字元 ( )。
(?:pattern) | 比對模式但並不記錄相符的項目。也就是，它是一個非紀錄相符項目，並不儲存作日後使用。這對用or 字元 (|) 來結合模式的好幾部分很有用。例如，'industr(?:y|ies) 較 'industry|industries'來的更方便。
(?=pattern) | 在字串比對模式開始前，正預看可以從任何角度比對搜尋字串。這樣就稱為一個非擷取的相符項目，也就是說，這並非用來儲存作為日後可能的使用。舉例來說，'Windows (?=95|98|NT|2000)' 與"Windows 2000"中的"Windows"相符，但不符合"Windows 3.1"中的"Windows"。預看並不會浪費字元，也就是說，再找到一個相符項目之後，會馬上開始找尋下一個項目，而不會等找到預看所需的字元後才開始搜尋。.
(?!pattern) | 反預看符合搜尋字串與比對模式不相符的任何部分。這樣就稱為一個非擷取的相符項目，也就是說，也就是說，這並非擷取來作為日後可能的使用。舉例來說，'Windows (?!95|98|NT|2000)'符合"Windows 3.1 "裡的"Windows"，但不符合"Windows 2000 "裡的"Windows"。預看並不會浪費字元，也就是說，再找到一個相符項目之後，會馬上開始找尋下一個項目，而不會等找到預看所需的字元後才開始搜尋。
x|y | 符合x 或 y。例如，'z|food' 符合"z"或"food"。'(z|f)ood' 符合"zoo" 或 "food"。
[xyz] | 一組符合任何附屬字元的字元集。例如'[abc]' 符合"plain"裡的'a'。
[^xyz] | 一組符合任何附屬字元的反字元集。例如，'[^abc]'符合"plain"裡的'p'。
[a-z] | 這是一個字元範圍。符合某特定範圍中的任何字元。例如，'[a-z]' 符合'a'到'z'範圍裡，任何小寫字母的字元。
[^a-z] | 符合任何不在特定範圍裡的反字元。例如，'[a-z]' 符合任何不在'a' 到'z'範圍裡的字元
\b | 符合文字邊界（word boundary）。也就是說在字與空格之間的位置。例如，'er\b' 符合"never" 裡的'er'但是不符合"verb"裡的'er'。
\B | 符合非文字邊界。'er\B' 符合"verb"裡的'er'但是不符合"never" 裡的'er'。
\cx | 符合x.顯示的控制字元。例如，\cM 符合Control-M或托架傳回字元。x 值必須在A-Z 或a-z的範圍內，否則c 會被視為是一個常值"c"字元。
\d | 符合一個相當於從0-9的數位字元。
\D | 符合一個相當於^0-9的非數位字元。
\f | 符合一個相當於\x0c 和 \cL.的格式傳送字元。
\n | 符合一個相當於\x0a 和 \cJ.的換行字元。
\r | 符合一個相當於\x0d 和 \cM的托架傳回字元。
\s | 符合任何包括空格的虛格，像tab， form-feed等等。相當於[ \f\n\r\t\v]。
\S | 符合任何非虛格空格的字元。相當於[^ \f\n\r\t\v]。
\t | 符合一個欄標字元。相當於\x09 和 \cI。
\v | 符合一個垂直欄標字元。相當於\x0b 和\cK。
\w | 符合任何含底線的字符元。相當於'[A-Za-z0-9_]'。
\W | 符合任何非字符元的字元。相當於'[^A-Za-z0-9_]'。
\xn | 符合16進位的逸出值n。16進位的逸出值一定要是2位數。例如，'\x41' 符合"A"。'\x041'相當於'\x04' & "1"。這使的ASCII 程式碼可以在通用運算式中使用。
\num | 符合正整數的num。可以回溯以往的相符項目。例如'(.)\1' 符合2個相同連續的字元。
\n | 確認到底是八進位的逸出值還是回溯值。如果在\n 之前已經擷取了至少n 個子運算式，n就是一個回溯值。但如果n是一個從0-7的八進位數位值，它就是一個逸出值。
\nm | 確認到底是八進位的逸出值還是回溯值。如果在\nm 之前已經擷取了至少nm 個子運算式，nm 就是回溯值，後面緊跟著常值m。如果上述情形不存在，那麼當n 和m 是0-7的數值時，\nm 符合八進位的逸出值。
\nml | 當n 是0-3的八進位數位值時，\nml 符合八進位的逸出值，此時m 和l 都是0-7的八進位數位值。
\un | 符合Unicode 字元的n，用來表示四個十六進位位元。例如， \u00A9符合著作權符號 (©)。


建立一個通用運算式

通用運算式的建構方式和數學運算式一樣。也就是小的運算式經由各種中繼字元和運算子來組成較大的運算式。您靠把各種運算式模式的元件擺在一對界定字元之間來建構一個通用運算式。在Jscript 中，界定字元是一對斜線 (/) 字元。例如：

/運算式/

VBScript則由一對引號 ("")來界定通用運算式。例如：

"運算式"

在上述兩個例子中，通用運算式模式（運算式） 是儲存在 RegExp 物件的 Pattern 屬性中。

通用運算式的元件可以是個別字元、一組字元、某一範圍的字元、字元間的選項或是上述各種的組合。


優先順序

當您已經建立一個通用運算式，它就如同數學運算式一般，是從左到右來決定優先次序的。

下面的表格描述了各種通用運算式運算子從最高到最低的優先順序：

運算子 | 說明
\ | 逸出字元
(), (?:), (?=), [] | 括號和方括號
*, +, ?, {n}, {n,}, {n,m} | 次數符號
^, $, \anymetacharacter | 錨定點和次序
| | 選項


一般字元

一般字元包含了所有可列印和不是明顯設計成中繼字元的不可列印字元。包括了大寫和小寫字母、所有數字、所有標點符號和某些象徵符號。

最簡單的通用運算式是在搜尋字串中符合本身的單一、一般字元。例如，一個單一字元模式'A'符合字母'A'，不論它出現在搜尋字串的何處。這裡是單一字元通用運算式模式的幾個例子：

/a/
/7/
/M/

VBScript 版中比對的單一字元通用運算式是：

"a"
"7"
"M"

您可以結合一定數目的單一字元形成較大的運算式。例如，下面的JScript 通用運算式就只是由結合單一字元 'a'、'7'和'M'所組成的運算式。

/a7M/

VBScript 版本比對的運算式是：

"a7M"

注意不能有連結運算子。您只要加入一字元於其他字元之後即可。


特殊字元 (通用運算式)

JScript

特殊字元

有一些中繼字元，在比對它們時要特別的處理。要比對這些特殊字元，您必須先跳出這些字元，也就是在它們之前使用斜線字元 (\)。下面的表格顯示那些特殊字元和意義：

特殊字元 | 註解
$ | 比對輸入字串結束的位置。如果RegExp物件已設定多行（Multiline）屬性，$ 也會比對'\n'或 '\r'之前的位置。想要比對$字元本身，請使用\$。
( ) | 標出子運算式的開頭和結尾。子運算式為了日後使用而擷取。想要比對這些字元，請使用\( 和 \)。
* | 比對先前的子運算式0次或多次。想要比對* 字元，請使用 \* 。
+ | 比對先前的子運算式1次或多次。想要比對+字元，請使用 \+ 。
. | 符合除了換行字元 \n 外的任何一個字元。要比對.，請使用 \ 。
[ | 標出方括號運算式的開頭。 要比對[，請使用 \[ 。
? | 比對之前的子運算式0次或1次，或是指出一個不強烈 的次數符號。要比對 ? 字元，請使用\?。
\ | 標示下一個字元為一個特殊字元、常值、回溯值，或是一個8進位的逸出字元。例如，'n與'字元'n'相符。'\n' 與換行字元相符。序列'\\' 與"\" 相符，而'\(' 與'("相符。
^ | 比對輸入字串開頭的位置，除了當使用在方括弧運算式中時會翻轉字元集之外。要比對^字元，請使用 \^。
{ | 標示次數運算式的開頭。要比對{，請使用 \{ 。
| | 顯示兩個項目間的選項。要比對 |，請使用 \|。


非列印字元

有些實用的非列印字元會配合情況使用。下面表格顯示了用來表示那些非列印字元的逸出順序：

字元 | 意義
\cx | 符合x.顯示的控制字元。例如，\cM 符合Control-M或托架傳回字元。x 值必須在A-Z 或a-z的範圍內，否則c 會被視為是一個常值"c"字元。
\f | 符合一個相當於\x0c 和 \cL.的格式傳送字元。
\n | 符合一個相當於\x0a 和 \cJ.的換行字元。
\r | 符合一個相當於\x0d 和 \cM的托架傳回字元。
\s | 符合任何包括空格的虛格，像tab， form-feed等等。相當於[ \f\n\r\t\v]。
\S | 符合任何非虛格空格的字元。相當於[^ \f\n\r\t\v]。
\t | 符合一個欄標字元。相當於\x09 和 \cI。
\v | 符合一個垂直欄標字元。相當於\x0b 和\cK。


字元比對

句點 (.) 比對一個字串的任何可列印或非列印字元，除了換行字元(\n)。下面的 JScript 通用運算式符合'aac'、'abc' 、 'acc' 、 'adc' 等等，以及'a1c' 、 'a2c' 、 ' a-c' 和 ‘a#c'：

/a.c/

VBScript 版本的通用運算式是:

"a.c"

如果您嘗試比對一個檔案名稱的字串，其中含有一個句點 (.) 。您需在句點前加上一反斜線(\) 字元。下面的JScript 通用運算式符合'filename.ext'：

/filename\.ext/

VBScript 版本的通用運算式如下：

"filename\.ext"

這些運算式仍十分有限。它們只讓您比對任何的單一字元。很多時候，從一清單中比對特定字元是很有用的。例如，假如您有一個含有以數字表示之章節標題的輸入文字，如Chapter 1 ，Chapter 2 等等，您可能會想要找出這些章節標題。

方括號運算式

您可靠加入一或多個各別字元於方括號運算式 ([ 和 ])中來建立比對字元的清單。當字元被方括號包含其中，這清單稱為方括號運算式 。在方括弧中，就如在其他任何地方一樣，一般字元代表的是它們本身，也就是說，它們符合輸入字串中的本身。而在方括號運算式中的大部分特殊字元則失去其意義。下面則有些例外：

  • 如果清單不是第一個物件，']' 字元就會結束它。想要在清單中比對 ']' 字元，請在左方括號 '['之後立即放入這個清單。
  • '\' 字元持續為逸出字元。要比對'\' 字元，請使用 '\\' 。

包含於方括號運算式中的字元只比對通用運算式中方括弧運算式裡同一個位置的單一字元 。下面的JScript 通用運算式比對'Chapter 1' 、 'Chapter 2' 、 'Chapter 3' 、 'Chapter 4' 和 'Chapter 5'：

/Chapter [12345]/

想要比對 VBScript 中相同的章節，請使用下面的敘述：

"Chapter [12345]"

注意'Chapter' 文字和其後的空白固定在方括號內字元的相對位置。方括號運算式只是用來指定緊跟在文字'Chapter'和一個空白之後相對位置的字元集，也就是第9個字元的位置。

如您想要使用某一範圍來表達比對字元，而不是用字串本身來表示，您可以使用連字符號(-)來分隔開始和結束字元的範圍。 個別字元的字元值決定它們在範圍內的相對順序。下面的JScript 通用運算式包含了和上述方括號清單中相同的範圍運算式。

/Chapter [1-5]/

VBScript 相同版本的運算式如下：

"Chapter [1-5]"

當一範圍是用這種方式指定，開始和結束值都包括於此範圍內。重要的是開始值必須依照 Unicode 排列順序，而且擺在結束值之前。

如果您想要在方括號運算式裡包含連字字元，您必須執行下面其中之一的動作：

  • 使用反斜線離開:
    [\-]
  • 將連字符號放到方括弧清單的開頭或結尾。下面的運算式比對所有小寫字母和連字符號：
    [-a-z]
[a-z-]
  • 建立一個範圍 ，其開始字元值小於連字符號且結束字元值等於或是大於連字符號。下面兩個通用運算式符合這個需求：
    [!--]
[!-~]

您也可以在清單的開頭放置一個逸出字元(^)，以找出不在清單或範圍內的所有字元。如果逸出符號出現於清單內任何位置，它便符合本身，也就是它並無特殊意義。下面的JScript 通用運算式比對大於5的章節標題：

/Chapter [^12345]/

VBScript 的用法是:

"Chapter [^12345]"

上述範例中，除了 1, 2, 3, 4 或5，運算式符合任何在第九個位置出現的數字位元。例如， 'Chapter 7' 便符合，'Chapter 9'也符合。

上述範例可用連字符號 (-) 來表示。 對於JScript：

/Chapter [^1-5]/

或是以下的 VBScript 方法：

"Chapter [^1-5]"

一個典型的方括弧運算式使用是指定任何大寫或小寫英文字母字元或是任何數字的比對。下面的JScript 便指定了這樣的比對：

/[A-Za-z0-9]/

相對的 VBScript 運算式是：

"[A-Za-z0-9]"


次數符號

某些時候，您不知道有多少字元要比對。為了解決這樣的不確定性，通用運算式支援次數符號的概念。這些次數符號讓您指定通用運算式所給的元件必須符合您比對多少次數，以使條件成真。

下面表格顯示了各種次數符號和其意義：

字元 | 說明
* | 比對先前的子運算式0次或多次。 舉例來說， "zo*" 與 "z"及"zoo"相符。*相當於{0,}。
+ | 比對先前的子運算式1次或多次。 舉例來說，'zo+' 與 "zo"及 "zoo"相符,但跟"z"不相符。+ 相當於{1,}。
? | 比對先前的子運算式0次或1次。 舉例來說， "do(es)?"跟 "do" 在 "do" 或 "does"中相符。? 等於 {0,1}。
{n} | n 是一個非負數的整數，必須完全符合 n 次。例如，'o{2}' 並不符合 Bob 中的 'o'，但可符合"food"中的前兩個 o。
{n,} | n 是一個非負數的整數. 至少符合n 次。 舉例來說，'o{2,}' 跟"Bob"中的"o"不符， 且 與"foooood"中所有o相符 。'o{1,}'等於 'o+'。'o{0,}' 等於 'o*'。
{n,m} | m 和 n是非負數的整數，而且n <= m。符合最少n次而符合最多 m 次。舉例來說， 'o{1,3}' 跟"fooooood"中前三個0相符。 'o{0,1}' 等於'o?'。注意逗號和號碼間不可有空格。

對於大型輸入文件，章節數字可輕易地超過九，所以您需要一個方法來處理二或三位數的章節數字。次數符號可以讓您有這能力。下面的JScript 通用運算式可以比對任何數字的章節標題：

/Chapter [1-9][0-9]*/

下面 VBScript 通用運算式執行相同的比對：

"Chapter [1-9][0-9]*"

注意次數符號出現在範圍運算式之後。所以它可以適用於整個運算式的範圍，然而在這裡，它只指定了從0 到 9 完整數字的範圍運算式（包含0和9）。

'+' 次數符號不用在這裡，因為第二或接下來的位置並不需要是數字。 '?' 字元也不用在這裡，因為它將章節數字限制到只有兩位數。 您要比對的是'Chapter' 和空白字元後至少一位的數字。

如果您知道章節數目限制只有99 個章節，您可使用下面的JScript 運算式來指定至少一個但不多於二位數的運算式。

/Chapter [0-9]{1,2}/

VBScript 版本，使用下面的通用運算式：

"Chapter [0-9]{1,2}"

上述通用運算式的壞處是，如果有一章節數字大於 99，它將只會比對前面兩位數。另一個壞處是某些人會建立一個Chapter 0 並且還是會被比對。比對只有兩位數章節比較好的JScript 運算式如下：

/Chapter [1-9][0-9]?/

-或-

/Chapter [1-9][0-9]{0,1}/

同於VBScript版本的以下運算式：

"Chapter [1-9][0-9]?"

-或-

"Chapter [1-9][0-9]{0,1}"

'*' 、 '+'和 '?' 次數符號都被指為 強烈，那就是它們盡可能地比對文字。有時這些並不全是您想要的。 有時您只想要一個很小的比對。

例如說，您搜尋一個HTML 文件以找到以 H1 標記包住的標題。那個文字出現在您文件如同：

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的運算式比對從小於符號 (<) 開始到 H1標記結尾的大於符號的所有東西。

/<.*>/

VBScript版本的通用運算式是:

"<.*>"

如果您只想要比對開始的 H1 標記，如下所示，不強烈的運算式只比對 <H1>。

/<.*?>/

-或-

"<.*?>"

在'*' 、'+'、或 '?' 次數符號之後加入 '?'，運算式便由 強烈 轉成不強烈或很小的比對。


錨定點

至此為止，您所遇到的範例只是關於找尋章節標題之處。任何情況下字串 'Chapter' 後接著出現空白字元，再接著一個數字可能真的是章節標題，或者也可能是指向另一章節的交叉引用。畢竟真的章節標題總是出現在一行的開頭，您需要一種方法來找出章節而非交叉引用。

錨定點提供了這項功能。錨定點允許您把通用運算式指定到一行的開頭或結尾。它們也允許您把通用運算式建在一個字中或是字的開頭乃至於結尾。下面表格包含了一份通用運算式錨定點的清單和它們的意義：

字元 | 說明
^ | 比對輸入字串開始的位置。如果RegExp物件已設定多行（Multiline）屬性， ^ 也會比對'\n'或 '\r'之後的位置。
$ | 比對輸入字串結束的位置。如果RegExp物件已設定多行（Multiline）屬性，$ 也會比對'\n'或 '\r'之前的位置。
\b | 符合文字邊界（word boundary）。也就是說在字與空格之間的位置。
\B | 符合非文字邊界。

您不可以一起使用錨定點和次數符號。因換行字元或文字邊界之前或之後都不可有多於1個的位置，像是 '^*' 的運算式並不被允許。

想要比對一行文字開頭的字，請在通用運算式開頭使用 '^' 字元。別把 '^' 的使用和在方括號運算式中的使用搞混。它們完全不同。

想要比對一行文字結尾的字, 請在通用運算式之後使用 '$'字元。

想要在搜尋章節標題時使用錨定點，下面的JScript 通用運算式比對了一行開頭的章節標題，以下的Jscrip通用運算式比對了一行開頭截至2位數為止的章節標題：

/^Chapter [1-9][0-9]{0,1}/

VBScript 版本相同的通用運算式如下：

"^Chapter [1-9][0-9]{0,1}"

不只是真正的章節標題位於一行的開頭，它也是這行唯一的東西，所以也必須是這行的結尾。下面的運算式確保您所指定的比對只比對章節而非交叉引用。它靠建立一個只比對一行文字開頭和結尾的通用運算式來達成。

/^Chapter [1-9][0-9]{0,1}$/

VBScript 版本是：

"^Chapter [1-9][0-9]{0,1}$"

比對文字邊界是有一點不同，但卻增加了通用運算式一個非常重要的能力。文字邊界是文字和空白字元間的位置。非文字邊界則是其他任何位置。 下面的 JScript 運算式比對了 'Chapter' 一字中前三個字元，因為它們出現在文字邊界之後：

/\bCha/

或於 VBScript 中：

"\bCha"

在這裡 '\b' 運算子之後的位置是關鍵。如果'\b' 運算子置於被比對字串的開頭，它便尋找文字開頭的相符項目；如果它置於字串之後，它便尋找文字結尾的相符項目。例如，下面的運算式比對 'Chapter' 一字中的 'ter' ，因為它出現在文字邊界之前：

/ter\b/

和

"ter\b"

下面的運算式比對 'Chapter' 中的 'apt' ，而非 'aptitude'中的'apt'：

/\Bapt/

和

"\Bapt"

這是因為 'apt' 位於文字 'Chapter' 中的非文字邊界位置，但卻是位在 'aptitude' 中的文字邊界位置。對於非文字邊界的運算子而言，因為比對一個字的開頭或結尾並沒有關係，所以位置並不重要。


選項和群組

選項（alternation）允許使用 '|' 由原來的2至多個選項中作選擇 。您可延伸處理章節的通用運算式，使其不只處理章節。然而，事情並不如您所想的簡單。當使用選項時，字元 '|' 兩邊最有可能符合的運算式會被比對。您可能會想下面 Jscript 和 VBScript 的運算式應該比對 'Chapter' 或 'Section' ，之後接著開頭和結尾有1或2位數出現的一行：

/^Chapter|Section [1-9][0-9]{0,1}$/
"^Chapter|Section [1-9][0-9]{0,1}$"

很不幸地，所發生的是上述的通用運算式比對了一行開頭的 'Chapter' 文字或是一行結束的'Section'及其後所緊接的數字。如果輸入字串是'Chapter 22'，上述的運算式只比對 'Chapter' 一字。如果輸入字串是 'Section 22'， 運算式便比對 'Section 22'。但這並非我們所想要的，所以必須有一個方法讓通用運算式更能回應您想要做的事。

您可以使用括號來限制選項的範圍，也就是確定它只用在 'Chapter' 和 'Section' 兩字。然而，括號也有很多陷阱，因為它們也用來建立稍後談到的子運算式。靠上述通用運算式並在適當的位置加上括號，您可以讓通用運算式比對 'Chapter 1' 或 'Section 3' 。

下面的通用運算式使用括號來組合'Chapter' 和 'Section' ，使運算式在Jscript中正確地執行：

/^(Chapter|Section) [1-9][0-9]{0,1}$/

在 VBScript中：

"^(Chapter|Section) [1-9][0-9]{0,1}$"

這些運算式可運作正確，除非出現引人感興趣的副產品。把'Chapter|Section' 用括號括起來可建立適當的群組，但它也會使這兩個比對文字被擷取以供將來使用。畢竟上述的運算式只有一組括號，也只有一個子比對被擷取。可用VBScript中 Submatches 集合物件或Jscript中 RegExp物件的 $1-$9 屬性來引用這個子比對。

有時擷取子比對是需要的，有時不是。上述的例子中，您真正想做的是使用括號來組成一個'Chapter' 或是 'Section' 文字的選項。您之後並不見得需要參考這比對。事實上，除非您真的需要擷取子比對，否則不要使用上述的方式。這樣您的通用運算式會變得更有效率，因它們不需花時間和記憶體來儲存這些子比對。

您可在括號中的通用運算式模式之前使用 '?:' ，以防止該比對在為了稍後的使用時，被儲存起來 。下面將上述通用運算式做了修改，提供了不儲存子比對，但具備一樣的能力。如 Jscript 中的：

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

如 VBScript 中的：

"^(?:Chapter|Section) [1-9][0-9]{0,1}$"

除了 '?:' 中繼字元，有兩個其他用在稱為預看比對的非擷取中繼字元。使用 ?= 的正預看會從在括號內的搜尋通用運算式模式開始的任何一點比對搜尋字串。使用 ?! 的反預看則會從搜尋字串與通用運算式模式不相符的任何一點開始比對。

例如， 假設您有一個引用Windows 3.1 ， Windows 95 ， Windows 98 和 Windows NT的參考文件。假設之後您需要搜尋Windows 95 ， Windows 98 和 Windows NT的所有引用，並更新為 Windows 2000。您可使用下面的JScript 通用運算式，它是正預看的一個範例，用來比對Windows 95 ， Windows 98 和 Windows NT：

/Windows(?=95 |98 |NT )/

想要在 VBScript使用相同的比對，請使用下面的方式：

"Windows(?=95 |98 |NT )"

一旦找到相符項目，下個比對的搜尋便緊接著從比對成功的文字後開始，但並不包括預看的字元。例如，如果上述的運算式比對 'Windows 98'，搜尋便從 'Windows' 之後開始而非 '98' 之後。


回溯值

JScript
回溯值

通用運算式最重要的功能之一就是可以儲存比對模式部分，以供稍後使用。就像您所回顧的一樣，用括號把通用運算式或模式的一部分括起來，會將那一部份的運算式儲存在暫時緩衝區中。您可以使用非擷取的中繼字元 '?:' 、 '?=' 或 '?!' 來覆蓋通用運算式所儲存的那一部分。

每個擷取到的子比對是依通用運算式模式中，由左至右的方式儲存。儲存子比對的暫存區數目由1 接連到最大99 個子運算式。每個不同緩衝區可以用 '\n' 來存取，其 n 是 1或 2位數字以標示某一特定暫存區。

回溯值提供的其中一個最簡單實用的應用程式就是它提供了在一篇文章中定位兩個相同文字的能力。請參閱下面的句型：

Is is the cost of of gasoline going up up?

如同所寫的，上述句子清楚地有好幾個重複字的問題。較好的解決方式是發展出方法來修正這個句子，而不需查看每一個重複的單一文字。下面的 JScript 通用運算式使用了一個子運算式來達成這個工作。

/\b([a-z]+) \1\b/gi

相對的VBScript 運算式是：

"\b([a-z]+) \1\b"

在這裡子運算式是括號中的任何東西。擷取的運算式包含了一至多個由'[a-z]+' 所指定的英文字母字元。 通用運算式的第二個部分是引用先前擷取的子比對，也就是剛與括號中運算式比對符合而又出現第二次的字。'\1' 是用來指定第一個子比對。文字邊界的中繼字元確保只有分隔的字會被偵測。否則，運算式將無法正確地認出像是 "is issued" 或 this is" 的詞句。

JScript 運算式中，緊接於通用運算式後的全域旗標 ('g') 表示其運算式是用在所有輸入字串能找到的比對中。不區分大小寫的旗標 ('i') 出現在運算式的結尾。多行（multiline）旗標顯示可能的比對可以發生在換行字元的兩邊。對VBScript 而言，各種的旗標不能在運算式中設定，必須清楚地使用 RegExp 物件屬性來設定。

使用上述的通用運算式，下面的JScript 程式碼可以使用子比對的資訊把字串文字中兩個連續出現的相同文字置換成只出現一次的相同文字：

var ss = "Is is the cost of of gasoline going up up?.\n";
var re = /\b([a-z]+) \1\b/gim;       //建立通用運算式模式。
var rv = ss.replace(re,"$1");   //置換兩相同字為一個。

最接近的VBScript 對應程式碼如下：

Dim ss, re, rv
ss = "Is is the cost of of gasoline going up up?." & vbNewLine
Set re = New RegExp
re.Pattern = "\b([a-z]+) \1\b"
re.Global = True
re.IgnoreCase = True
re.MultiLine = True
rv = re.Replace(ss,"$1")

VBScript 程式碼中，注意全域、不區分大小寫和多行旗標已用適切命名的RegExp物件屬性來設定。

replace 方法中使用的$1 表示儲存的第一個子比對。如您有多於一個的子比對，您可引用 $2 、 $3 等等順序。

另一個回溯值的使用方式是可以用來把全球資源顯示器(URI) 拆成它的各個元件部分。假設您想要將下面的 URI 拆成各通訊協定(ftp ，http 等等)，網域位址和網頁 / 路徑：

http://msdn.microsoft.com:80/scripting/default.htm

下面的通用運算式提供了這方面的能力， 如 JScript：

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

如 VBScript中的：

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"

第一個括號的子運算式是用來擷取網頁位址的通訊協定部分。這個子運算式比對任何在一個冒號和兩個斜線之前的文字。第二個括號的子運算式擷取網址中網域位置部分。這個子運算式比對任何 '^' ， '/' 或 ':'之外的所有文字順序。第三個括號的子運算式擷取網站的埠號碼，如果其中之一被指定的話。這個子運算式比對冒號之後零到多位數的數字。最後，第四個括號的子運算式擷取網站位址指定的路徑和/或網頁資訊。這個子運算式比對1到多個除了 '#' 或空白字元之外的字元 。

在上述的URI 中使用通用運算式，子比對的內容如下：

RegExp.$1 含有 "http"

RegExp.$2含有"msdn.microsoft.com"

RegExp.$3含有":80"

RegExp.$4含有"/scripting/default.htm"


Jscript 語言參考程式

功能資訊

錯誤

函數

方法

物件

運算子

屬性

陳述式


功能資訊

下列表格說明 JScript 的功能。

說明 | 語言項目
JScript 版本的主應用程式清單和各版本的功能清單。 | 版本資訊
目前在Jscript的ECMA 功能清單。 | JScript 功能(ECMA)
目前在Jscript的非ECMA功能清單。 | JScript 功能(非ECMA)


Microsoft JScript 功能 - ECMA

下列表格列出了與 ECMA 標準相容的 JScript 功能。

類型 | 功能/關鍵字
陣列處理常式 | Array join, length, reverse, sort
指定 | Assign (=) Compound Assign (OP=)
布林 | Boolean
註解 | /*...*/ or //
常數/文字 | NaN null true, false Infinity undefined
控制流程 | Break continue for for...in if...else return while
日期與時間 | Date getDate, getDay, getFullYear, getHours, getMilliseconds, getMinutes, getMonth, getSeconds, getTime, getTimezoneOffset, getYear, getUTCDate, getUTCDay, getUTCFullYear, getUTCHours, getUTCMilliseconds, getUTCMinutes, getUTCMonth, getUTCSeconds, setDate, setFullYear, setHours, setMilliseconds, setMinutes, setMonth, setSeconds, setTime, setYear, setUTCDate, setUTCFullYear, setUTCHours, setUTCMilliseconds, setUTCMinutes, setUTCMonth, setUTCSeconds, toGMTString, toLocaleString, toUTCString, parse, UTC
宣告 | Function new this var with
函數建立 | Function arguments, length
Global 方法 | Global escape, unescape eval isFinite, isNaN parseInt, parseFloat
數學 | Math abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan, E, LN2, LN10, LOG2E, LOG10E, PI, SQRT1_2, SQRT2
數值 | Number MAX_VALUE, MIN_VALUE NaN NEGATIVE_INFINITY, POSITIVE_INFINITY
物件建立 | Object new constructor, prototype, instanceof, toString, valueOf
運算子 | 加號 (+), 減號 (-) 模數算術 (%) 乘法 (*), 除法 (/) 負號 (-) 恆等式 (==), 非恆等式 (!=) 小於 (<), 小於或等於(<=) 大於 (>) 大於或等於 (>=) And 邏輯 (&&), Or (||), Not (!) And 位元(&), Or (|), Not (~), Xor (^) 位元左移(<<), 右移 (>>) 不帶正負號的右移 (>>>) 條件式 (?:) 逗號 (, ) delete, typeof, void 遞減 ( — ), 遞增 (++)
物件 | Array Boolean Date Function Global Math Number Object String
字串 | String charAt, charCodeAt, fromCharCode indexOf, lastIndexOf split toLowerCase, toUpperCase length


Microsoft JScript 功能 - 非 ECMA

下列表格中刊出了與 ECMA 標準不相容的 JScript 功能。

種類 | 功能/關鍵字
陣列處理常式 | concat, slice VBArray dimensions, getItem, lbound, toArray, ubound
條件式編譯 | @cc_on @if 陳述式 @set 陳述式 條件式編譯變數
控制流程 | do...while Labeled switch
日期和時間 | GetVarDate
列舉 | Enumerator atEnd, item, moveFirst, moveNext
錯誤處理常式 | Error description, number throw, try...catch
函數建立 | caller
運算子 | Identity (===), Nonidentity (!==)
物件 | Enumerator 通用運算式 VBArray ActiveXObject GetObject
通用運算式與型式比對 | RegExp index, input, lastIndex, $1...$9, source, compile, exec, test 通用運算式語法
Script 引擎識別 | ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion
字串 | concat, slice match, replace, search anchor, big, blink, bold, fixed, fontcolor, fontsize, italics, link, small, strike, sub, sup


JScript 錯誤

下列表格列出了 JScript 錯誤的類型。

想知道更多資訊 | 請參閱
JScript 執行階段的錯誤清單 | 執行階段錯誤
JScript 的錯誤語法清單 | 語法錯誤


JScript 執行階段錯誤

JScript 執行階段的錯誤發生在當JScript 的指令碼想要執行系統無法執行的工作。只要指令碼一執行，就會發生Script 執行階段的錯誤; 此時系統評估變數運算式，並且機動性的分配記憶體。

錯誤代碼 | 說明
5029 | 陣列長度必須為一有限的正整數
5030 | 陣列長度必須被指定為一有限的正值
5028 | 必須要有陣列或引數
5010 | 必須是布林 (Boolean)
5003 | 無法指定為函數的結果
5000 | 無法指派給'this'
5006 | 必須要有Date 物件
5015 | 必須要有Enumerator 物件
5022 | 已丟出 (throw) 一例外事件但並未被接收 (caught)
5020 | 通用 (regular) 運算式中，必須要有')'
5019 | 通用 (regular) 運算式中，必須要有']'
5023 | 函數沒有一個正確的原型 (prototype) 物件
5002 | 必須要有函數
5008 | 指定不合法
5021 | 不正確的字元集範圍
5014 | 必須要有JScript物件
5001 | 必須要有數字
5007 | 必須要有物件
5012 | 必須要有物件成員
5016 | 必須要有通用運算式物件
5005 | 必須要有字串
5017 | 通用 (regular) 運算式中，發生語法錯誤
5026 | 分數位的數值超出範圍
5027 | 此精算值是超出範圍的
5025 | 解碼的 URI 不是有效編碼
5024 | 將被編碼的 URI 中包含無效的字元
5009 | 未定義的識別項
5018 | 未預期的次數符號
5013 | 必須要有VBArray

請參閱

JScript 語法錯誤


JScript 語法錯誤

JScript 語法錯誤是發生在當某一個JScript 陳述式的結構，違反了一或多個JScript 指令碼語言的文法規則。JScript 語法錯誤發生在程式編譯階段，程式還未開始執行的時候。

錯誤代碼 | 說明
1019 | 無法在迴圈外使用'break'
1020 | 無法在迴圈外使用'continue'
1030 | 關閉條件式編譯
1027 | 在'switch'陳述式中，'default'只能出現一次
1005 | 必須要有'('
1006 | 必須要有')'
1012 | 必須要有'/'
1003 | 必須要有':'
1004 | 必須要有';'
1032 | 必須要有'@'
1029 | 必須要有'@end'
1007 | 必須要有']'
1008 | 必須要有'{'
1009 | 必須要有'}'
1011 | 必須要有'='
1033 | 必須要有'catch'
1031 | 必須要有常數
1023 | 必須要有十六進位數字
1010 | 必須要有識別項
1028 | 必須要有識別項、字串或數字
1024 | 必須要有'while'
1014 | 不正確的字元
1026 | 標籤不存在
1025 | 標籤被重新定義
1018 | 不能在函數之外使用'return'陳述式
1002 | 語法錯誤
1035 | Throw必須接著一運算式，且於同一行程式碼
1016 | 無法判定程式註解的結尾
1015 | 無法判定字串常數的結尾

請參閱

JScript 執行階段錯誤


JScript 函數

下列表格列出了JScript 函數。

說明 | 語言項目
傳回檔案中Automation物件的引用。 | GetObject 函數
傳回一個代表使用中 Scripting 程式語言的字串。 | ScriptEngine 函數
傳回使用中 Scripting 引擎的建立版本編號。 | ScriptEngineBuildVersion 函數
傳回使用中 Scripting 引擎的主要版本編號。 | ScriptEngineMajorVersion 函數
傳回使用中 Scripting 引擎的次要版本號碼。 | ScriptEngineMinorVersion 函數


GetObject 函數 (JScript)

JScript

GetObject 函數

傳回檔案中 Automation 物件的引用。

GetObject([pathname] [, class])

引數

pathname
選擇項。這是包含即將擷取之物件的完整路徑和檔案名稱。如果省略 pathname 的話，就需要 class。
class
選擇項。這是物件的物件類別。

class 引數所用的語法為 appname.objectype，它分成下列幾個部分：

appname
必要項。這是提供物件的應用程式名稱。
objectype
必要項。這是即將建立之物件的型態或物件類別。

附註

GetObject 函數可以用來存取檔案中的 Automation 物件。您可以把 GetObject 傳回的物件指定給物件變數。例如：

var CADObject;
CADObject = GetObject("C:\\CAD\\SCHEMA.CAD");

在執行程式碼時，會啟動與指定的 pathname 相關的應用程式，並啟動指定檔案中的物件。如果 pathname 是長度零的字串 ("")，GetObject 會傳回指定型態的一個新物件執行個體。如果省略 pathname 引數的話，GetObject 會傳回指定型態目前使用中的物件。如果指定的型態不存在任何物件的話，就會出現錯誤。

有些應用程式允許您啟動檔案的一部分。當您要這麼做時，請在檔案名稱後面加上驚嘆號 (!)，後面再接著一個字串，以識別您想啟動的檔案部分。有關如何建立這個字串的資訊，請參閱建立物件之應用程式的說明文件。

例如，在繪圖應用程式中，您可能會將一張圖的多個圖層儲存在一個檔案內，就可以使用下面的程式碼來啟動 SCHEMA.CAD 這張圖中的一個圖層：

var LayerObject = GetObject("C:\\CAD\\SCHEMA.CAD!Layer3");

如果您不指定物件類別的話，Automation 會根據您提供的檔案名稱來決定要啟動的應用程式和物件。然而，有些檔案可能不止支援一種物件類別。例如，一張圖可能支援三種不同的物件型態：Application 物件、Drawing 物件和 Toolbar 物件，這些全都是同一個檔案的一部分。若要指定您想啟動檔案中的物件，請使用選擇性的 class 引數。例如：

var MyObject;
MyObject = GetObject("C:\\DRAWINGS\\SAMPLE.DRW", "FIGMENT.DRAWING");

在前一個範例中，FIGMENT 是繪圖應用程式的名稱，而 DRAWING 是它支援的一個物件型態。一旦啟動物件後，您就可以在程式碼中使用定義的物件變數來引用它。在前一個範例中，就是使用 MyObject 物件變數來存取新物件的屬性和方法。例如：

MyObject.Line(9, 90);
MyObject.InsertText(9, 100, "Hello, world.");
MyObject.SaveAs("C:\\DRAWINGS\\SAMPLE.DRW");
備註 只有當物件有目前的執行個體時，或當您想以已經載入的檔案建立物件時，才應該使用 GetObject 函數。如果沒有目前的執行個體，而且您也不想以已經載入的檔案啟動物件的話，請使用 ActiveXObject 物件。

如果一個物件把自己登錄為單一執行個體的物件，這個物件只有一個執行個體建立，不管ActiveXObject 執行了多少次。 在一個單一執行個體物件的情況底下，用長度為0("")的字串語法呼叫GetObject 時，GetObject總是傳回同樣的個體執行，而且如果漏掉了路徑名稱引數，將會產生錯誤。

基本條件

版本 5

請參閱

ActiveXObject 物件


ScriptEngine 函數 (JScript)

JScript

ScriptEngine 函數

傳回一個代表使用中 Scripting 程式語言的字串。

ScriptEngine( )

附註

ScriptEngine 函數可傳回下列任何字串：

字串 | 說明
JScript | 表示 Microsoft JScript 為現用的 Scripting 引擎。
VBA | 表示 Microsoft Visual Basic for Applications 為現用的 Scripting 引擎。
VBScript | 表示 Microsoft Visual Basic Scripting 版為現用的 Scripting 引擎。

範例

下面程式碼說明 ScriptEngine 函數的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; //建立內涵重要資訊的字串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

基本條件

版本 5

請參閱

ScriptEngineBuildVersion 函數 | ScriptEngineMajorVersion 函數 | ScriptEngineMinorVersion 函數


ScriptEngineBuildVersion 函數 ((JScript)

JScript

ScriptEngineBuildVersion 函數

傳回使用中 Scripting 引擎的建立版本編號。

ScriptEngineBuildVersion( )

附註

傳回值會根據目前正在使用的 Scripting 程式語言，直接對應動態連接程式庫 (DLL) 內的版本資訊。

範例

下面例子說明 ScriptEngineBuildVersion 函數的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 建立內涵重要資訊的字串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

基本條件

版本 5

請參閱

ScriptEngine 函數 | ScriptEngineMajorVersion 函數 | ScriptEngineMinorVersion 函數


ScriptEngineMajorVersion 函數 (Jscript)

JScript

ScriptEngineMajorVersion 函數

傳回使用中 Scripting 引擎的主要版本編號。

ScriptEngineMajorVersion( )

附註

此傳回值會直接對應到包含在使用中 Scripting 程式語言的動態連結程式庫 (DLL) 內的版本資訊。

範例

下面例子說明 ScriptEngineMajorVersion 函數的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 建立內涵重要資訊的字串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

基本條件

版本 5

請參閱

ScriptEngine 函數 | ScriptEngineBuildVersion 函數 | ScriptEngineMinorVersion 函數


ScriptEngineMinorVersion 函數 (JScript)

JScript

ScriptEngineMinorVersion 函數

傳回使用中 Scripting 引擎的次要版本號碼。

ScriptEngineMinorVersion( )

附註

此傳回值會直接對應到包含在使用中 Scripting 程式語言的動態連結程式庫 (DLL) 內的版本資訊。

範例

下面例子說明 ScriptEngineMinorVersion 函數的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 建立內涵重要資訊的字串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

基本條件

版本 5

請參閱

ScriptEngine 函數 | ScriptEngineBuildVersion 函數 | ScriptEngineMajorVersion 函數


JScript 方法

下列表格列出了 JScript 方法。

說明 | 語言項目
傳回一個數字的絕對值。 | abs 方法
傳回一個數字的弧餘弦值 (arccosine)。 | acos 方法
將物件中指定的文字加上內含 NAME 特性的 HTML 錨定點 (anchor) 標記。 | anchor 方法
傳回一個數字的弧正弦值 (arcsine)。 | asin 方法
傳回一個數字的弧正切值 (arctangent)。 | atan 方法
傳回從 X 軸到點 (y,x) 的角度 (以弧度為單位)。 | atan2 方法
傳回一個布林值，以指出列舉運算子 (enumerator) 是否在集合物件的結束處。 | atEnd 方法
將 String 物件中的文字加上 HTML <BIG> 標記。 | big 方法
將 String 物件中的文字加上 HTML <BLINK> 標記。 | blink 方法
將 String 物件中的文字加上 HTML <B> 標記。 | bold 方法
傳回大於或等於其數字引數的最小整數。 | ceil 方法
傳回指定之索引所在的字元。 | charAt 方法
傳回指定字元的Unicode 編碼。 | charCodeAt 方法
將通用運算式編譯成內部格式。 | compile 方法
傳回一個由兩個或兩個以上陣列組合而成的新陣列。 | concat 方法 (Array)
傳回一個包含串連起來之兩個指定字串的 String 物件。 | concat 方法 (String)
傳回一個數字的餘弦值 (cosine)。 | cos 方法
傳回 VBArray 中的維度個數。 | dimensions 方法
將 String 物件編碼，以便可以在所有的電腦上讀取它們。 | escape 方法
評估 JScript 程式碼並執行它。 | eval 方法
使用一個運算式類型來搜尋字串，並將包含了搜尋結果的array傳回。 | exec 方法
傳回 e (自然對數的底數) 的乘冪數。 | exp 方法
將 String 物件中的文字加上 HTML <TT> 標記。 | fixed 方法
傳回小於或等於其數字引數的最大整數。 | floor 方法
傳回小於或等於其數字引數的最大整數。 | fontcolor 方法
將 String 物件中的文字加上內含 SIZE 特性的 HTML <FONT> 標記。 | fontsize 方法
從一些 Unicode 字元值傳回一個字串。 | fromCharCode 方法
使用本地時間，傳回 Date 物件中月份的日期值。 | getDate 方法
使用本地時間傳回 Date 物件中星期的日期值。 | getDay 方法
使用本地時間傳回 Date 物件中的年份值。 | getFullYear 方法
使用本地時間傳回 Date 物件中的小時值。 | getHours 方法
傳回指定位置中的項目。 | getItem 方法
使用本地時間傳回 Date 物件中的毫秒值。 | getMilliseconds 方法
使用本地時間傳回 Date 物件中的分鐘值。 | getMinutes 方法
使用本地時間傳回 Date 物件中的月份值。 | getMonth 方法
使用本地時間傳回 Date 物件中的秒數值。 | getSeconds 方法
傳回 Date 物件中的時間值。 | getTime 方法
傳回主機時間與全球標準時間（UTC）之間的分鐘差。 | getTimezoneOffset 方法
使用全球標準時間（UTC）傳回Date 物件中的日期。 | getUTCDate 方法
使用全球標準時間（UTC）傳回Date 物件中星期的日期值。 | getUTCDay 方法
使用全球標準時間（UTC）傳回Date 物件中的年份值。 | getUTCFullYear 方法
使用全球標準時間（UTC）傳回Date 物件中的小時值。 | getUTCHours 方法
使用全球標準時間（UTC）傳回 Date 物件中的毫秒值。 | getUTCMilliseconds 方法
使用全球標準時間（UTC）傳回 Date 物件中的分鐘值。 | getUTCMinutes 方法
使用全球標準時間（UTC）傳回 Date 物件中的月份值。 | getUTCMonth 方法
使用全球標準時間（UTC）傳回Date 物件中的秒數值。 | getUTCSeconds 方法
傳回 Date 物件中的 VT_DATE 值。 | getVarDate 方法
傳回 Date 物件中的年份值。 | getYear 方法
傳回在 String 物件中子字串第一次出現的字元位置。 | indexOf 方法
傳回一個布林值，以指出提供的數字是否為有限的。 | isFinite 方法
傳回一個布林值，以指出該值是否為保留值 NaN (不是一個數字)。 | isNaN 方法
將 String 物件中的文字加上 HTML <I> 標記。 | italics 方法
傳回集合物件中目前的項目。 | item 方法
傳回一個字串值，它是由陣列中的所有元素串連在一起所組成，並且用特定的分隔字元來分隔。 | join 方法
傳回在 String 物件中子字串最後一次出現的字元位置。 | lastIndexOf 方法
傳回指定的 VBArray 維度中所使用的最小索引值。 | lbound 方法
將 String 物件中的文字加上內含 HREF 特性的 HTML 錨定點 (anchor) 標記。 | link 方法
傳回一個數字的自然對數。 | log 方法
使用一個通用運算式模式執行字串搜尋，並且以陣列傳回使用通用運算式物件進行字串搜尋的結果。 | match 方法
傳回零個或更多指定數值運算式中較大的那一個。 | max 方法
傳回零個或更多指定數值運算式中較小的那一個。 | min 方法
將集合物件中目前的項目重設為第一個項目。 | moveFirst 方法
將目前的項目移到集合物件中的下一個項目。 | moveNext 方法
剖析一個包含日期的字串，並傳回該日期與 1970 年 1 月 1 日午夜 12 點之間的毫秒數。 | parse 方法
傳回一個從字串轉換而來的浮點數。 | parseFloat 方法
傳回一個從字串轉換而來的整數。 | parseInt 方法
傳回一基底運算式經過指定次方運算後的結果。 | pow 方法
傳回一個介於 0 到 1 之間的虛擬亂數。 | random 方法
傳回以通用運算式或搜尋字串取代文字後的字串。 | replace 方法
傳回一個元件反轉的 Array 物件。 | reverse 方法
將指定之數值運算式進位至最接近整數的值傳回。 | round 方法
傳回通用運算式搜尋中第一個符合之子字串的位置。 | search 方法
使用本地時間設定 Date 物件的數值日期。 | setDate 方法
使用本地時間設定 Date 物件中的年份值。 | setFullYear 方法
使用本地時間設定 Date 物件中的小時值。 | setHours 方法
使用本地時間設定 Date 物件中的毫秒值。 | setMilliseconds 方法
使用本地時間設定 Date 物件中的分鐘值。 | setMinutes 方法
使用本地時間設定 Date 物件中的月份值。 | setMonth 方法
使用本地時間設定 Date 物件中的秒數值。 | setSeconds 方法
設定 Date 物件中的日期和時間值。 | setTime 方法
使用全球標準時間（UTC）設定 Date 物件中的數值日期。 | setUTCDate 方法
使用全球標準時間（UTC）設定 Date 物件中的年份值。 | setUTCFullYear 方法
使用全球標準時間（UTC）設定 Date 物件中的小時值。 | setUTCHours 方法
使用全球標準時間（UTC）設定 Date 物件中的毫秒值。 | setUTCMilliseconds 方法
使用全球標準時間（UTC）設定 Date 物件中的分鐘值。 | setUTCMinutes 方法
使用全球標準時間（UTC）設定Date 物件中的月份值。 | setUTCMonth 方法
使用全球標準時間（UTC）設定Date 物件中的秒數值。 | setUTCSeconds 方法
設定 Date 物件中的年份值。 | setYear 方法
傳回一個數值的正弦值 (sine)。 | sin 方法
傳回陣列的一個區段。 | slice 方法 (Array)
傳回字串的部分區段。 | slice 方法 (String)
將 String 物件中的文字加上 HTML <SMALL> 標記。 | small 方法
傳回一個元素已排序過的 Array 物件。 | sort 方法
將字串分為數個子字串，傳回所產生的字串陣列。 | split 方法
將字串分為數個子字串，傳回所產生的字串陣列。 | sqrt 方法
將 String 物件中的文字加上 HTML <STRIKE> 標記。 | strike 方法
將 String 物件中的文字加上HTML <SUB> 標記。 | sub 方法
傳回一個從指定位置開始、且有指定長度的子字串。 | substr 方法
傳回 String 物件內在指定位置上的子字串。 | substring 方法
將 String 物件中的文字加上 HTML <SUP> 標記。 | sup 方法
傳回一個數值的正切值 (tangent)。 | tan 方法
傳回布林值，表示搜尋字串中是否包括模式。 | test 方法
傳回從 VBArray 轉換而來的標準 JScript 陣列。 | toArray 方法
將日期以格林威治標準時間 (GMT) 的格式轉換為字串並傳回。 | toGMTString 方法
將日期以目前國別語系設定的格式轉換為字串並傳回。 | toLocaleString 方法
傳回一個字串，而字串中的所有字母字元都已轉換成小寫。 | toLowerCase 方法
傳回一個物件的字串表示法。 | toString 方法
傳回一個字串，而字串中的所有字母字元都已轉換成大寫。 | toUpperCase 方法
將日期以全球標準時間（UTC）的格式轉換成字串並傳回。 | toUTCString 方法
傳回指定的 VBArray 維度中所使用的最大索引值。 | ubound 方法
用 escape 方法將編碼的String 物件解碼。 | unescape 方法
傳回提供的日期與全球標準時間（UTC）(或 GMT) 1970 年 1 月 1 日午夜 12 點之間的毫秒數。 | UTC 方法
傳回指定物件的基本值。 | valueOf 方法


abs 方法

傳回一個數字的絕對值。

Math.abs(number)

所需的number引數是一個需要有絕對值的數值運算式。

附註

傳回值為 number 引數的絕對值。

範例

下面的範例說明 abs 方法的用法。

function ComparePosNegVal(n)
{
   var s;
   var v1 = Math.abs(n);
   var v2 = Math.abs(-n);
   if (v1 == v2)
      s = "The absolute values of " + n + " and "
      s += -n + " are identical.";
   return(s);
}

基本條件

版本 1

請參閱

Math 物件方法

適用於：Math 物件


acos 方法

傳回一個數字的弧餘弦值 (arccosine)。

Math.acos(number)

所需的number引數是一個需要有弧餘弦值的數值運算式。

備註

傳回值是 number 引數的弧餘弦值。

基本條件

版本 1

請參閱

asin 方法 | atan 方法 | cos 方法 | sin 方法 | tan 方法

適用於：Math 物件


anchor 方法

將物件中指定的文字加上內含 NAME 特性的 HTML 錨定點 (anchor) 標記。

strVariable.anchor(anchorString)

引數

strVariable
必要項。任何 字串 物件或 字串 常值。
anchorString
必要項。您想要放在 HTML 錨定中 NAME 屬性的內容。

附註

呼叫 anchor 方法可在 String 物件外建立一個具名的錨定點。下面的範例說明 anchor 方法如何完成該任務：

var strVariable = "This is an anchor"";
strVariable = strVariable.anchor("Anchor1"");

最後一項敘述後的strVariable 值是:

<A NAME="Anchor1"">This is an anchor</A>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

link 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


apply 方法

套用某種物件的方法，以另一種物件取代目前的物件。

apply([thisObj[,argArray]])

引數

thisObj
選擇項。為目前的使用物件。
argArray
選擇項。將傳給函數的引數陣列。

附註

如果 argArray 不是有效的陣列，或不是 arguments 物件，則結果為 TypeError。

如果 argArray 和 thisObj 兩者都未提供的話，將使用 global 物件做為 thisObj，而且不傳送任何引數。

基本條件

版本 5.5

請參閱

適用於：Function 物件


asin 方法

傳回一個數字的弧正弦值 (arcsine)。

Math.asin(number)

所需的number引數是必須有弧正弦值的numeric 運算式。

附註

傳回值是其數字引數的弧正弦值。

基本條件

版本 1

請參閱

acos 方法 | atan 方法 | cos 方法 | Math 物件方法 | sin 方法 | tan 方法

適用於：Math 物件


atan 方法

傳回一個數字的弧正切值 (arctangent)。

Math.atan(number)

所需的number引數是必須有弧正切值的 numeric 運算式。

附註

傳回值是其數字引數的弧正切值。

基本條件

版本 1

請參閱

acos 方法 | asin 方法 | atan2 方法 | cos 方法 | Math 物件方法 | sin 方法 | tan 方法

適用於：Math 物件


atan2 方法

傳回從 X 軸到點 (y,x) 的角度 (以弧度為單位)。

Math.atan2(y, x)

引數

x
必要項。是一個代表笛卡兒座標x軸的 numeric 運算式。
y
必要項。代表笛卡兒座標y軸 的數值運算式。

附註

傳回值介於 -pi 和 pi 之間，代表提供點 (y,x) 的角度。

基本條件

版本 1

請參閱

atan 方法 | tan 方法

適用於：Math 物件


atEnd 方法

傳回一個布林值，以指出列舉運算子 (enumerator) 是否在集合物件的結束處。

myEnum.atEnd( )

myEnum 引數是任何的 Enumerator 物件。

附註

如果目前的項目是集合物件中的最後一個、集合物件是空的或目前的項目尚未定義的話，atEnd 方法就會傳回 true；否則會傳回 false。

範例

在下面的程式碼中，使用 atEnd 方法來確定是否已到達磁碟機清單的結尾：

function ShowDriveList(){
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=   n + "<br>";
   }
   return(s);
}

基本條件

版本 2

請參閱

item 方法 | moveFirst 方法 | moveNext 方法

適用於：Enumerator 物件


big 方法

將 String 物件中的文字加上 HTML <BIG> 標記。

strVariable.big( )

必要的strVariable引用是任何的字串物件或字串常值。

附註

下面的範例說明 big 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.big( );

執行最後一個陳述式之後的 strVariable 值是：

<BIG>This is a string object</BIG>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

small 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


blink 方法

將 String 物件中的文字加上 HTML <BLINK> 標記。

strVariable.blink( )

必要的strVariable引用是任何的字串物件或字串常值。

附註

下面的範例說明 blink 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.blink( );

執行最後一個陳述式之後的 strVariable 值是：

<BLINK>This is a string object</BLINK>

不會檢查標記是否已套用至字串上。

Microsoft Internet Explorer 不支援 <BLINK> 標記。

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性

適用於：String 物件


bold 方法

將 String 物件中的文字加上 HTML <B> 標記。

strVariable.bold()

必要的strVariable引用是任何的字串物件或字串常值。

附註

下面的範例說明 bold 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.bold( );

執行最後一個陳述式之後的 strVariable 值是：

<B>This is a string object</B>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

italics 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


call 方法

呼叫物件的方法，以另一種物件取代目前的物件。

call([thisObj[, arg1[, arg2[,   [, argN]]]]])

引數

thisObj
選擇項。為目前的使用物件。
arg1, arg2, , argN
選擇項。為傳至方法的引數清單。

附註

call 方法是用來以另一個物件的身分呼叫方法。call 方法可讓您將函數的物件內容從原始內容變成由 thisObj 指定的新物件。

如果未提供 thisObj 的話，將使用 global 物件做為 thisObj。

基本條件

版本 5.5

請參閱

適用於：Function 物件


ceil 方法

傳回大於或等於其數字引數的最小整數。

Math.ceil(number)

所需的number引數是一個numeric 運算式。

附註

傳回值為一個等於最小整數的整數值，此最小整數大於或等於其數字引數。

基本條件

版本 1

請參閱

floor 方法 | Math 物件方法

適用於：Math 物件


charAt 方法

傳回指定之索引所在的字元。

strObj.charAt(index)

引數

strObj
必要項。為一個 字串物件或字串常值。
index
必要項。指定字元的後置索引。有效值在0與字串長度減1之間。

附註

charAt 方法會傳回指定索引所在之字元。字串中的第一個字元位於索引 0，第二個字元位於索引 1，依此類推。指定有效範圍以外的索引值會傳回空白字串。

範例

下面的範例說明 charAt 方法的用法：

function charAtTest(n){
   var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //開啟變數。
   var s;                                  //宣告變數。
   s = str.charAt(n - 1);                  //取得正確字元。
                                           //從位置n – 1.
   return(s);                              //傳回字元。
}

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性

適用於：String 物件


charCodeAt 方法

傳回整數，以代表指定位置上之字元的 Unicode 編碼。

strObj.charCodeAt(index)

引數

strObj
必要項。任何 String 字串或常值。
index
必要項。所需字元從零起算的索引。有效值介於 0 到字串長度減 1 之間。

附註

字串中第一個字元的索引是 0，第二個字元的索引是 1，依此類推。

如果指定 index 位置上沒有任何字元，即傳回 NaN。

範例

以下範例示範 charCodeAt 方法的用法。

function charCodeAtTest(n){
  var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //使變數初始化。
  var n;                                  //宣告變數。
  n = str.charCodeAt(n - 1);              //從位於位置n 的字元
                                          // 取出Unicode 值。
  return(n);                              //傳回值。
}

基本條件

版本 5.5

請參閱

fromCharCode 方法 | String Object 方法

適用於：String 物件


compile 方法

將通用運算式編譯成內部格式使執行更快速。

rgExp.compile(pattern, [flags])

引數

rgExp
必要項。它是一個 通用運算式 物件。可以是變數名稱或文字。
pattern
必要項。它是一個字串運算式，其中包含將要編譯的通用運算式模式。
flags
選擇項。可組合的旗標是:
  • g (全文搜尋模擬比對的發生)
  • i (略過項目)
  • m (多重搜尋)

附註

compile 方法會將 pattern 轉換成內部格式以加快執行速度。此種方法可提高在迴圈中使用通用運算式的效率，例如：當重複使用一個一般的 compiled 運算式，可以使運算速度加快，直到這個一般的 compiled 運算式改變為止。

範例

下面的範例說明 compile 方法的用法：

function CompileDemo(){
   var rs;
   var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp"
   // 建立只搜尋大寫字母的通用運算式。
   var r = new RegExp("[A-Z]", "g");
   var a1 = s.match(r)              // 尋找符合項目。
   // 編譯只搜尋小寫的通用運算式。
   r.compile("[a-z]", "g");
   var a2 = s.match(r)              // 尋找符合項目。
   return(a1 + "\n" + a2;
}

基本條件

版本 3

請參閱

通用運算式物件方法 | 通用運算式物件屬性 | 通用運算式語法

適用於：通用運算式物件


concat 方法 (Array)

傳回一個由兩個或兩個以上陣列組合而成的新陣列。

array1.concat([item1[, item2[, . . . [, itemN]]]])

引數

array1
必要項。所有的陣列都串連到這個Array 物件。
item1,. . ., itemN
選擇項。串連在 array1 結尾處的額外項目。

附註

oncat 方法會傳回一個 Array 物件，其中包含 array1 和其他項目串連的結果。

加到array裡的項目(item1 � itemN) 會由左而右加入。如果其中一個項目本身就是array，它的內容將會被加到 array1 的最後。如果不是array，它將會被視為單一的 array 元件加到array 的最後。

來源array 的元件經複製後，結果如下:

  • 當引用陣列裡的一個物件串連到另一個陣列裡時，引用的物件會對應到新陣列裡的相同物件。此時新陣列的改變會導致原來陣列的改變，而原來陣列的改變也會導致新陣列的改變。
  • 把一個數字值或字串值串連到新array裡時，只有值會複製過去。 一個array裡的值如果改變，並不會影響array裡的值。

範例

下面的範例說明 concat 方法處理一個陣列時的用法︰

function ConcatArrayDemo(){
   var a, b, c, d;
   a = 新陣列(1,2,3);
   b = "JScript";
   c = 新陣列(42, "VBScript);
   d = a.concat(b, c);
   //傳回陣列 [1, 2, 3, "JScript", 42, "VBScript"]
   傳回(d);
}

基本條件

版本 3

請參閱

concat 方法 (String) | join 方法 | String 物件

適用於：Array 物件


concat 方法 (String)

傳回一個包含串連起來之兩個指定字串的 String 物件。

string1.concat([string2[, string3[, . . . [, stringN]]]])

引數

string1
必要項。已經連結了其他指定字串的String 物件或常值。
string2,. . ., stringN
必要項。連結到string1 最後的 String 物件或常值。

附註

concat 方法的結果相當於： string1 + string2 + string3 + � + stringN. 來源字串的數值如果改變，並不會影響結果字串的數值，而結果字串的數值如果改變，也不會影響來源字串的數值。如果有任何的引數不是字串，它們會先轉換成字串，再串連到string1。

範例

下面的範例說明 concat 方法的用法：

function concatDemo(){
   var str1 = "ABCDEFGHIJKLM"
   var str2 = "NOPQRSTUVWXYZ";
   var s = str1.concat(str2);
   // 傳回串連起來的字串。
   return(s);
}

基本條件

版本 3

請參閱

加號運算子 (+) | Array 物件 | concat 方法 (Array) | String 物件方法

適用於：String 物件


cos 方法

傳回一個數字的餘弦值 (cosine)。

Math.cos(number)

number 引數是一個需要餘弦值的 numeric 運算式。

附註

傳回值是其數值引數的餘弦值。

基本條件

版本 1

請參閱

acos 方法 | asin 方法 | atan 方法 | Math 物件方法 | sin 方法 | tan 方法

適用於：Math 物件


decodeURI 方法

傳回已編碼之 Uniform Resource Identifier (URI) 的解碼版本。

decodeURI(URIstring)

必要的 URIstring 引數是代表 URI 的編碼值。

附註

使用 decodeURI 方法，而不要用過時的 unescape 方法。

decodeURI 方法會傳回字串值。

如果 URIString 無效，就會發生 URIError。

基本條件

版本 5.5

請參閱

decodeURIComponent 方法 | encodeURI 方法

適用於：Global 物件


decodeURIComponent 方法

傳回 Uniform Resource Identifier (URI) 的一個編碼元件的解碼版本。

decodeURIComponent(encodedURIString)

必要的 encodedURIString 引數是代表 URI 元件的編碼值。

附註

URIComponent 是完整 URI 的一部分。

如果 encodedURIString 無效，就會發生 URIError。

基本條件

版本 5.5

請參閱

decodeURI 方法 | encodeURI 方法

適用於：Global 物件


dimensions 方法

傳回 VBArray 中的維度個數。

array.dimensions( )

所需的array 引數是一個 VBArray 物件。

附註

dimensions 方法提供在指定的 VBArray 中擷取維度個數的方法。

下面的範例包含三個部分。第一個部分是建立 Visual Basic 安全陣列的 VBScript 程式碼。第二個部分是決定安全陣列中的維度個數和每個維度上限的 JScript 程式碼。上述兩個部分構成 HTML 網頁的 <HEAD> 區段。第三個部分則是在 <BODY> 區段執行其他兩個部分的 JScript 程式碼。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         k = k + 1
      Next
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vba)
{
   var i, s;
   var a = new VBArray(vba);
   for (i = 1; i <= a.dimensions(); i++)
   {
      s = "The upper bound of dimension ";
      s += i + " is ";
      s += a.ubound(i)+ ".<BR>";
   }
   return(s);
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT language="jscript">
   document.write(VBArrayTest(CreateVBArray()));
</SCRIPT>
</BODY>

基本條件

版本 3

請參閱

getItem 方法 | lbound 方法 | toArray 方法 | ubound 方法

適用於：VBArray 物件


encodeURI 方法

將文字字串編碼為有效的 Uniform Resource Identifier (URI)。

encodeURI(URIString)

所需的 URIstring 引數是代表 URI 的編碼值。

附註

encodeURI 方法會傳回編碼的 URI。如果將結果傳給 decodeURI，就會傳回原始字串。encodeURI 方法不會編碼下列字元：":"、"/"、";" 和 "?"。若要編碼這些字元，可用 encodeURIComponent。

基本條件

版本 5.5

請參閱

decodeURI 方法 | decodeURIComponent 方法

適用於：Global 物件


encodeURIComponent 方法

將文字字串編碼成有效的 Uniform Resource Identifier (URI) 元件。

encodeURIComponent(encodedURIString)

所需的 encodedURIString 引數是代表 URI 元件的編碼值。

附註

encodeURIComponent 方法會傳回編碼的 URI。如果將結果傳給 decodeURIComponent，就會傳回原始字串。因為 encodeURIComponent 方法會將所有字元編碼，所以使用時要小心。如果字串代表像 /folder1/folder2/default.html這樣的字串，斜線字元也都會被編碼，將這樣的結果當成傳給 web 伺服器的要求，將是無效的。如果字串不止包含一個 URI 元件的話，應使用 encodeURI 方法。

基本條件

版本 5.5

請參閱

decodeURI 方法 | decodeURIComponent 方法

適用於：Global 物件


escape 方法

將 String 物件編碼，以便可以在所有的電腦上讀取它們。

escape(charString)

所需的 charString 引數是任何譯成密碼的String 物件或常數。

附註

escape 方法會 (以 Unicode 格式) 傳回一個新的 String，內含 charstring 的內容。而所有的空格、標點符號、重音字元，以及其他非-ASCII 字元均以 %xx 解碼，而 xx 就等於以十六進位數字取代字元。例如：空白鍵以「%20」表達。

字元數值大於 255 者，則以 %uxxxx 格式儲存。

備註 不要用escape 方法來譯Uniform Resource Identifiers (URI)。請改用encodeURI 和 encodeURIComponent 方法。

基本條件

版本 1

請參閱

encodeURI 方法 | encodeURIComponent 方法 | String 物件 | unescape 方法

適用於：Global 物件


eval 方法

評估 JScript 程式碼並執行它。

eval(codeString)

所需的codeString 引數是包含有效JScript 密碼的字串值。透過 JScript 剖析器，可以看出並執行字串的所有變化。

附註

eval 函數允許 JScript 來源碼的動態執行。例如，下面程式碼會建立包含 Date 物件的新變數 mydate：

eval("var mydate = new Date();");

傳遞至 eval 方法的程式碼會在呼叫 eval 方法的同時，於同一內容中執行。

基本條件

版本 1

請參閱

String 物件

適用於：Global 物件


exec 方法

使用一個運算式類型來搜尋字串，並將包含了搜尋結果的array傳回。

rgExp.exec(str)

引數

rgExp
必要項。作為包含通用運算式與可適用旗標的通用運算式模式。
str
必要項。執行搜尋的String 物件或字串常值。

附註

如果 exec 方法找不到符合的項目，會傳回 null。如果找到一或多個符合的項目，則 exec 方法會傳回一個陣列，而 RegExp 物件則會更新以反映搜尋結果。當elements 1 – n E包含了任何符合主項目中的子項目，這個陣列的element zero 就包含了整個符合項目。這種做法相當於去掉global 旗標（g）群組的match 方法。

如果一個通用運算式已經設定了global 旗標，exec 將會搜尋最後索引值在字串之首指定的位置。如果global 旗標並未設定，exec 會略過lastIndex值 ，並從字串之首開始搜尋。

用exec 方法傳回的陣列有三個屬性，輸入、索引 和 最後索引。輸入屬性包含整個搜尋的字串。索引屬性包含在整個搜尋字串中，與子字串相符的位置。最後索引屬性包含了相符項目中最後一個字元以後的位置。

範例

下面的範例說明 exec 方法的用法：

function RegExpTest(){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  if (ver >= 5.5){                 //測試 JScript 版本。
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g;               //建立一般運算式的模式。
    var arr;
    while ((arr = re.exec(src)) != null)
       document.write(arr.index + "-" + arr.lastIndex + "\t" + arr);
  }
  else{
    alert("你需要一個更新的JScript 版本來處理這個工作");
  }
}

基本條件

版本 3

請參閱

match 方法 | RegExp 物件 | 通用運算式物件方法 | 通用運算式物件屬性 |通用運算式語法 | search 方法 | test 方法

適用於：通用運算式物件


exp 方法

傳回 e (自然對數的底數) 的乘冪數。

Math.exp(number)

number 引數是代表e 的 numeric 運算式。

附註

傳回值為 enumber。常數 e 為歐拉常數 (Euler's constant)，大約等於 2.178，而 number 是提供的引數。

基本條件

版本 1

請參閱

E 屬性 | Math 物件方法

適用於：Math 物件


fixed 方法

將 String 物件中的文字加上 HTML <TT> 標記。

strVariable.fixed( )

所需的strVariable 引用是任何String物件或常值。

附註

下面的範例說明 fixed 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.fixed();

執行最後一個陳述式之後的 strVariable 值是：

<TT>This is a string object</TT>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性

適用於：String 物件


floor 方法

傳回小於或等於其數字引數的最大整數。

Math.floor(number)

number 引數是一個 numeric 運算式.

附註

傳回值為一個等於最大整數的整數值，此最大整數小於或等於其數字引數。

基本條件

版本 1

請參閱

ceil 方法 | Math 物件方法

適用於：Math 物件


fontcolor 方法

將 String 物件中的文字加上內含 COLOR 特性的 HTML <FONT> 標記。

strVariable.fontcolor(colorVal)

引數

strVariable
必要項。任何 String 物件或常值。
colorVal
必要項。String 值含有一個 color 值。可以是十六進位的值，或是事先設定的color名稱。

附註

下面的範例說明 fontcolor 方法：

var strVariable = "This is a string";
strVariable = strVariable.fontcolor("red");

執行最後一個陳述式之後的 strVariable 值是：

<FONT COLOR="RED">This is a string</FONT>

預先定義的色彩名稱是否有效，取決於您的 JScript 主應用程式 (瀏覽器、伺服器等等)。它們也會因您的主應用程式版本而有所不同。有關詳細的資訊，請參閱您的主應用程式說明文件。

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

fontsize 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


fontsize 方法

將 String 物件中的文字加上內含 SIZE 特性的 HTML <FONT> 標記。

strVariable.fontsize(intSize)

引數

strVariable
必要項。任何String 物件或常數。
intSize
必要項。指定內容大小的正整數。

附註

下面的範例說明 fontsize 方法：

var strVariable = "This is a string";
strVariable = strVariable.fontsize(-1);

執行最後一個陳述式之後的 strVariable 值是：

<FONT SIZE="-1">This is a string</FONT>

整數值是否有效，取決於您的 Microsoft JScript 主應用程式。有關詳細的資訊，請參閱您的主應用程式說明文件。

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

fontcolor 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


fromCharCode 方法

從一些 Unicode 字元值傳回一個字串。

String.fromCharCode([code1[, code2[, ...[, codeN]]]])

引數

String
必要項。String 物件。
code1, code2,. . . , codeN
選擇項。code 引數是要轉換成字串的一串 Unicode 字元值。 如果不提供引數，結果將是空白字串。

附註

在呼叫 fromCharCode 之前，不須先建立一個 String 物件。

在下面的範例中，test 會包含純文字字串：

var test = String.fromCharCode(112, 108, 97, 105, 110);

基本條件

版本 3

請參閱

charCodeAt 方法 | String 物件方法

適用於：String 物件


getDate 方法

使用本地時間，傳回 Date 物件中月份的日期值。

dateObj.getDate()

引用的dateObj是一個 Date 物件。

附註

若要取得以全球標準時間 (UCT) 計算的日期值，請使用 getUTCDate 方法。

傳回值是一個介於 1 到 31 之間的整數，代表 Date 物件中的日期值。

範例

下面的範例說明 getDate 方法的用法：

function DateDemo(){
   var d, s = "Today's date is: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getYear();
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法 | getUTCDate 方法 | setDate 方法 | setUTCDate 方法

適用於：Date 物件


getDay 方法

使用本地時間傳回 Date 物件中星期的日期值。

dateObj.getDay()

所引用的dateObj 是一個Date物件。

附註

若要取得以全球標準時間 (UTC) 計算的日期值，請使用 getUTCDay 方法。

getDay 方法所傳回的值是一個介於 0 到 6 之間的整數，代表星期的日期值，而對應星期值的方式如下：

值 | 日期
0 | 星期日
1 | 星期一
2 | 星期二
3 | 星期三
4 | 星期四
5 | 星期五
6 | 星期六

下面的範例說明 getDay 方法的用法。

function DateDemo(){
   var d, day, x, s = "Today is: ";
   var x = new Array("Sunday", "Monday", "Tuesday");
   var x = x.concat("Wednesday","Thursday", "Friday");
   var x = x.concat("Saturday");
   d = new Date();
   day = d.getDay();
   return(s += x[day]);
}

基本條件

版本 1

請參閱

Date 物件方法 | getUTCDay 方法

適用於：Date 物件


getFullYear 方法

使用本地時間傳回 Date 物件中的年份值。

dateObj.getFullYear()

所引用的dateObj 是一個Date物件。

附註

若要取得以全球標準時間 (UTC) 計算的年份值，請使用 getUTCFullYear 方法。

getFullYear 方法會傳回年份的絕對值。例如 1976 年就會傳回 1976，以避免了經典的公元兩千年的問題，例如，日期為2000年1月1日和1900年1月1日混淆不清的問題。

下面的範例說明 GetFullYear 方法的用法。

function DateDemo(){
   var d, s = "Today's UTC date is: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getFullYear();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getUTCFullYear 方法 | setFullYear 方法 | setUTCFullYear 方法

適用於：Date 物件


getHours 方法

使用本地時間傳回 Date 物件中的小時值。

objDate.getHours()

所引用的dateObj是一個Date物件。

附註

若要取得以全球標準時間 (UTC) 計算的小時值，請使用 getUTCHours 方法。

getHours 方法會傳回一個介於 0 到 23 之間的整數，代表從午夜開始的小時數。有兩種情況會出現 0：在 1:00:00 am 之前，或在建立 Date 物件時物件內未儲存時間。只有同時檢查分鐘和秒數的值是不是 0，才能確定是哪一種情況。如果都是 0 的話，就幾乎可以確定是 Date 物件內未儲存時間。

下面的範例說明 getHours 方法的用法。

function TimeDemo(){
   var d, s = "The current local time is: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法 | getUTCHours 方法 | setHours 方法 | setUTCHours 方法

適用於：Date 物件


getItem 方法

傳回指定位置中的項目。

safeArray.getItem(dimension1[, dimension2, ...], dimensionN)

引數

safeArray
必要項。這是一個 VBArray 物件。
dimension1, ..., dimensionN
指定所需 VBArray 元件的正確位置。n 等於 VBArray 中的維度個數。

範例

下面範例包含三個部分。第一個部分是建立 Visual Basic 安全陣列的 VBScript 程式碼。第二個部分是重複 VB 安全陣列和印出每個元素內容的 JScript 程式碼。上述兩個部分構成 HTML 網頁的 <HEAD> 區段。第三個部分則是在 <BODY> 區段執行其他兩個部分的 JScript 程式碼。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(i, j) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("<BR>")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>
<SCRIPT LANGUAGE="JScript">
<!--
function GetItemTest(vbarray)
{
   var i, j;
   var a = new VBArray(vbarray);
   for (i = 0; i <= 2; i++)
   {
      for (j =0; j <= 2; j++)
      {
         document.writeln(a.getItem(i, j));
      }
   }
}-->
</SCRIPT>
</HEAD>
&ltBODY>
<SCRIPT LANGUAGE="JScript">
<!--
   GetItemTest(CreateVBArray());
-->
</SCRIPT>
</BODY>

基本條件

版本 1

請參閱

dimensions 方法 | lbound 方法 | toArray 方法 | ubound 方法

適用於：VBArray 物件


getMilliseconds 方法

使用本地時間傳回 Date 物件中的毫秒值。

dateObj.getMilliseconds()

所引用的dateObj是一個Date物件。

附註

若要取得以全球標準時間 (UTC) 計算的毫秒數，請使用 getUTCMilliseconds 方法。

傳回的毫秒值可以介於 0 到 999 之間。

範例

下面的範例說明 getMilliseconds 方法的用法。

function TimeDemo(){
   var d, s = "The current local time is: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getUTCMilliseconds 方法 | setMilliseconds 方法 | setUTCMilliseconds 方法

適用於：Date 物件


getMinutes 方法

使用本地時間傳回 Date 物件中的分鐘值。

dateObj.getMinutes()

所引用的dateObj是一個Date物件。

附註

若要取得以全球標準時間 (UTC) 計算的分鐘值，請使用 getUTCMinutes 方法。

getMinutes 方法會傳回一個介於 0 到 59 之間的整數，等於是儲存在 Date 物件中的分鐘值。有兩種情況會傳回 0：一個是發生在每一小時後一分鐘的時間內，另一個則發生在建立 Date 物件時物件內未儲存時間時。只有同時檢查小時和秒數值是不是 0，才能確定是哪一種情況。如果都是 0 的話，就幾乎可以確定是 Date 物件內未儲存時間。

範例

下面的範例說明 getMinutes 方法的用法。

function TimeDemo(){
   var d, s = "The current local time is: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getUTCMinutes 方法 | setMinutes 方法 | setUTCMinutes 方法

適用於：Date 物件


getMonth 方法

使用本地時間傳回 Date 物件中的月份值。

dateObj.getMonth()

所引用的dateObjr是一個Date物件。

附註

若要取得使用全球標準時間 (UTC) 的月份值，請使用 getUTCMonth 方法。

getMonth 方法會傳回一個介於 0 到 11 之間的整數，代表 Date 物件中的月份值。傳回的整數並不是傳統用來指示月份的數字，而是少一的數字。如果 Date 物件中儲存 Jan 5, 1996 08:47:00 的話，getMonth 會傳回 0。

範例

下面的範例說明 getMonth 方法的用法。

function DateDemo(){
   var d, s = "Today's date is: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getYear();
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法 | getUTCMonth 方法 | setMonth 方法 | setUTCMonth 方法

適用於：Date 物件


getSeconds 方法

使用本地時間傳回 Date 物件中的秒數值。

dateObj.getSeconds()

所引用的dateObj是一個Date物件。

附註

若要取得使用全球標準時間 (UTC) 的秒數值，請使用 getUTCSeconds 方法。

getSeconds 方法會傳回一個介於 0 到 59 之間的整數，表示所指 Date 物件的秒數值。有兩種情況會傳回 0：一個情況是秒數不足一秒，另一個則是在建立 Date 物件時物件內未儲存時間的情況下。只有同時檢查小時和分鐘數是不是 0，才能確定是哪一種情況。如果都是 0 的話，就幾乎可以確定是 Date 物件內未儲存時間。

範例

下面的範例說明 getSeconds 方法的用法。

function TimeDemo(){
   var d, s = "The current local time is: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法 | getUTCSeconds 方法 | setSeconds 方法 | setUTCSeconds 方法

適用於：Date 物件


getTime 方法

傳回 Date 物件中的時間值。

dateObj.getTime()

所引用的 dateObj 是一個Date物件。

附註

getTime 方法會傳回一個整數值，代表從 1970 年 1 月 1 日午夜 12 點到 Date 物件的時間值之間的毫秒數。日期值大約可以涵蓋 1970 年 1 月 1 日午夜 12 點前後各約 285,616 年的時間。負數表示在 1970 年之前。

在計算多個日期和時間時，通常會將變數定義成等於日、時分中的毫秒數，這樣做相當有用。例如：

var MinMilli = 1000 * 60
var HrMilli = MinMilli * 60
var DyMilli = HrMilli * 24

範例

下面的範例說明 getTime 方法的用法。

function GetTimeTest(){
   var d, s, t;
   var MinMilli = 1000 * 60;
   var HrMilli = MinMilli * 60;
   var DyMilli = HrMilli * 24;
   d = new Date();
   t = d.getTime();
   s = "It's been "
   s += Math.round(t / DyMilli) + " days since 1/1/70";
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法 | setTime 方法

適用於：Date 物件


getTimezoneOffset 方法

傳回主機時間與全球標準時間 (UTC) 之間的分鐘差。

dateObj.getTimezoneOffset()

所引用的 dateObj 是一個 Date 物件。

附註

getTimezoneOffset 方法會傳回一個整數值，代表目前的電腦時間與 UTC 之間相差幾分鐘。這些值適用於執行 Script 的電腦。所以如果是從伺服器 Script 呼叫這個方法，傳回值會適用於伺服器。如果是從客戶端 Script 呼叫的話，則傳回值會適用於客戶端。

如果您的時間在 UTC 之後 (如太平洋日光節約時間) 的話，這會是個正數；如果您的時間在 UTC 之前 (如日本) 的話，則會是負數。

舉例來說，有一個洛杉磯的客戶端在十二月一日要連接位在紐約市的伺服器，這時如果是在客戶端執行 getTimezoneOffset 就會傳回 480，但若是在伺服器上執行，則會傳回 300。

範例

下面的範例說明 getTimezoneOffset 方法的用法。

function TZDemo(){
   var d, tz, s = "The current local time is ";
   d = new Date();
   tz = d.getTimezoneOffset();
   if (tz < 0)
      s += tz / 60 + " hours before GMT";
   else if (tz == 0)
      s += "GMT";
   else
      s += tz / 60 + " hours after GMT";
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法

適用於：Date 物件


getUTCDate 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的日期。

objDate.getUTCDate()

所引用的 dateObj 是一個Date物件。

附註

若要取得使用本地時間的日期，請使用 getDate 方法。

傳回值是一個介於 1 到 31 之間的整數，代表 Date 物件中的日期值。

範例

下面的範例說明 getUTCDate 方法的用法。

function UTCDateDemo(){
   var d, s = "Today's UTC date is: ";
   d = new Date();
   s += (d.getUTCMonth() + 1) + "/";
   s += d.getUTCDate() + "/";
   s += d.getUTCFullYear();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getDate 方法 | setDate 方法 | setUTCDate 方法

適用於: Date 物件


getUTCDay 方法

使用全球標準時間 (UTC) 傳回 Date 物件中星期的日期值。

dateObj.getUTCDay()

所引用的 dateObj 是一個Date物件。

附註

若要取得使用本地時間的星期日期值，請使用 getDate 方法。

getUTCDay 方法所傳回的值是一個介於 0 到 6 之間的整數，代表星期的日期值星期幾，而對應星期的日期值方式如下：

值 | 日期
0 | 星期日
1 | 星期一
2 | 星期二
3 | 星期三
4 | 星期四
5 | 星期五
6 | 星期六

範例

下面的範例說明 getUTCDay 方法的用法。

function DateDemo(){
   var d, day, x, s = "Today is ";
   var x = new Array("Sunday", "Monday", "Tuesday");
   x = x.concat("Wednesday","Thursday", "Friday");
   x = x.concat("Saturday");
   d = new Date();
   day = d.getUTCDay();
   return(s += x[day]);
}

基本條件

版本 3

請參閱

Date 物件方法 | getDay 方法

適用於： Date 物件


getUTCFullYear 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的年份值。

dateObj.getUTCFullYear()

所引用的dateObj是一個Date物件。

附註

若要取得使用本地時間的年份，請使用 getFullYear 方法。

getUTCFullYear 方法會傳回年份的絕對值，以避免了經典的公元兩千年的問題，例如日期為2000年1月1日和1900年1月1日混淆不清的問題。

範例

下面的範例說明 getUTCFullYear 方法的用法。

function UTCDateDemo(){
   var d, s = "Today's UTC date is: ";
   d = new Date();
   s += (d.getUTCMonth() + 1) + "/";
   s += d.getUTCDate() + "/";
   s += d.getUTCFullYear();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getFullYear 方法 | setFullYear 方法 | setUTCFullYear 方法

適用於：Date 物件


getUTCHours 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的小時值。

dateObj.getUTCHours()

所引用的 dateObj 是一個Date物件。

附註

若要使用本地時間取得午夜之後經過的小時數，請使用 getHours 方法。

getUTCHours 方法會傳回一個介於 0 到 23 之間的整數，代表從午夜開始的小時數。有兩種情況會出現 0：在 1:00:00 A.M. 之前的時間，或在建立 Date 物件時物件內未儲存時間。只有同時檢查分鐘和秒數是不是 0，才能確定是哪一種情況。如果都是 0 的話，就幾乎可以確定是 Date 物件內未儲存時間。

範例

下面的範例說明 getUTCHours 方法的用法。

function UTCTimeDemo(){
   var d, s = "Current Universal Coordinated Time (UTC) is: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getHours 方法 | setHours 方法 | setUTCHours 方法

適用於：Date 物件


getUTCMilliseconds 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的毫秒值。

dateObj.getUTCMilliseconds()

所引用的 dateObj 是一個Date物件。

附註

若要取得以本地時間計算的毫秒數，請使用 getMilliseconds 方法。

傳回的毫秒值可以介於 0 到 999 之間。

範例

下面的範例說明 getUTCMilliseconds 方法的用法。

function UTCTimeDemo(){
   var d, s = "Current Universal Coordinated Time (UTC) is: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getMilliseconds 方法 | setMilliseconds 方法 | setUTCMilliseconds 方法

適用於：Date 物件


getUTCMinutes 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的分鐘值。

dateObj.getUTCMinutes()

所引用的dateObj是一個Date物件。

附註

若要取得使用本地時間儲存的分鐘數，請使用 getMinutes 方法。

getUTCMinutes 方法會傳回一個介於 0 到 59 之間的整數，等於是儲存在 Date 物件中的分鐘數。有兩種情況會傳回 0：查詢的時間剛好在整點後一分鐘內，以及在建立 Date 物件時物件內未儲存時間時。只有同時檢查小時和秒數的值是不是 0，才能確定是哪一種情況。如果都是 0 的話，就幾乎可以確定是 Date 物件內未儲存時間。

範例

下面的範例說明 getUTCMinutes 方法的用法。

function UTCTimeDemo()
{
   var d, s = "Current Universal Coordinated Time (UTC) is: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getMinutes 方法 | setMinutes 方法 | setUTCMinutes 方法

適用於：Date 物件


getUTCMonth 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的月份值。

dateObj.getUTCMonth()

所引用的 dateObj 是一個Date物件。

附註

若要取得以本地時間計算的月份，請使用 getMonth 方法。

getUTCMonth 方法會傳回一個介於 0 到 11 之間的值，代表 Date 物件中的月份值。傳回的整數並非人們慣用來指示月份的數字，而是比實際月份少一的數字。如果 Date 物件中儲存 Jan 5, 1996 08:47:00.0 的話，getUTCMonth 會傳回 0。

範例

下面的範例說明 getUTCMonth 方法的用法。

function UTCDateDemo(){
   var d, s = "Today's UTC date is: ";
   d = new Date();
   s += (d.getUTCMonth() + 1) + "/";
   s += d.getUTCDate() + "/";
   s += d.getUTCFullYear();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getMonth 方法 | setMonth 方法 | setUTCMonth 方法

適用於：Date 物件


getUTCSeconds 方法

使用全球標準時間 (UTC) 傳回 Date 物件中的秒數值。

dateObj.getUTCSeconds()

所引用的 dateObj 是一個Date物件。

附註

若要取得以本地時間計算的秒數，請使用 getSeconds 方法。

getUTCSeconds 方法會傳回一個介於 0 到 59 之間的整數，表示所指 Date 物件的秒數值。有兩種情況會出現 0：還差一秒才會到目前的分鐘數，以及在建立 Date 物件時物件內未儲存時間時。只有同時檢查小時和分鐘數是不是 0，才能確定是哪一種情況。如果都是 0 的話，就幾乎可以確定是 Date 物件內未儲存時間。

範例

下面的範例說明 getUTCSeconds 方法的用法。

function UTCTimeDemo(){
   var d, s = "Current Universal Coordinated Time (UTC) is: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

基本條件

版本 3

請參閱

Date 物件方法 | getSeconds 方法 | setSeconds 方法 | setUTCSeconds 方法

適用於：Date 物件


getVarDate 方法

傳回 Date 物件中的 VT_DATE 值。

dateObj.getVarDate()

所引用的dateobj 是一個Date 物件。

附註

getVarDate 方法是在與ActiveX® 物件或其他以 VT_DATE 格式接受並傳回日期值的物件互動時使用，如Visual Basic和 VBScript，實際上的格式是依附在原來的設定上，而且不應該回應在Jscript裡。

基本條件

版本 3

請參閱

getDate 方法 | parse 方法

適用於：Date 物件


getYear 方法

傳回 Date 物件中的年份值。

dateObj.getYear()

所引用的 dateObj 是一個Date物件。

附註

這個方法已不再使用，提供的目的只是為了與舊版相容。請改用 getFullYear 方法。

對於 1900 到 1999 的年份，它會以 2 位整數傳回儲存年份與 1900 年之間的差。至於其他超出上述的日期，則會傳回 4 位數。例如 1996 年會傳回 96，而 1825 和 2025 則會照原狀傳回。

備註 對於 JScript 1.0 版而言，getYear方法會傳回一值，該數值是由Date 物件所提供的年份數值再從1900年所減掉的差值結果，而且不管該年的數值應當為何。例如，假如1899會傳回 -1 ，則 2000 就應該傳回 100 的數值。

範例

下面的範例說明 getYear 方法的用法：

function DateDemo(){
   var d, s = "Today's date is: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getYear();
   return(s);
}

基本條件

版本 1

請參閱

Date 物件方法 | getFullYear 方法 | getUTCFullYear 方法 | setFullYear 方法 | setUTCFullYear 方法 | setYear 方法

適用於：Date 物件


indexOf 方法

傳回在 String 物件中子字串第一次出現的字元位置。

strObj.indexOf(subString[, startIndex])

引數

strObj
必要項。一個 String 物件或常數。
subString
必要項。在String物件內搜尋的子字串。
startIndex
選擇項。由一個正整數指出索引來開始在String物件內進行搜尋 。如果缺少這個索引，會由字串之首開始搜尋。

附註

indexOf 方法會傳回一個整數值，以指出在 String 物件內子字串的起始位置。若找不到子字串，會傳回 -1。

若 startindex 是負值，會將 startindex 視為 0，如果大於最大的字元位置索引，則會將它視為最大的索引。

搜尋操作會由左而右執行，除此之外，這個方法與 lastIndexOf 完全相同。

範例

下面的範例說明 indexOf 方法的用法。

function IndexDemo(str2){
   var str1 = "BABEBIBOBUBABEBIBOBU"
   var s = str1.indexOf(str2);
   return(s);
}

基本條件

版本 1

請參閱

lastIndexOf 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


isFinite 方法

傳回一個布林值，以指出提供的數字是否為有限的。

isFinite(number)

所需的number引數是任何的數值。

附註

如果 number 是任何非 NaN、負無限大或正無限大的值，則 isFinite 方法會傳回 true。否則在這三種情況下會傳回 false。

基本條件

版本 3

請參閱

isNaN 方法

適用於：Global 物件


isNaN 方法

傳回一個布林值，以指出該值是否為保留值 NaN (不是一個數字)。

isNaN(numValue)

所需的numValue是對NAN.測試的數值。

附註

如果值為 NaN，則 isNaN 函數會傳回 true，否則會傳回 false。通常您會使用此函數來測試 parseInt 和 parseFloat 方法的傳回值。

另外，變數可以與其本身比較。如果比較結果不相等，則它會是 NaN。原因是 NaN 是唯一與其本身不相等的值。

基本條件

版本 1

請參閱

isFinite 方法 | NaN 屬性 (Global) | parseFloat 方法 | parseInt 方法

適用於：Global 物件


italics 方法

將 String 物件中的文字加上 HTML <I> 標記。

strVariable.italics( )
"String Literal".italics( )

附註

下面的範例說明 italics 方法的用法：

var strVariable = "This is a string";
strVariable = strVariable.italics( );

執行最後一個陳述式之後的 strVariable 值是：

<I>This is a string</I>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

bold 方法 | String 物件方法 | String 物件屬性

適用於: String 物件


item 方法

傳回集合物件中目前的項目。

enumObj.item()

所需的enumObj 引數是任何的 Enumerator 物件。

附註

item 方法會傳回目前的項目。如果集合物件是空的，或目前的項目尚未定義的話，將會傳回undefined。

範例

在下面的程式碼中，使用 item 方法傳回 Drives 集合物件的一個成員：

function ShowDriveList(){
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=  n + "<br>";
   }
   return(s);
}

基本條件

版本 3

請參閱

atEnd 方法 | moveFirst 方法 | moveNext 方法

適用於：Enumerator 物件


join 物件

JScript

join 方法

傳回一個字串值，它是由陣列中的所有元素串連在一起所組成，並且用特定的分隔字元來分隔。

arrayObj.join(separator)

引數

arrayObj
必要項。任何Array 物件。
separator
必要項。 在結果 String 物件中用來分隔陣列裡每一個元件的String 物件。一旦缺少，陣列元件會用一個 逗號來分隔。

附註

如果有任何陣列的元件是未定義或是錯誤的，將會被視為是一個空白字串。

範例

下面的範例說明 join 方法的用法︰

function JoinDemo(){
   var a, b;
   a = new Array(0,1,2,3,4);
   b = a.join("-");
   return(b);
}

基本條件

版本 2

請參閱

Array 物件方法 | String 物件

適用於：Array 物件


lastIndexOf 方法

傳回在 String 物件中子字串最後一次出現的字元位置。

strObj.lastIndexOf(substring[, startindex])

引數

strObj
必要項。一個 String 物件或常數。
substring
必要項。 要在 String 物件中搜尋的子字串。
startindex
選擇項。由一個正整數的值指定索引在String 物件中開始搜尋。如果缺少這個值，則會從字串的最後開始搜尋。

附註

lastIndexOf 方法會傳回一個整數值，以指出在 String 物件內子字串的起始位置。如果找不到子字串，會傳回 -1。

若 startindex 是負值，會將 startindex 視為 0，如果大於最大的字元位置索引，則會將它視為最大的索引。

搜尋操作會由右而左執行，除此之外，這個方法與 indexOf 完全相同。

下面的範例說明 lastIndexOf 方法的用法。

function lastIndexDemo(str2)
{
   var str1 = "BABEBIBOBUBABEBIBOBU"
   var s = str1.lastIndexOf(str2);
   return(s);
}

基本條件

版本 1

請參閱

indexOf 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


lbound 方法

傳回指定的 VBArray 維度中所使用的最小索引值。

safeArray.lbound(dimension)

引數

safeArray
必要項。這是一個 VBArray 物件。
dimension
選擇項。這是需要索引下限的 VBArray 維度，若予以省略，lbound 的行為如同傳遞 1。

附註

如果 VBArray 是空的，lbound 方法會傳回 undefined。若 dimension 大於 VBArray 中的維度個數或為一負值，則此方法會產生「陣列索引超出範圍」錯誤。

範例

下面的範例包含三個部分。第一個部分是建立 Visual Basic 安全陣列的 VBScript 程式碼。第二個部分是決定安全陣列中的維度個數和每個維度下限的 JScript 程式碼。由於安全陣列是以 VBScript 而非 Visual Basic 建立的，因此下限一律為 0。上述兩個部分構成 HTML 網頁的 <HEAD> 區段。第三個部分則是在 <BODY> 區段執行其他兩個部分的 JScript 程式碼。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         k = k + 1
      Next
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vba){
   var i, s;
   var a = new VBArray(vba);
   for (i = 1; i <= a.dimensions(); i++)
   {
      s = "The lower bound of dimension ";
      s += i + " is ";
      s += a.lbound(i)+ ".<BR>";
      return(s);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT language="jscript">
   document.write(VBArrayTest(CreateVBArray()));
</SCRIPT>
</BODY>

基本條件

版本 3

請參閱

dimensions 方法 | getItem 方法 | toArray 方法 | ubound 方法

適用於：VBArray 物件


link 方法

將 String 物件中的文字加上內含 HREF 特性的 HTML 錨定點 (anchor) 標記。

strVariable.link(linkstring)
"String Literal".link(linkstring)

linkstring 引數是要放在 HTML 錨定點之 HREF 特性中的文字。

附註

呼叫 link 方法可在 String 物件外建立一個超連結。下面的範例說明此方法如何完成該任務：

var strVariable = "This is a hyperlink";
strVariable = strVariable.link("http://www.microsoft.com");

執行最後一個陳述式之後的 strVariable 值是：

<A HREF="http://www.microsoft.com">This is a hyperlink</A>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

anchor 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


localeCompare 方法

傳回數值，指示兩個字串在目前國別設定中是否相等。

stringVar.localeCompare(stringExp)

引數

stringVar
必要項。String 物件或常值。
stringExp
必要項。要與 stringVar 比較的字串。

附註

localeCompare 會為 stringVar 跟 stringExp 執行因國別設定而異的字串比較，並依系統預設國別設定的排序次序傳回 -1、0 或 +1。

如果 stringVar 的排序次序在 stringExp 之前，localeCompare 傳回 –1；如果 stringVar 的排序次序在 stringExp 之後，localeCompare 傳回 +1。傳回零則表示兩個字串相等。

基本條件

版本 5.5

請參閱

toLocalString

適用於：String 物件


log 方法

傳回一個數字的自然對數。

Math.log(number)

所需的number 引數是一個求取自然對數的數值運算式。

傳回值

傳回值為 number 的自然對數。底數為 e。

基本條件

版本 1

請參閱

Math 物件方法

適用於：Math 物件


match 方法

使用一個通用運算式模式執行字串搜尋，並且以陣列傳回使用通用運算式物件進行字串搜尋的結果。

stringObj.match(rgExp)

引數

stringObj
必要項。可執行搜尋的String 物件或字串常值。
rgExp
必要項。包含通用運算式模式與適用旗標的通用運算式物件。也可以是包含通用運算式模式與適用旗標的字串常值的變數名稱。

附註

如果match方法無法找到相符的項目，將會傳回null。如果找到了，match 會傳回一個陣列，而全域RegExp 物件的屬性將會更新來反映相符項目的結果。

match 方法傳回的陣列有三個屬性，input，index 和 lastIndex。input屬性包含整個搜尋的字串。index屬性包含了在整個搜尋字串中相符子字串的位置。lastIndex屬性包含最後一個符合項目的最後一個字元以後的位置。

如果全域旗標 (g) 並未設定， match 方法會傳回一個陣列。陣列中的元素 0 包含前次比對相符的字元。0元素 1 – n 則包含主項目中任何相符的子項目。這種方式跟沒有設定全文旗標的exec 方法一樣。如果全文旗標已經設定，元素0 - n 則包含所有曾經發生的相符項目。

範例

下面的範例說明 match 方法的用法。

function MatchDemo(){
   var r, re;         //宣告變數。
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/i;    //建立通用運算式的模式。
   r = s.match(re);   //想要符合搜尋字串。
   return(r);         //傳回第一個"ain"的出現。
}

下列範例說明設定全域旗標(g) 的match方法。

function MatchDemo(){
   var r, re;         //宣告變數。
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/ig;      //建立通用運算式的模式。
   r = s.match(re);   //想要符合搜尋字串。
   return(r);         //傳回包含以上四項的陣列。
                      // 出現 "ain"。
}

下列程式碼說明用match 方法來搜尋一個字串常值的使用。

var r, re = "Spain";
r = "The rain in Spain".replace(re, "Canada");

基本條件

版本 3

請參閱

exec 方法 | RegExp 物件 | replace 方法 | search 方法 | String 物件方法 | test 方法

適用於：String 物件


max 方法

傳回零個或更多指定數值運算式中較大的那一個。

Math.max([number1[, number2[. . . [, numberN]]]])

可選擇的number1, number2, . . ., numberN 引數是待評估的數值運算式。

附註

如果沒有提供引數，傳回值等於NEGATIVE_INFINITY。如果任何引數是NaN， 則傳回值也是 NaN。

基本條件

版本 1

請參閱

Math 物件方法 | min 方法 | NEGATIVE_INFINITY 屬性

適用於：Math 物件


min 方法

傳回零個或更多指定數值運算式中較小的那一個。

Math.min([number1[, number2[. . . [,numberN]]]])

可選擇的number1, number2, . . ., numberN 引數是待評估的數值運算式。

附註

如果沒有提供引數，傳回的值等於POSITIVE_INFINITY。如果任何引數是NaN，則傳回的值也是 NaN。

基本條件

版本 1

請參閱

Math 物件方法 | max 方法 | POSITIVE_INFINITY 屬性

適用於：Math 物件


moveFirst 方法

將集合物件中目前的項目重設為第一個項目。

enumObj.moveFirst( )

所需的enumObj 引數是任何的Enumerator 物件。

附註

如果集合物件中沒有任何項目的話，目前的項目會設成 undefined。

範例

在下面的範例中，使用 moveFirst 方法從清單開始處評估 Drives 集合物件的成員：

function ShowFirstAvailableDrive(){
   var fso, s, e, x;                //宣告變數。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);  //建立Enumerator物件。
   e.moveFirst();                   //移到第一個磁碟槽。
   s = "";                          //開啟s。
   do
   {
      x = e.item();                 //測試磁碟槽是否存在。
      if (x.IsReady)                //查看是否已就緒。
      {
         s = x.DriveLetter + ":";   //指定 1st 磁碟機到s。
         break;
      }
      else
         if (e.atEnd())             //查看是否在集合物件的最後。
         {
            s = "No drives are available";
            break;
         }
      e.moveNext();                 //移到下一個磁碟機。
   }
   while (!e.atEnd());              //不要在集合物件的最後執行。
   return(s);                       //傳回可用的磁碟機。
}

基本條件

版本 3

請參閱

atEnd 方法 | item 方法 | moveNext 方法

適用於：Enumerator 物件


moveNext 方法

將目前的項目移到集合物件中的下一個項目。

enumObj.moveNext( )

所需的enumObj 引用是任何的 Enumerator 物件。

附註

如果列舉運算子 (enumerator) 位於集合物件的結尾處或集合物件是空的，目前的項目就會設成 undefined。

在下面的範例中，使用 moveNext 方法來移到 Drives 集合物件中的下一個磁碟機：

function ShowDriveList(){
   var fso, s, n, e, x;                 //宣告變數。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);      //建立Enumerator物件。
   s = "";                              //開啟s。
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;            //新增磁碟槽。
      s += " - ";                       //新增 "-" 字元。
      if (x.DriveType == 3)
         n = x.ShareName;               //新增資源分享名稱。
      else if (x.IsReady)
         n = x.VolumeName;              //新增卷冊名稱。
      else
         n = "[Drive not ready]";       //指出磁碟尚未準備好。
      s +=   n + "\n";
   }
   return(s);                           //傳回磁碟準備狀況。
}

基本條件

版本 3

請參閱

atEnd 方法 | item 方法 | moveFirst 方法

適用於：Enumerator 物件


parse 方法

剖析一個包含日期的字串，並傳回該日期與 1970 年 1 月 1 日午夜 12 點之間的毫秒數。

Date.parse(dateVal)

dateVal 引數可以是包含日期的字串 (格式如 Jan 5, 1996 08:47:00)，也可以是 ActiveX® 物件或其他物件中擷取出來的 VT_DATE 值。

附註

parse 方法傳回一個代表1970 年 1 月 1 日午夜與指定的 dateVal 日期之間毫秒差距的正整數。

parse 方法是Date物件的靜態方法，正因為如此，它並非被叫用來建立一個Date物件，從以下範例可看出它被叫用的方式。

var datestring = "November 1, 1997 10:15 AM";
Date.parse(datestring)

下面的規則會決定 parse 方法可以成功剖析哪些格式：

  • 短式日期可以使用「/」或「-」日期分隔符號，但必須依照「月 / 日 / 年」的格式，如 7/20/96。
  • 完整日期 (如 July 10 1995) 則可以採用任何順序的年、月、日，而且不管是 2 位數或 4 位數的年份都可以。如果您使用 2 位數的形式，那麼年份必須大於或等於 70。
  • 括在括弧裏的任何文字都會當成程式註解。這些括弧可以呈巢狀。
  • 逗號和空白都會被當成分隔符號。您可以使用多個分隔符號。
  • 月份和星期名稱必須有兩個或兩個以上的字元。兩個字元的名稱如果不是唯一的，將會採取最後一個符合的名稱。如「Ju」會採取 July 而不是 June。
  • 如果指定的星期值與提供日期的剩餘部分不符，則星期值會被忽略。舉例來說，雖然「Tuesday November 9 1996」其實應該是星期五，但還是可以接受這個日期並進行剖析。所得到的 Date 物件會包含「Friday November 9 1996」。
  • JScript 能夠處理所有的標準時區，以及全球標準時間 (UTC) 和格林威治標準時間 (GMT)。
  • 時、分、秒以冒號 (:) 分隔，不過並不需要全部指定。"10:"、"10:11" 和 "10:11:12" 都有效。
  • 如果使用 24 小時制的話，為中午 12 點以後的時間指定 PM 是錯誤的。例如 23:15 PM 就是一個錯誤。
  • 包含無效日期的字串是錯誤的。例如包含兩個年份或兩個月份的字串就是錯誤的。

範例

下面的範例說明 parse 方法的用法：

提供一個有日期的函數，這個函數會傳回這個日期與1/1/1970之間的差異：

function GetTimeTest(testdate){
   var s, t;                    //宣告變數。
   var MinMilli = 1000 * 60;       //開啟變數。
   var HrMilli = MinMilli * 60;
   var DyMilli = HrMilli * 24;
   t = Date.parse(testdate);       //Parse 測試日期。
   s = "There are "                //建立傳回的字串。
   s += Math.round(Math.abs(t / DyMilli)) + " days "
   s += "between " + testdate + " and 1/1/70";
   return(s);                      //傳回結果。
}

基本條件

版本 3

請參閱

Date 物件方法

適用於：Date 物件


parseFloat 方法

傳回一個從字串轉換而來的浮點數。

parseFloat(numString)

所需的numString 引數為一個包含浮點數的字串。

附註

parseFloat 方法會傳回一個與包含在 numString 中的數字相等的數值。如果沒有任何的 numString 字首可成功地剖析為浮點數，則會傳回 NaN (不是一個數字)。

parseFloat("abc")    // 傳回 NaN。
parseFloat("1.2abc") // 傳回 1.2。

您可以使用 isNaN 方法來測試 NaN 。

基本條件

版本 1

請參閱

isNaN 方法 | parseInt 方法 | String 物件

適用於：Global 物件


parseInt 方法

傳回一個從字串轉換而來的整數。

parseInt(numString, [radix])

引數

numstring
必要項。轉換為數字的字串。
radix
選擇項。介於 2 和 36 之間的值，用來指出包含在 numString 中的數字底數。如果未提供，則字首為 0x 的字串會視為十六進位的數字，而字首為 0 的字串則會視為八進位的數字。其他所有的字串則會視為十進位的數字。

附註

parseInt 方法會傳回一個與包含在 numString 中的數字相等的整數值。如果沒有任何 numString 的字首可成功地剖析為整數，則會傳回 NaN (不是一個數字)。

parseInt("abc")    // 傳回 NaN。
parseInt("12abc")  // 傳回 12.

您可以使用 isNaN 方法來測試 NaN。

基本條件

版本 1

請參閱

isNaN 方法 | parseFloat 方法 | String 物件 | valueOf 方法

適用於：Global 物件


pop 方法

移除陣列的最後一個元素，並將它傳回。

arrayObj.pop( )

必要的 arrayObj 引用是 Array 物件。

附註

如果陣列是空的，即傳回 undefined。

基本條件

版本 5.5

請參閱

push 方法

適用於：Array 物件


pow 方法

傳回一基底運算式經過指定次方運算後的結果。

Math.pow(base, exponent)

引數

base
必要項。運算式的底數值。
exponent
必要項。運算式的指數值。

範例

在下面的範例中的數值運算式 (相當於baseexponent) 會傳回 1000。

Math.pow(10,3);

基本條件

版本 1

請參閱

Math 物件方法

適用於：Math 物件


push 方法

附加新元素到陣列中，並傳回陣列的新長度。

arrayObj.push([item1 [item2 [. . . [itemN ]]]])

引數

arrayObj
必要項。Array 物件。
item, item2,. . ., itemN
選擇項。Array 的新元素。

附註

push 方法會將元素依出現的順序附加上去。如果其中一個引數是陣列，會將它當成一個元素加上去。若要聯結兩個以上陣列的元素，可使用 concat 方法。

基本條件

版本 5.5

請參閱

concat 方法 | pop 方法

適用於：Array 物件


random 方法

傳回一個介於 0 到 1 之間的虛擬亂數。

Math.random( )

附註

產生的虛擬亂數介於 0 到 1 之間 (包括0但不包括1)。也就是說，傳回的數字可以是0，但是一律小於1。當第一次載入 JScript 時，就會自動啟動亂數產生器。

基本條件

版本 1

請參閱

Math 物件方法

適用於：Math 物件


replace 方法

傳回以通用運算式或搜尋字串取代文字後的字串。

stringObj.replace(rgExp, replaceText)

引數

stringObj
必要項。要進行取代的 String 物件或字串常值。此字串不會被 replace 方法修改。
rgExp
必要項。描述要搜尋之內容的通用運算式物件。其內容包含了通用運算式的結構與適用的旗標。可以是一個 String 物件或常值。如果 rgExp 的內容不是通用運算式物件，它會轉成一個字串，然後展開確實的搜尋。如果是字串，則不會轉成通用運算式 。
replaceText
必要項。這是一個 String 物件或字串常值，包含要用來取代在 stringObj 中與 rgExp 比對成功的每個項目之文字。在JScript 5.5 或之後的更新版本中，replaceText 引數也可以是一個傳回取代內容的函數。

附註

replace 方法執行的結果是一個已完成所有取代動作的 stringObj。

任何下列的比對變數可以用來在來源地指出最近的相符項目及字串。比對變數可以用在取代內容中，內容中的取代字串是動態的。

字元 | 涵義
$$ | $ (JScript 5.5 或稍後的版本)
$& | 指出和整個模式相符合的stringObj 部位。 (JScript 5.5或稍後的版本)
$` | 指出與$&. (JScript 5.5或稍後的版本)描述之前的項目相符的stringObj 部位。
$' | 指出與$&. (JScript 5.5或稍後的版本)描述之後的項目相符的stringObj 部位。
$n | nth 捕捉符合的子項目。 n是任何一個從1到9的數字。(JScript 5.5或稍後的版本)
$nn | nnth 捕捉符合的子項目。nn 是一個從01 到99的二進位數。 (JScript 5.5或稍後的版本)

如果 replaceText 是一個函數，以下m + 3 引數會用來呼叫每一個相符的子字串的函數。m 是rgExp 中在左側括弧中捕捉到的數字。第一個引數是相符的子字串。接下來的m 引數是在搜尋中捕捉到的。引數 m + 2 i是發生在stringObj 中比對發生的位移，引數 m + 3是 stringObj。 結果中的字串值是取代每一個相符子字串的函數呼叫傳回的值。

replace 方法更新全域RegExp 物件的屬性。

範例

下面的範例說明如何用 replace 方法用"A"取代"The" 。

function ReplaceDemo(){
   var r, re;                    //宣告變數。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = /The/g;             //建立通用運算式模式。
   r = ss.replace(re, "A");    //用"The"取代"A"。
   return(r);                   //傳回取代的字串。
}

此外，replace 方法也可取代模式中的子運算式。下面的範例會置換字串中的每一對文字。

function ReplaceDemo(){
   var r, re;                      //宣告變數。
   var ss = "The rain in Spain falls mainly in the plain.";
   re = /(\S+)(\s+)(\S+)/g;        //建立通用運算式模式。
   r = ss.replace(re, "$3$2$1");   //交換每組字。
   return(r);                      //傳回字串的結果。
}

以下將華氏溫度計轉換成攝氏溫度計的範例說明了將函數視為replaceText，可以在JScript 5.5 和其後的版本中見到。想知道這項功能如何運作，立即用"F" (e.g., "Water boils at 212�)輸入一個後面有數字的字串。

function f2c(s) {
  var test = /(\d+(\.\d*)?)F\b/g;    //開啟模式。
  return(s.replace
    (test,
      function($0,$1,$2) {
        return((($1-32) * 5/9) + "C");
      }
    )
  );
}
document.write(f2c("Water freezes at 32F and boils at 212F."));

基本條件

版本 1

請參閱

exec 方法 | match 方法 | RegExp 物件 | search 方法 | String 物件方法 | test 方法

適用於：String 物件


reverse 方法

傳回一個元件反轉的 Array 物件。

arrayObj.reverse( )

所需的arrayObj 引數是一個Array 物件。

附註

reverse 方法會使 Array 物件中的元素反轉。在執行時並不會建立新的 Array 物件。

如果此陣列不是連續的，那麼 reverse 方法就會在陣列中建立元素，以填補陣列中的間隙。這些新建立的元素值都是 undefined。

範例

下面的範例說明 reverse 方法的用法。

function ReverseDemo(){
   var a, l;                  //宣告變數。
   a = new Array(0,1,2,3,4);  //建立一個陣列並填滿它。
   l = a.reverse();           //反轉陣列的內容。
   return(l);                 //傳回結果的陣列。
}

基本條件

版本 2

請參閱

Array 物件方法

適用於：Array 物件


round 方法

將指定之數值運算式進位至最接近整數的值傳回。

Math.round(number)

所需的number 引數為將要進位到最接近整數的值。

附註

如果 number 的小數點部分是 0.5 或大於 0.5，則傳回值為大於 number 的最小整數。否則，round 會傳回小於或等於 number 的最大整數。

基本條件

版本 1

請參閱

Math 物件方法

適用於：Math 物件


search 方法

傳回通用運算式搜尋中第一個符合之子字串的位置。

stringObj.search(rgExp)

引數

stringObj
必要項。要搜尋的 String 物件或字串常值。
rgExp
必要項。一個包含通用運算式模式與可適用旗標的的通用運算式物件。

附註

search 方法會指出是否找到相符的項目。如果找到的話，search 方法會傳回一個整數值，代表比對成功之字串的位移位置，如果沒找到，則傳回 -1。

範例

下面的範例說明 search 方法的用法。

function SearchDemo(){
   var r, re;                   //宣告變數。
   var s = "The rain in Spain falls mainly in the plain.";
   re = /falls/i;            //建立一個通用運算式模式。
   r = s.search(re);            //搜尋字串。
   return(r);                   //傳回布林值的結果。
}

基本條件

版本 3

請參閱

exec 方法 | match 方法 | 通用運算式物件 | 通用運算式語法 | replace 方法 | String 物件方法 | test 方法

適用於：String 物件


setDate 方法

使用本地時間設定 Date 物件的數值日期。

dateObj.setDate(numDate)

引數

dateObj
必要項。任何的 Date 物件。
numDate
必要項。相當於數值日期的數值。

附註

若要使用全球標準時間 (UTC) 設定日期值，請使用 setUTCDate 方法。

如果 numDate 的值大於 Date 物件中所儲存月份的天數，或是負數的話，日期將會設成等於 numDate 減去儲存月份的天數。例如，儲存的日期如果是 January 5, 1996，這時若呼叫 setDate(32)，則日期會變成 February 1, 1996。負數的處理方式很類似。

範例

下面的範例說明 setDate 方法的用法。

function SetDateDemo(newdate){
   var d, s;                  //宣告變數。
   d = new Date();            //建立 date 物件。
   d.setDate(newdate);        //把 date 設定到 newdate。
   s = "Current setting is ";
   s += d.toLocaleString();
   return(s);                 //傳回新設定的日期。
}

基本條件

版本 3

請參閱

Date 物件方法 | getDate 方法 | getUTCDate 方法 | setUTCDate 方法

適用於：Date 物件


setFullYear 方法

使用本地時間設定 Date 物件中的年份值。

dateObj.setFullYear(numYear[, numMonth[, numDate]])

引數

dateObj
必要項。任何 Date 物件。
numYear
必要項。這個數值等於年份。
numMonth
選擇項。這個數值等於月份。如果指定 numDate 的話，也必須指定這一項。
numDate
選擇項。等於日期的數值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果 numMonth 引數是沒有指定的選擇性引數，JScript 就會使用 getMonth 方法所傳回的值。

此外，如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。

若要使用全球標準時間 (UTC) 設定年份，請使用 setUTCFullYear 方法。

date 物件支援的年份範圍大約可以涵蓋 1970 年前後各約 285,616 年。

範例

下面的範例說明 setFullYear 方法的用法：

function SetFullYearDemo(newyear){
   var d, s;                 //宣告變數。
   d = new Date();           //建立Date物件。
   d.setFullYear(newyear);   //建立年份。
   s = "Current setting is ";
   s += d.toLocaleString();
   return(s);                //傳回新的設定日期。
}

基本條件

版本 3

請參閱

Date 物件方法 | getFullYear 方法 | getUTCFullYear 方法 | setUTCFullYear 方法

適用於： Date 物件


setHours 方法

使用本地時間設定 Date 物件中的小時值。

dateObj.setHours(numHours[, numMin[, numSec[, numMilli]]])

引數

dateObj
必要項。任何 Date 物件。
numHours
必要項。等於小時值的數值。
numMin
選擇項。等於分鐘值的數值。如果使用以下任一個引數的話，就必須指定這一項。
numSec
選擇項。等於秒數值的數值。如果使用下面引數的話，就必須指定這一項。
numMilli
選擇項。等於毫秒值的數值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果 numMinutes 引數是沒有指定的選擇性引數，JScript 就會使用 getMinutes 方法所傳回的值。

若要使用全球標準時間 (UTC) 設定小時值，請使用 setUTCHours 方法。

如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，儲存的日期如果是 Jan 5, 1996 00:00:00，這時若呼叫 setHours(30)，則日期會變成 Jan 6, 1996 06:00:00。負數的處理方式很類似。

範例

下面的範例說明 setHours 方法的用法。

function SetHoursDemo(nhr, nmin, nsec){
   var d, s;                     //宣告變數。
   d = new Date();               //建立Date物件。
   d.setHours(nhr, nmin, nsec);  //設定時數，分鐘數，以及秒數。
   s = "Current setting is " + d.toLocaleString()
   return(s);                    //傳回新的日期設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getHours 方法 | getUTCHours 方法 | setUTCHours 方法

適用於：Date 物件


setMilliseconds 方法

使用本地時間設定 Date 物件中的毫秒值。

dateObj.setMilliseconds(numMilli)

引數

dateObj
必要項。任何的Date物件。
numMilli
等於毫秒值的數值。

附註

若要使用全球標準時間 (UTC) 設定毫秒值，請使用 setUTCMilliseconds 方法。

如果 numMilli 的值大於 999 或者是負數的話，儲存的秒數會適量增加 (如果必要的話，還會同時遞增分鐘、小時等等)。

範例

下面的範例說明 setMilliseconds 方法的用法。

function SetMSecDemo(nmsec){
   var d, s;                    //宣告變數。
   var sep = ":";               //開啟分隔字元。
   d = new Date();              //建立Date物件。
   d.setMilliseconds(nmsec);    //設定毫秒。
   s = "Current setting is ";
   s += d.toLocaleString() + sep + d.getMilliseconds();
   return(s);                   //傳回新的日期設定。
}

基本條件

版本 3

請參閱

Date 物件方法| getMilliseconds 方法 | getUTCMilliseconds 方法 | setUTCMilliseconds 方法

適用於：Date 物件


setMinutes 方法

使用本地時間設定 Date 物件中的分鐘值。

dateObj.setMinutes(numMinutes[, numSeconds[, numMilli]])

引數

dateObj
必要項。任何的 Date 物件。
numMinutes
必要項。等於分鐘值的數值。
numSeconds
選擇項。等於秒數值的數值。如果使用 numMilli 引數的話，就必須指定這一項。
numMilli
選擇項。等於毫秒值的數值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果 numSeconds 引數是沒有指定的選擇性引數，JScript 就會使用 getSeconds 方法所傳回的值。

若要使用全球標準時間 (UTC) 設定分鐘值，請使用 setUTCMinutes 方法。

如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，儲存的日期如果是 Jan 5, 1996 00:00:00，這時若呼叫 setMinutes(90)，則日期會變成 Jan 5, 1996 01:30:00。負數的處理方式很類似。

範例

下面的範例說明 setMinutes 方法的用法。

function SetMinutesDemo(nmin, nsec){
   var d, s;                     //宣告變數。
   d = new Date();               //建立Date物件。
   d.setMinutes(nmin, nsec);     //設定分鐘數。
   s = "Current setting is " + d.toLocaleString()
   return(s);                    //傳回新設定。
}

基本條件

版本 1

請參閱

Date 物件方法 | getMinutes 方法 | getUTCMinutes 方法 | setUTCMinutes 方法

適用於：Date 物件


setMonth 方法

使用本地時間設定 Date 物件中的月份值。

dateObj.setMonth(numMonth[, dateVal])

引數

dateObj
必要項。任何Date 物件。
numMonth
必要項。等於月份的數值。
dateVal
選擇項。代表日期的數值。如果未提供的話，將使用呼叫 getDate 方法所得的值。

附註

若要使用全球標準時間 (UTC) 設定月份值，請使用 setUTCMonth 方法。

如果 numMonth 的值大於 11 (一月是月份 0) 或者是負數的話，儲存的年份會跟著做修改。例如，儲存的日期如是 Jan 5, 1996，這時若呼叫 setMonth(14)，則日期會變成 Mar 5, 1997。

範例

下面的範例說明 setMonth 方法的用法。

function SetMonthDemo(newmonth){
   var d, s;               //宣告變數。
   d = new Date();         //建立Date物件。
   d.setMonth(newmonth);   //設定月份。
   s = "Current setting is ";
   s += d.toLocaleString();
   return(s);              //傳回新設定。
}

基本條件

版本 1

請參閱

Date 物件方法 | getMonth 方法 | getUTCMonth 方法 | setUTCMonth 方法

適用於：Date 物件


setSeconds 方法

使用本地時間設定 Date 物件中的秒數值。

dateObj.setSeconds(numSeconds[, numMilli])

引數

dateObj
必要項。任何 Date 物件。
numSeconds
必要項。等於秒數值的數值。
numMilli
選擇項。等於毫秒值的數值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果numMilli 引數是沒有指定的選擇性引數，JScript 就會使用getMillisecond 方法所傳回的值。

若要使用全球標準時間 (UTC) 設定秒數值，請使用 setUTCSeconds 方法。

如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，儲存的日期如果是 Jan 5, 1996 00:00:00，這時若呼叫 setSeconds(150)，則日期會變成 Jan 5, 1996 00:02:30。

範例

下面的範例說明 setSeconds 方法的用法。

function SetSecondsDemo(nsec, nmsec){
   var d, s;                   //宣告變數。
   var sep = ":";
   d = new Date();             //建立Date物件。
   d.setSeconds(nsec, nmsec);  //設定秒數和毫秒數。
   s = "Current setting is ";
   s += d.toLocaleString() + sep + d.getMilliseconds();
   return(s);                  //傳回新設定。
}

基本條件

版本 1

請參閱

Date 物件方法 | getSeconds 方法 | getUTCSeconds 方法 | setUTCSeconds方法

適用於：Date 物件


setTime 方法

設定 Date 物件中的日期和時間值。

dateObj.setTime(milliseconds)

引數

dateObj
必要項。任何的Date物件。
milliseconds
必要項。引數是一個整數值，表示從 1970 年 1 月 1 日午夜 12 點 (GMT) 開始到現在已經過的秒數。

附註

如果 milliseconds 是負的話，表示日期是在 1970 年之前。可用日期的範圍大約在 1970 年前後各約 285,616 年。

以 setTime 方法設定日期和時間將不受時區影響。

範例

下面的範例說明 setTime 方法的用法。

function SetTimeTest(newtime){
   var d, s;                  //宣告變數。
   d = new Date();            //建立Date物件。
   d.setTime(newtime);        //設定時間。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                 //傳回新設定。
}

基本條件

版本 1

請參閱

Date 物件方法 | getTime 方法

適用於：Date 物件


setUTCDate 方法

使用全球標準時間 (UTC) 設定 Date 物件中的數值日期。

dateObj.setUTCDate(numDate)

引數

dateObj
必要項。任何Date物件。
numDate
必要項。相當於數值日期的數值。

附註

若要使用本地時間設定日期，請使用 setDate 方法。

如果 numDate 的值大於 Date 物件中所儲存月份的天數，或者是負數的話，日期將會設成等於 numDate 減去儲存月份的天數。例如，儲存的日期如果是 January 5, 1996，這時若呼叫 setUTCDate(32)，則日期會變成 February 1, 1996。負數的處理方式很類似。

範例

下面的範例說明 setUTCDate 方法的用法。

function SetUTCDateDemo(newdate){
   var d, s;                   //宣告變數。
   d = new Date();             //建立Date物件。
   d.setUTCDate(newdate);      //設定UTC date。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                  //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getDate 方法 | getUTCDate 方法 | setDate 方法

適用於：Date 物件


setUTCFullYear 方法

使用全球標準時間 (UTC) 設定 Date 物件中的年份值。

dateObj.setUTCFullYear(numYear[, numMonth[, numDate]])

引數

dateObj
必要項。任何 Date 物件。
numYear
必要項。等於年份的數值。
numMonth
選擇項。等於月份的數值。如果指定 numDate 的話，就必須指定這一項。
numDate
選擇項。等於日期的數值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所對應的傳回值。例如，numMonth 引數如果是沒有指定的選擇性引數，JScript 就會使用 getUTCMonth 方法所傳回的值。

此外，如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。

若要使用本地時間設定年份，請使用 setFullYear 方法。

Date 物件支援的年份範圍大約可以涵蓋 1970 年前後各約 285,616 年。

範例

下面的範例說明 setUTCFullYear 方法的用法。

function SetUTCFullYearDemo(newyear){
   var d, s;                   //宣告變數。
   d = new Date();             //建立Date物件。
   d.setUTCFullYear(newyear);  //設定UTC full year。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                  //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getFullYear 方法 | getUTCFullYear 方法 | setFullYear 方法

適用於：Date 物件


setUTCHours 方法

使用全球標準時間 (UTC) 設定 Date 物件中的小時值。

dateObj.setUTCHours(numHours[, numMin[, numSec[, numMilli]]])

引數

dateObj
必要項。任何 Date 物件。
numHours
必要項。這個數值等於小時值。
numMin
選擇項。這個數值等於分鐘值。如果使用 numSec 或 numMilli 中任一個的話，就必須指定這一項。
numSec
選擇項。這個數值等於秒數值。如果使用 numMilli 引數的話，就必須指定這一項。
numMilli
選擇項。這個數值等於毫秒值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果 numMin 引數是沒有指定的選擇性引數，JScript 就會使用 getUTCMinutes 方法所傳回的值。

若要使用本地時間設定小時值，請使用 setHours 方法。

如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，儲存的日期如果是 Jan 5, 1996 00:00:00.00，這時若呼叫 setUTCHours(30)，則日期會變成 Jan 6, 1996 06:00:00.00。負數的處理方式很類似。

範例

下面的範例說明 setUTCHours 方法的用法。

function SetUTCHoursDemo(nhr, nmin, nsec){
   var d, s;                        //宣告變數。
   d = new Date();                  //建立Date物件。
   d.setUTCHours(nhr, nmin, nsec);  //設定UTC 時數,分鐘數及秒數。
   s = "Current setting is " + d.toUTCString()
   return(s);                       //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getHours 方法 | getUTCHours 方法 | setHours 方法

適用於：Date 物件


setUTCMilliseconds 方法

使用全球標準時間 (UTC) 設定 Date 物件中的毫秒值。

dateObj.setUTCMilliseconds(numMilli)

引數

dateObj
必要項。任何Date物件。
numMilli
必要項。等於毫秒值的數值。

附註

若要使用本地時間設定毫秒值，請使用 setMilliseconds 方法。

如果 numMilli 的值大於 999 或者是負數的話，儲存的秒數會適量增加 (如果必要的話，還會同時遞增分鐘、小時等等)。

範例

下面的範例說明 setUTCMilliseconds 方法的用法。

function SetUTCMSecDemo(nmsec){
   var d, s;                           //宣告變數。
   var sep = ":";                      //開啟分隔字元。
   d = new Date();                     //建立Date 物件。
   d.setUTCMilliseconds(nmsec);        //設定UTC milliseconds。
   s = "Current setting is ";
   s += d.toUTCString() + sep + d.getUTCMilliseconds();
   return(s);                          //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getMilliseconds 方法 | getUTCMilliseconds 方法 | setMilliseconds 方法

適用於：Date 物件


setUTCMinutes 方法

使用全球標準時間 (UTC) 設定 Date 物件中的分鐘值。

dateObj.setUTCMinutes(numMinutes[, numSeconds[, numMilli]])

引數

dateObj
必要項。任何的 Date 物件。
numMinutes
必要項。這個數值等於分鐘值。
numSeconds
選擇項。這個數值等於秒數值。如果使用 numMilli 引數的話，就必須指定這一項。
numMilli
選擇項。這個數值等於毫秒值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果 numSeconds 引數是沒有指定的選擇性引數，JScript 就會使用 getUTCSeconds 方法所傳回的值。

若要使用本地時間修改分鐘值，請使用 setMinutes 方法。

如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，儲存的日期如果是 Jan 5, 1996 00:00:00.00，這時若呼叫 setUTCMinutes(70)，則日期會變成 Jan 5, 1996 01:10:00.00。

範例

下面的範例說明 setUTCMinutes 方法的用法：

function SetUTCMinutesDemo(nmin, nsec){
   var d, s;                    //宣告變數。
   d = new Date();              //建立Date 物件。
   d.setUTCMinutes(nmin,nsec);  //設定UTC minutes。
   s = "Current setting is " + d.toUTCString()
   return(s);                   //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getMinutes 方法 | getUTCMinutes 方法 | setMinutes 方法

適用於：Date 物件


setUTCMonth 方法

使用全球標準時間 (UTC) 設定 Date 物件中的月份值。

dateObj.setUTCMonth(numMonth[, dateVal])

引數

dateObj
必要項。任何的Date物件。
numMonth
必要項。這個數值等於月份。
dateVal
選擇項。這個數值代表日期。如果未提供的話，將使用呼叫 getUTCDate 方法所得的值。

附註

若要使用本地時間設定月份值，請使用 setMonth 方法。

如果 numMonth 的值大於 11 (一月是月份 0) 或者是負數的話，儲存的年份將跟著遞增或遞減。例如，儲存的日期如果是 Jan 5, 1996 00:00:00.00，這時若呼叫 setUTCMonth(14)，則日期會變成 Mar 5, 1997 00:00:00.00。

範例

下面的範例說明 setUTCMonth 方法的用法。

function SetUTCMonthDemo(newmonth){
   var d, s;                       //宣告變數。
   d = new Date();                 //建立Date物件。
   d.setUTCMonth(newmonth);        //設定UTC month。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                      //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getMonth 方法 | getUTCMonth 方法 | setMonth 方法

適用於：Date 物件


setUTCSeconds 方法

使用全球標準時間 (UTC) 設定 Date 物件中的秒數值。

dateObj.setUTCSeconds(numSeconds[, numMilli])

引數

dateObj
必要項。任何 Date 物件。
numSeconds
必要項。這個數值等於秒數值。
numMilli
選擇項。這個數值等於毫秒值。

附註

如果不指定選擇性引數，則所有具有選擇性引數的 set 方法都會使用 get 方法所傳回的對應值。例如，如果 numMilli 引數是沒有指定的選擇性引數，JScript 就會使用 getMonth 方法所傳回的值。

若要使用本地時間設定秒數值，請使用 getUTCMilliseconds 方法。

如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，儲存的日期如果是 Jan 5, 1996 00:00:00.00，這時若呼叫 setSeconds(150)，則日期會變成 Jan 5, 1996 00:02:30.00。

範例

下面的範例說明 setSeconds 方法的用法。

function SetUTCSecondsDemo(nsec, nmsec){
   var d, s;                       //宣告變數。
   d = new Date();                 //建立Date物件。
   d.setUTCSeconds(nsec, nmsec);   //設定UTC seconds 和 milliseconds。
   s = "Current UTC milliseconds setting is ";
   s += d.getUTCMilliseconds();    //取出新設定。
   return(s);                      //傳回新設定。
}

基本條件

版本 3

請參閱

Date 物件方法 | getSeconds 方法 | getUTCSeconds 方法 | setSeconds 方法

適用於：Date 物件


setYear 方法

設定 Date 物件中的年份值。

dateObj.setYear(numYear)

引數

dateObj
必要項。任何的 Date 物件。
numYear
必要項。等於年份減 1900 的數值。

附註

這個方法已不再使用，提供的目的只是為了與舊版相容。請改用 setFullYear 方法。

若要將 Date 物件的年份設成 1997，請呼叫 setYear(97)。若要將年份設成 2010，則呼叫 setYear(2010)。最後，若要將年份設成介於 0 到 99 的範圍內的年份，請使用 setFullYear 方法。

備註 對於 JScript 1.0 版而言， setYear會利用一數值,該數值是由numYear 物件所提供的年份數值再從1900年所附加的差值結果，而且不管該年份的數值應當為何。 例如，假如年份為 1899 則numYear就是 -1 ，而 2000 年的numYear則是100。

基本條件

版本 1

請參閱

Date 物件方法 | getFullYear 方法 | getUTCFullYear 方法 | getYear 方法 | setFullYear 方法 | setUTCFullYear 方法

適用於：Date 物件


shift 方法

移除陣列的第一個元素，並將它傳回。

arrayObj.shift( )

必要的 arrayObj 引用是 Array 物件。

附註

shift 方法會移除陣列的第一個元素，並將它傳回。

基本條件

版本 5.5

請參閱See Also

unshift 方法

適用於：Array 物件


sin 方法

傳回一個數值的正弦值 (sine)。

Math.sin(number)

number 引數為需要有正弦值的數值運算式。

附註

傳回值為其數值引數的正弦值。

基本條件

版本 1

請參閱

acos 方法 | asin 方法 | atan 方法 | cos 方法 | Math 物件方法 | tan 方法

適用於：Math 物件


slice 方法 (字串)

JScript

slice 方法 (Array)

傳回陣列的一個區段。

arrayObj.slice(start, [end])

引數

arrayObj
必要項。一個 Array 物件。
start
必要項。代表 arrayObj 中指定部份起點的索引。
end
選擇項。代表 arrayObj 中指定部份終點的索引。

附註

slice 方法會傳回一個包含 arrayObj 中指定部份的 Array 物件。

slice 方法會一直複製到由 end 所代表的元件，但並不包括此元件。如果start是負值，這個值會被視為是length + start ，length 是這個陣列的長度。如果end是負值，這個值會被視為是length + end，length 是這個陣列的長度。如果end予於省略，則抽選會繼續執行到 arrayObj 的終點。如果end出現在start之前，將沒有任何元件複製到新陣列。

範例

在下面的範例中，除了 myArray 的最後一個元素之外，所有的元素都會複製到 newArray 中︰

newArray = myArray.slice(0, -1)

基本條件

版本 3

請參閱

slice 方法 (String) | String 物件

適用於：Array 物件


slice 方法 (字串)

JScript

slice 方法 (String)

傳回字串的部分區段。

stringObj.slice(start, [end])

引數

stringObj
必要項。String 物件或字串常值。
start
必要項。到指定 stringObj 中某區段起始的索引。
end
選擇項。到指定 stringObj 中某區段結尾的索引。

附註

slice 方法會傳回包含 stringObj 指定部份的 String 物件。

slice 方法會一直複製到由 end 所代表的元件，但並不包括此元件。如果start是負值，這個值會被視為是length + start ，length 是這個字串的長度。如果end是負值，這個值會被視為是length + end，length 是這個字串的長度。如果end予於省略，則抽選會繼續執行到 stringObj 的終點。如果end出現在start之前，將沒有任何字元複製到新字串。

範例

在下面的範例中，兩種 slice 方法的用法都會傳回相同的內容。第二個範例的 -1 代表以 str1 中的最後一個字元作為結尾。

str1.slice(0)
str2.slice(0,-1)

基本條件

版本 3

請參閱

Array 物件 | slice 方法 (Array) | String 物件方法

適用於： String 物件


small 方法

將 String 物件中的文字加上 HTML <SMALL> 標記。

strVariable.small( )
"String Literal".small( )

附註

下面的範例說明 small 方法的用法：

var strVariable = "This is a string";
strVariable = strVariable.small( );

執行最後一個陳述式之後的 strVariable 值是：

<SMALL>This is a string</SMALL>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

big 方法 | String 物件方法 | String 物件屬性

適用於：String 物件


sort 方法

傳回一個元素已排序過的 Array 物件。

arrayobj.sort(sortFunction)

引數

arrayObj
必要項。任何Array物件。
sortFunction
選擇項。就是用來決定元件順序的函數名稱。如果予於省略，元素將會以升冪來排序，也就是 ASCII 字元的順序。

附註

sort 方法會在 Array 物件上進行排序；在執行時，並不會建立新的 Array 物件。

如果您在 sortfunction 引數中加入一個函數，它將會傳回下列其中一個值︰

  • 如果所傳遞的第一個引數小於第二個引數，則傳回一個負值。
  • 如果兩個引數相等，則傳回 0。
  • 如果第一個引數大於第二個引數，則傳回一個正值。

範例

下面的範例說明 sort 方法的用法︰

function SortDemo(){
   var a, l;                       //宣告變數。
   a = new Array("X" ,"y" ,"d", "Z", "v","m","r");
   l = a.sort();                   //進行陣列的排序。
   return(l);                      //傳回已排序的陣列。
}

基本條件

版本 2

請參閱

Array 物件方法

適用於：Array 物件


splice 方法

移除陣列中的元素，並依需要在原位插入新元素，然後傳回被刪除的元素。

arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])

引數

arrayObj
必要項。Array 物件。
start
必要項。陣列中要開始移除元素的位置，位置從零起算。
deleteCount
必要項。要移除的元素個數。
item1, item2,. . ., itemN
選擇項。要插入陣列以取代被刪除元素的元素。

附註

splice 方法會從 arrayObj 的 start 位置開始移除指定個數的元素，並插入新元素，以修改 arrayObj。被刪除的元素會傳回成為新的 array 物件。

基本條件

版本 5.5

請參閱

slice 方法 (陣列)

適用於：Array 物件


split 方法

將字串分為數個子字串，傳回所產生的字串陣列。

stringObj.split([separator[, limit]])

引數

stringObj
必要項。要分割的 String 物件或常值。此物件不會被 split 方法修改。
separator
選擇項。可以是一個字串或通用運算式物件，指定一個或多個用來分隔字串的字元。如果缺少該引數，會傳回包含整個字串的單一元件陣列。
limit
選擇項。這個值是用來限制傳回陣列裡的元件數。

附註

split 方法的結果是每次separator 在 stingObj 中出現時便進行分割而產生的字串陣列。separator

並不以任何陣列元件的某部位的形式傳回。

範例

下面的範例說明 split 方法的用法：

function SplitDemo(){
   var s, ss;
   var s = "The rain in Spain falls mainly in the plain.";
   //在每個空格字元處分割。
   ss = s.split(" ");
   return(ss);
}

基本條件

版本 3

請參閱

concat 方法 | RegExp 物件 | 通用運算式物件 | 通用運算式語法 | String 物件方法

適用於：String 物件


sqrt 方法

傳回一個數值的平方根。

Math.sqrt(number)

所需的number 引數為一個數值運算式。

附註

如果 number 是負數，則傳回值為 NaN。

基本條件

版本 1

請參閱

Math 物件方法 | SQRT1_2 屬性 | SQRT2 屬性

適用於：Math 物件


strike 方法

將 String 物件中的文字加上 HTML <STRIKE> 標記。

strVariable.strike( )
"String Literal".strike( )

附註

下面的範例說明 strike 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.strike( );

執行最後一個陳述式之後的 strVariable 值是：

<STRIKE>This is a string object</STRIKE>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性

適用於：String 物件


sub 方法

將 String 物件中的文字加上HTML <SUB> 標記。

strVariable.sub( )
"String Literal".sub( )

附註

下面的範例說明 sub 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.sub( );

執行最後一個陳述式之後的 strVariable 值是：

<SUB>This is a string object</SUB>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性 | sup 方法

適用於：String 物件


substr 方法

傳回一個從指定位置開始、且有指定長度的子字串。

stringvar.substr(start [, length ])

引數

stringvar
必要項。用來抽選子字串的字串常值或 String 物件。
start
必要項。所需子字串的起始位置。字串中第一個字元的索引是 0。
length
選擇項。包含在傳回子字串中的字元數。

附註

如果 length 是 0 或負值，會傳回空字串。若未指定，則子字串會一直持續到 stringvar 的結尾。

範例

下面的範例說明 substr 方法的用法。

function SubstrDemo(){
   var s, ss;                //宣告變數。
   var s = "The rain in Spain falls mainly in the plain.";
   ss = s.substr(12, 5);  //取得子字串。
   return(ss);               //傳回"Spain"。
}

基本條件

版本 3

請參閱

String 物件方法 | String 物件屬性 | substring 方法

適用於：String 物件


substring 方法

傳回 String 物件內在指定位置上的子字串。

strVariable.substring(start, end)
"String Literal".substring(start, end)

引數

start
指出子字串起始位置的整數索引 (以 0 為起始值)。
end
指出子字串結尾位置的整數索引 (以 0 為起始值)。

附註

substring 方法會傳回一個 String 物件，包含從start到end的子字串，但不包含end本身。

substring 方法會使用 start 和 end 中的較小值作為子字串的起點。例如 strvar.substring(0, 3) 和 strvar.substring(3, 0) 會傳回相同的子字串。

如果start 或 end 中的任何一個是 NaN 或負數，其值將會變成0。

子字串的長度等於 start 和 end 二者之間差異的絕對值。例如，strvar.substring(0, 3) 和 strvar.substring(3, 0) 中傳回的子字串長度都是 3。

範例

下面的範例說明 substring 方法的用法：

function SubstringDemo(){
   var ss;                         //宣告變數。
   var s = "The rain in Spain falls mainly in the plain..";
   ss = s.substring(12, 17);   //取得子字串。
   return(ss);                     //傳回子字串。
}

基本條件

版本 3

請參閱

String 物件方法 | String 物件屬性 | substr 方法

適用於：String 物件


sup 方法

將 String 物件中的文字加上 HTML <SUP> 標記。

strVariable.sup( )
"String Literal".sup( )

附註

下面的範例說明 sup 方法的用法：

var strVariable = "This is a string object";
strVariable = strVariable.sup( );

執行最後一個陳述式之後的 strVariable 值是：

<SUP>This is a string object</SUP>

不會檢查標記是否已套用至字串上。

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性 | sub 方法

適用於：String 物件


tan 方法

傳回一個數值的正切值 (tangent)。

Math.tan(number)

所需的number 引數為求取正切值的數值運算式。

附註

傳回值為 number 的正切值。

基本條件

版本 1

請參閱

acos 方法 | asin 方法 | atan 方法 | atan2 方法 | cos 方法 | Math 物件方法 | sin 方法

適用於：Math 物件


test 方法

傳回布林值，表示搜尋字串中是否包括模式。

rgExp.test(str)

引數

rgexp
必要項。是包含通用運算式模式與可適用旗標的 通用運算式 物件。
str
必要項。用來執行搜尋的字串。

附註

test 方法會檢查字串中是否有模式存在，若有則傳回 True，否則會傳回 False。

全域 RegExp 物件的屬性不會被 test 方法修改。

範例

下面的範例說明 test 方法的用法。使用這個範例，輸入一個通用運算式模式和一個字串到此功能中，這個功能會檢測出字串裡通用運算式模式的產生，並傳回一個顯示出搜尋結果的字串:

function TestDemo(re, s){
   var s1;                         //宣告變數。
   // 檢查字串以得知通用運算式是否存在。
   if (re.test(s))                 //檢測是否存在。
      s1 = " contains ";           //s 包含了模式。
   else
      s1 = " does not contain ";   //s 不包含模式。
   return("'" + s + "'" + s1 + "'"+ re.source + "'"); //傳回字串。
}

基本條件

版本 3

請參閱

RegExp 物件 |通用運算式物件 | 通用運算式物件方法 | 通用運算式物件屬性 | 通用運算式語法

適用於：通用運算式物件


toArray 方法

傳回從 VBArray 轉換而來的標準 JScript 陣列。

safeArray.toArray( )

safeArray 引數是一個 VBArray 物件。

附註

執行轉換可將多維的 VBArray 轉譯成單維的 JScript 陣列。每個連續的維度會附加在前一個維度的後面。例如，具有三個維度且每個維度包含三個元素的 VBArray 會轉換成如下的 JScript 陣列：

假設 VBArray 包含：(1, 2, 3)、(4, 5, 6)、(7, 8, 9)，經過轉譯之後，JScript 陣列會包含：1、2、3、4、5、6、7、8、9。

目前沒有任何方法可以將 JScript 陣列轉換成 VBArray。

範例

下面的範例包含三個部分。第一個部分是建立 Visual Basic 安全陣列的 VBScript 程式碼。第二個部分是將 VB 安全陣列轉換成 JScript 陣列的 JScript 程式碼。上述兩個部分構成 HTML 網頁的 <HEAD> 區段。第三個部分則是在 <BODY> 區段執行其他兩個部分的 JScript 程式碼。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("<BR>")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vbarray)
{
   var a = new VBArray(vbarray);
   var b = a.toArray();
   var i;
   for (i = 0; i < 9; i++)
   {
      document.writeln(b[i]);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JScript">
<!--
   VBArrayTest(CreateVBArray());
-->
</SCRIPT>
</BODY>

基本條件

版本 3

請參閱

dimensions 方法 | getItem 方法 | lbound 方法 | ubound 方法

適用於：VBArray 物件


toDateString 方法

傳回日期的字串值。

objDate.toDateString( )

所需的 objDate 引用是 Date 物件。

附註

toDateString 方法會以簡單易懂的格式傳回包含目前時區日期的字串值。

基本條件

版本 5.5

請參閱

toTimeString 方法 | toLocaleDateString 方法

適用於：Date 物件


toExponential 方法

傳回字串，內含以指數標記法呈現的數字。

numObj.toExponential([fractionDigits])

引數

numObj
必要項。Number 物件。
fractionDigits
選擇項。小數點後的位數。必須介於 0 – 20 的範圍內 (包含 0 跟 20)。

附註

toExponential 方法會以字串方式傳回採用指數標記法的數字。字串中是在有效小數點之前有一位數，後面可跟著 fractionDigits 位數。

如果未提供 fractionDigits，toExponential 方法會視需要傳回許多位數，以指定唯一的數字。

基本條件

版本 5.5

請參閱

toFixed 方法 | toPrecision 方法

適用於：Number 物件


toFixed 方法

傳回字串，代表定點標記法的數字。

numObj.toFixed([fractionDigits])

引數

numObj
必要項。Number 物件。
fractionDigits
選擇項。小數點後的位數。必須介於 0 – 20 的範圍內 (包含 0 跟 20)。

附註

toFixed 方法會以字串方式傳回採用定點標記法的數字。字串中是在有效小數點之前有一位數，後面必須跟著 fractionDigits 位數。

如果未提供 fractionDigits，toFixed 方法會假設數值是零。

基本條件

版本 5.5

請參閱

toExponential 方法 | toPrecision 方法

適用於：Number 物件


toGMTString 方法

將日期以格林威治標準時間 (GMT) 的格式轉換為字串並傳回。

dateObj.toGMTString()

所需的 dateObj 引數是任何的 Date 物件。

附註

toGMTString 方法已不再使用，提供的目的只是為了與舊版相容。建議您改用 toUTCString 方法。

toGMTString 方法會傳回一個 String 物件，其中包含使用 GMT 規格設定格式的日期。傳回值的格式如下：05 Jan 1996 00:00:00 GMT。

基本條件

版本 1

請參閱

Date 物件方法 | toUTCString 方法

適用於：Date 物件


toLocaleDateString 方法

傳回日期的字串值，以配合主機環境的國別設定。

objDate.toLocaleDateString( )

必要的 objDate 引用是 Date 物件。

附註

toLocaleDateString 方法會以易懂的格式傳回包含目前時區日期的字串值。日期是採用主機環境的目前國別設定的預設格式。Script 中不能使用這個方法的傳回值做判斷，因為它會因電腦而異。toLocalDateString 方法應該只做為顯示的格式 – 絕對不要做為計算的一部分。

基本條件

版本 5.5

請參閱

toDateString 方法 | toLocaleTimeString 方法

適用於：Date 物件


toLocaleLowerCase 方法

傳回將所有文字字元轉換成小寫的字串，並考慮主機環境的目前國別設定。

stringVar.tolocaleLowerCase( )

必要的 stringVar 引用是 String 物件、數值或常值。

附註

toLocaleLowerCase 方法會轉換字串中的字元，並考量主機環境的目前國別設定。在大部分情況下，它的結果會跟 toLowerCase 方法一樣。但如果語言的規則與一般的 Unicode 大小寫對映方式相衝突的話，結果就會不同。

基本條件

版本 5.5

請參閱

toLocaleUpperCase 方法 | toLowerCase 方法

適用於：String 物件


toLocaleString 方法

將日期以目前國別語系設定的格式轉換為字串並傳回。

dateObj.toLocaleString()

所需的 dateObj 是任何Date 物件。

附註

toLocaleString 方法會傳回一個 String 物件，其中包含將日期寫成目前國別語系的預設格式。

  • 在西元 1601 到 1999 年之間的日期。日期會根據使用者的控制台國別設定來設定格式。
  • 超出這個範圍以外的日期，可以使用toString 方法的預設值格式。

以1996年 1 月 5 日為例，在美國 toLocaleString 可能會傳回 01/05/96 00:00:00，但在歐洲，同一個日期卻可能傳回 05/01/96 00:00:00，因為歐洲的習慣用法是把日期放在月份之前。

備註 toLocaleString 只能直接將結果顯示給使用者看，不能再用來作程式運算的基礎，原因是：因為機型的不同，所傳回的結果會不同。

範例

下面的範例說明 toLocaleString 方法的用法。

function toLocaleStrDemo(){
   var d, s;                      //宣告變數。
   d = new Date();                //建立Date 物件。
   s = "Current setting is ";
   s += d.toLocaleString();       //轉換成目前的國別語系設定。
   return(s);                     //傳回轉換後的日期。
}

基本條件

版本 1

請參閱

Date 物件方法

適用於：Array 物件 | Date 物件 | Number 物件 | Object 物件


toLocaleTimeString 方法

傳回時間的字串值，以配合主機環境的目前國別設定。

objDate.toLocaleTimeString( )

必要的 objDate 引用是 Date 物件。

附註

toLocaleTimeString 方法會以易懂的格式傳回包含目前時區時間的字串值。日期是採用主機環境的目前國別設定的預設格式。Script 中不能使用這個方法的傳回值做判斷，因為它會因電腦而異。toLocalTimeString 方法應該只做為顯示的格式 – 絕對不要做為計算的一部分。

基本條件

版本 5.5

請參閱

ToTimeString 方法 | toLocaleDateString 方法

適用於：Date 物件


toLocaleUpperCase 方法

傳回將所有文字字元轉換成大寫的字串，並考慮主機環境的目前國別設定。

stringVar.tolocaleUpperCase( )

必要的 stringVar 引用是 String 物件、數值或常值。

附註

toLocaleUpperCase 方法會轉換字串中的字元，並考量主機環境的目前國別設定。在大部分情況下，它的結果會跟 toUpperCase 方法一樣。但如果語言的規則與一般的 Unicode 大小寫對映方式相衝突的話，結果就會不同。

基本條件

版本 5.5

請參閱

toLocaleLowerCase 方法 | toUpperCase 方法

適用於：String 物件


toLowerCase 方法

傳回一個字串，而字串中的所有字母字元都已轉換成小寫。

strVariable.toLowerCase( )
"String Literal".toLowerCase( )

附註

toLowerCase 方法對於非字母字元不會產生任何影響。

下面的範例說明 toLowerCase 方法的結果：

var strVariable = "This is a STRING object";
strVariable = strVariable.toLowerCase( );

執行最後一個陳述式之後的 strVariable 值是：

this is a string object

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性 | toUpperCase 方法

適用於：String 物件


toPrecision 方法

傳回字串，內含以指數或定點標記法呈現、且包含指定位數的數字。

numObj.toPrecision ([precision])

引數

numObj
必要項。Number 物件。
precision
選擇項。有效位數。 必須介於 1 – 21 之間的範圍 (包含 1 跟 21)。

附註

對於採用指數標記法的數字，傳回的小數點後是 precision - 1 位數。對於採用定點標記法的數字，傳回的有效位數是 precision。

如果未指定精確度或是 undefined，則應改為呼叫 toString 方法。

基本條件

版本 5.5

請參閱

toFixed 方法 | toExponential 方法

適用於：Number 物件


toString 方法

傳回一個物件的字串表示法。

objectname.toString([radix])

引數

objectname
必要項。進行字串表示法搜尋的物件。
radix
選擇項。指定一個基數 (radix)，以便將數值轉換為字串。這個值只能用數字來表示。

附註

toString 方法是所有內建 JScript 物件的一個方法。它的行為視物件型態而定：

物件 | 行為
Array | 將 Array 的元件轉換為字串，形成串連起來的結果 (以逗號分隔)。
Boolean | 如果布林值為 True，會傳回 "true"；否則會傳回 "false"。
Date | 傳回顯示日期的文字形式。
Error | 傳回包含錯誤訊息的字串。
Function 傳回一個以下列形式傳回的字串，其中 functionname 是呼叫 toString 方法之函數的名稱：
function functionname( ) { [native code] }
Number | 傳回數字的文字表示法。
String | 傳回 String 物件的值。
Default | 傳回 "[object objectname]"，其中 objectname 是物件型態的名稱。

範例

下面的範例說明以radix 引數使用 toString 方法的用法。傳回的函數值以下列的基數 表格來表示。

function CreateRadixTable (){
   var s, s1, s2, s3, x;                    //宣告變數。
   s = "Hex    Dec   Bin \n";               //建立表格標題。
   for (x = 0; x < 16; x++)                 //建立表格大小。
   {                                        //以數字的形式。
      switch(x)                             //顯示值。
      {                                     //設定內部欄位的空格。
         case 0 :
            s1 = "      ";
            s2 = "    ";
            s3 = "   ";
            break;
         case 1 :
            s1 = "      ";
            s2 = "    ";
            s3 = "   ";
            break;
         case 2 :
            s3 = "  ";
            break;
         case 3 :
            s3 = "  ";
            break;
         case 4 :
            s3 = " ";
            break;
         case 5 :
            s3 = " ";
            break;
         case 6 :
            s3 = " ";
            break;
         case 7 :
            s3 = " ";
            break;
         case 8 :
            s3 = "" ;
            break;
         case 9 :
            s3 = "";
            break;
         default:
            s1 = "     ";
            s2 = "";
            s3 = "    ";
      }                                     //轉換成六進位，十進位和二進位。
      s += " " + x.toString(16) + s1 + x.toString(10)
      s +=  s2 + s3 + x.toString(2)+ "\n";

   }
   return(s);                               //傳回整個基數表格。
}

基本條件

版本 2

請參閱

function 陳述式

適用於: Array 物件 | Boolean 物件 | Date 物件 | Error 物件 | Function 物件 | Number 物件 | Object 物件 | String 物件


toTimeString 方法

傳回時間的字串值。

objDate.toTimeString( )

必要的 objDate 引用是 Date 物件。

附註

toTimeString 方法會以簡單易懂的格式傳回包含目前時區時間的字串值。

基本條件

版本5.5

請參閱

toDateString 方法 | toLocaleTimeString 方法

適用於：Date 物件


toUpperCase 方法

傳回一個字串，而字串中的所有字母字元都已轉換成大寫。

strVariable.toUpperCase( )
"String Literal".toUpperCase( )

附註

toUpperCase 方法對於非字母字元不會產生任何影響。

範例

下面的範例說明 toUpperCase 方法的影響：

var strVariable = "This is a STRING object";
strVariable = strVariable.toUpperCase( );

執行最後一個陳述式之後的 strVariable 值是：

THIS IS A STRING OBJECT

基本條件

版本 1

請參閱

String 物件方法 | String 物件屬性 | toLowerCase 方法

適用於：String 物件


toUTCString 方法

將日期以全球標準時間 (UTC) 的格式轉換成字串並傳回。

dateObj.toUTCString()

所需的dateObj 引用是任何 Date 物件。

附註

toUTCString 方法會傳回一個 String 物件，其中包含將日期格式化成方便、易讀的 UTC 格式。

範例

下面的範例說明 toUTCString 方法的用法。

function toUTCStrDemo(){
   var d, s;                   //宣告變數。
   d = new Date();             //建立 Date 物件。
   s = "Current setting is ";
   s += d.toUTCString();       //轉換成UTC字串。
   return(s);                  //傳回UTC字串。
}

基本條件

版本 3

請參閱

Date 物件方法 | toGMTString 方法

適用於：Date 物件


ubound 方法

傳回指定的 VBArray 維度中所使用的最大索引值。

safeArray.ubound(dimension)

引數

safeArray
必要項。這是一個 VBArray 物件。
dimension
選擇項。這是需要較高索引上限的 VBArray 維度。若予以省略，ubound 的行為就如同傳遞 1。

附註

如果 VBArray 是空的，ubound 方法會傳回 undefined。如果 dim 大於 VBArray 中的維度個數或為一負值，則此方法會產生「陣列索引超出範圍」錯誤。

範例

下面的範例包含三個部分。第一個部分是建立 Visual 安全陣列的 VBScript 程式碼。第二個部分是決定安全陣列中的維度個數和每個維度上限的 JScript 程式碼。上述兩個部分構成 HTML 網頁的 <HEAD> 區段。第三個部分則是在 <BODY> 區段執行其他兩個部分的 JScript 程式碼。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         k = k + 1
      Next
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vba)
{
   var i, s;
   var a = new VBArray(vba);
   for (i = 1; i <= a.dimensions(); i++)
   {
      s = "The upper bound of dimension ";
      s += i + " is ";
      s += a.ubound(i)+ ".<BR>";
      return(s);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT language="jscript">
   document.write(VBArrayTest(CreateVBArray()));
</SCRIPT>
</BODY>

基本條件

版本 3

請參閱

dimensions 方法 | getItem 方法 | lbound 方法 | toArray 方法

適用於：VBArray 物件


unescape 方法

用 escape 方法將編碼的String 物件解碼。

unescape(charString)

所需的 charString引數是解碼的String 物件或常值。

附註

unescape 方法會傳回一個包含 charstring 內容的新 String 物件。所有以 %xx 十六進位形式編碼的字元皆會由其 ASCII 字元集的對等項目取代。

編碼為 %uxxxx 格式 (Unicode 字元) 的字元皆會由十六進位編碼 xxxx 的 Unicode 字元取代。

備註 unescape 方法不應該用來為Uniform Resource Identifiers (URI)解碼，請改用decodeURI 和decodeURIComponent 方法。

基本條件

版本 1

請參閱

DecodeURI 方法 | decodeURIComponent 方法 | escape 方法 | String 物件

適用於：Global 物件


unshift 方法

傳回陣列，並在開始處插入指定的元素。

arrayObj.unshift([item1[, item2 [, . . . [, itemN]]]])

引數

arrayObj
必要項。Array 物件。
item1, item2,. . ., itemN
選擇項。要插在 Array 開始處的元素。

附註

unshift 方法會將元素插入陣列的開始處，使他們依在引數清單中出現的順序出現。

基本條件

版本 5.5

請參閱

shift 方法

適用於：Array 物件


UTC 方法

傳回提供的日期與全球標準時間 (UTC) (或 GMT) 1970 年 1 月 1 日午夜 12 點之間的毫秒數。

Date.UTC(year, month, day[, hours[, minutes[, seconds[,ms]]]])

引數

year
必要項。為了世紀交替時的日期能夠精確起見，必須指定完整的年份。如果使用介於 0 到 99 之間的 year，則 year 假設是指 1900 + year。
month
必要項。這是以介於 0 到 11 (一月到十二月) 之間的整數表示月份。
Day
必要項。這是以介於 1 到 31 之間的整數表示日期。
hours
選擇項。如果指定 minutes 的話，就必須指定這一項。這是以介於 0 到 23 (午夜到 11pm) 之間的整數指定小時。
minutes
選擇項。如果指定 seconds 的話，就必須指定這一項。這是以介於 0 到 59 之間的整數指定分鐘。
seconds
選擇項。如果指定 milliseconds 的話，就必須指定這一項。這是以介於 0 到 59 之間的整數指定秒數。
ms
選擇項。這是以介於 0 到 999 之間的整數指定毫秒數。

附註

UTC 方法會傳回所提供的日期與 1970 年 1 月 1 日午夜 12 點 UTC 之間的毫秒數。這個傳回值可以用在 setTime 方法，以及 Date 物件的建構元中。如果引數的值大於它的範圍或者是負數的話，其他的儲存值都會跟著做修改。例如，您如果指定 150 秒的話，JScript 會重新定義成 2 分 30 秒。

UTC 方法與接受日期的 Date 物件建構元之間的差別在於：UTC 方法採用的是 UTC，而 Date 物件建構元則採用本地時間。

UTC 方法是靜態方法，所以在使用前不必先建立 Date 物件。

備註 如果 year 介於 0 到 99 之間的話，將以 1900 + year 做為年份。

範例

下面的範例說明 UTC 方法的用法。

function DaysBetweenDateAndNow(yr, mo, dy){
   var d, r, t1, t2, t3;            //宣告變數。
   var MinMilli = 1000 * 60         //開啟變數。
   var HrMilli = MinMilli * 60
   var DyMilli = HrMilli * 24
   t1 = Date.UTC(yr, mo - 1, dy)    //取得從1970年1月1日之後的毫秒數。
   d = new Date();                  //建立Date物件。
   t2 = d.getTime();                //取得目前時間。
   if (t2 >= t1)
      t3 = t2 - t1;
   else
      t3 = t1 - t2;
   r = Math.round(t3 / DyMilli);
   return(r);                       //傳回差異值。
}

基本條件

版本 1

請參閱

Date 物件方法 | setTime 方法

適用於：Date 物件


valueOf 方法

傳回指定物件的基本值。

object.valueOf( )

所需的object 引數為任何本質上是 JScript 的物件。

附註

每個內建 JScript 物件定義的 valueOf 方法會不同。

Object | Return Value
Array | 將陣列的元件轉換為字串，而且這些字串會串連在一起 (以逗號分開)。此種行為與 Array.toString 和 Array.join 方法相同。
Boolean | 布林值。
Date | 儲存的時間值，從 UTC 1970 年 1 月 1 日午夜 12 點起算的毫秒數。
Function | 函數本身。
Number | 數值。
Object | 物件本身。此為預設值。
String | 字串值。

Math 物件和Error 物件沒有 valueOf 方法。

基本條件

版本 2

請參閱

toString 方法

適用於：Array 物件 | Boolean 物件 | Date 物件 | Function 物件 | Number 物件 | Object 物件 | String 物件


JScript 物件

下列表格列出了JScript 物件。

說明 | 語言項目
啟動並傳回Automation物件的引用。 | ActiveXObject 物件
支援建立任何資料型態之陣列。 | Array 物件
建立一個新布林值。 | Boolean 物件
啟動日期和時間的基本儲存與擷取機制。 | Date 物件
儲存資料索引鍵與項目對 (pair) 的物件。 | Dictionary 物件
啟動集合物件中項目的列舉功能。 | Enumerator 物件
包含錯誤的相關資訊，錯誤發生在JScript 程式碼執行中。 | Error 物件
提供對電腦檔案系統的存取方法。 | FileSystemObject 物件
建立一個新函數。 | Function 物件
一個收集全域方法的內建物件。 | Global 物件
提供基本數學功能和常值的內建物件。 | Math 物件
數字資料型態的物件表示法和數值常值的預留位置。 | Number 物件
提供所有 JScript 物件共用的功能。 | Object 物件
一個全域的物件，用來儲存有關通用運算式模式比對搜尋的資訊。 | RegExp 物件
一個包含通用運算式模式與旗標的通用運算式。 | 通用運算式物件
允許處理和格式化文字字串，以及決定並定位字串內的子字串。 | String 物件
提供對 Visual Basic 安全陣列的存取方法。 | VBArray 物件


ActiveXObject 物件

啟動並傳回 Automation 物件的引用。

var newObject = new ActiveXObject("servername.typename"[, "location"])

引數

newObj
必要項。ActiveXObject 指定至該變數名稱。
servername
必要項。提供此物件的應用程式名稱。
typename
必要項。要建立之物件的型態或物件類別。
location
選擇項。此建立物件所在的網路伺服器名稱。

附註

Automation 伺服器至少會提供一種物件型態。例如，文書處理應用程式可以提供 application 物件、document 物件和 toolbar 物件。

若要建立一 Automation 物件，請將新的 ActiveXObject 指定至物件變數：

var ExcelSheet;
ExcelApp = new ActiveXObject("Excel.Application");
ExcelSheet = new ActiveXObject("Excel.Sheet");

此程式碼會啟動建立物件的應用程式 (在此例中為 Microsoft Excel 工作表)。一旦建立物件之後，您將可以在程式碼中使用已定義的物件變數來引用該物件。在下面的範例中，您將使用物件變數 ExcelSheet 來存取新物件的屬性和方法，以及其它 Excel 物件 (包括 Application 物件和 ActiveSheet.Cells 集合物件)。

// 透過Application 物件來顯示Excel。
ExcelSheet.Application.Visible = true;
// 在工作表的第一個儲存格中放入一些內容。
ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";
// Save the sheet.
ExcelSheet.SaveAs("C:\\TEST.XLS");
// 利用Application 物件中的Quit方法關閉。
ExcelSheet.Application.Quit();

若要在遠端伺服器上建立物件，您只能在關閉 Internet 安全性之後才可以進行。藉由將電腦名稱傳遞給 ActiveXObject 的 servername 引數，您便可以在遠端網路化電腦上建立物件。該電腦名稱與共用名稱 (sharename) 的機器名稱部分相同。對於名為 \\myserver\public 的網路共用而言，servername 為「myserver」。此外，您可以使用 DNS 格式或 IP 位址來指定 servername。

下段程式碼會傳回在「myserver」遠端網路電腦上執行之 Excel 執行個體的版本編號：

function GetAppVersion() {
   var XLApp = new ActiveXObject("Excel.Application", "MyServer");
   return(XLApp.Version);
}

如果指定的遠端伺服器不存在或找不到，就會發生錯誤。

基本條件

版本 1

請參閱

GetObject 函數


Array 物件

支援建立任何資料型態之陣列。

arrayObj = new Array()
arrayObj = new Array([size])
arrayObj = new Array([element0[, element1[, ...[, elementN]]]])

引數

arrayObj
必要項。Array 物件指定至該變數名稱。
size
選擇項。陣列的大小。當陣列以 0 為起始值時，建立的元素 (element) 就具有從 0 到 size -1 的索引值。
element0,...,elementn
選擇項。放置在陣列中的元素。這會建立具有 n + 1 個元素的陣列，且 length 為 n+1。使用這個語法，您可以提供一個以上的元素。

附註

建立陣列之後，陣列中個別的元素就可以使用[ ]表示法來存取，例如：

var my_array = new Array();
for (i = 0; i < 10; i++)
   {
   my_array[i] = i;
   }
x = my_array[4];

由於 Microsoft JScript 中的陣列是以 0 為起始值，所以上述範例中的最後一個陳述式會存取此陣列的第五個元素。該元素值為 4。

如果只傳遞一個引數給 Array 建構元 (constructor)，而且此引數為一個數字，則會將它強制為不帶正負號的32位元整數（趨近4億），並會使用該值作為陣列的大小。如果這個值小於0或不是整數，就會發生執行時的錯誤。

如果傳到Array 建構元的值不是一個數字，則length 會設定為1，這唯一元素的值會變成一個單一的傳入引數。

請注意JScript 陣列是零散的陣列，也就是說，雖然你可以將許多元素分配到一個陣列，卻只有那些實際上內含資料的陣列才會存在，這樣才能減少陣列佔用的記憶體數量。

屬性

constructor 屬性 | length 屬性 | prototype 屬性

方法

concat 方法 | join 方法 | pop 方法 | push 方法 | reverse 方法 | shift 方法 | slice 方法 | sort 方法 | splice 方法 | toLocaleString 方法 | toString 方法 | unshift 方法 | valueOf 方法

基本條件

版本 2

請參閱

new 運算子


arguments 物件

一個代表傳到執行中函數的引數物件，由函數來呼叫引數。

[function.]arguments[n]

引數

function
選擇項。執行中Function 物件的名稱。
n
必要項。傳到Function 物件的引數值，以0為起始值。

附註

arguments 物件無法直接建立。只有當函數開始執行時，才能使用arguments 物件。函數的arguments 物件並不是一個陣列，但存取引數的方式就跟存取陣列元素是一樣的。arguments 物件的索引值 n也有引用從 0�n 的屬性。

範例

以下範例說明arguments 物件的用法。

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = arguments.length;     //取得通過的引數個數。
   var expargs = ArgTest.length;       //取得預期的引數個數。
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   s += "\n\n"
   for (i =0 ; i < numargs; i++){      //取得引數內容。
   s += "  Arg " + i + " = " + arguments[i] + "\n";
   }
   return(s);                          //傳回引數清單。
}

基本條件

版本 1

請參閱

0...n 屬性 | callee 屬性 | length 屬性


Boolean 物件

建立一個新布林值。

語法

boolObj = new Boolean([boolValue])

引數

boolObj
必要項。Boolean 物件指定至該變數名稱。
boolValue
選擇項。新物件一開始的布林值。如果 Boolvalue 缺少，錯誤，0，null，NaN, 或是一個空字串，那麼

Boolean 物件一開始的值就是false，否則，一開始的值是true。

附註

Boolean 物件為布林資料型態的封裝器 (wrapper)。只要將一個布林資料型態轉換為 Boolean 物件時，JScript 就會隱含使用 Boolean 物件。

您很少需要明確地呼叫 Boolean 物件。

屬性

constructor 屬性 | prototype 屬性

方法

toString 方法 | valueOf 方法

基本條件

版本 2

請參閱

new 運算子 | var 陳述式


Date 物件

啟動日期和時間的基本儲存與擷取機制。

dateObj = new Date()
dateObj = new Date(dateVal)
dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]])

引數

dateObj
必要項。Date物件指定至該變數名稱。
dateVal
必要項。如果是一個數值，則 dateVal 代表介於指定日期與 1970 年1月1日午夜12 點之間的毫秒數 (根據全球標準時間)。如果是一個字串，則會根據 parse 方法中的規則來剖析 dateVal。dateVal 引數也可以是從一些 ActiveX® 物件傳回的 VT_DATE 值。
year
必要項。以完整的年份表示，例如 1976 (而不是 76) 。
month
必要項。代表月份，以介於 0 到 11 之間的整數表示一月到十二月。
date
必要項。代表日期，以介於 1 到 31 之間的整數表示。
hours
選擇項。如果有提供 minutes 就必須提供此引數。以介於 0 到 23 之間的整數 (表示午夜到下午 11 點) 來指定時。
minutes
選擇項。如果有提供 seconds 就必須提供此引數。以介於 0 到 59 之間的整數來指定分。
seconds
選擇項。如果有提供 milliseconds 就必須提供此引數。以介於 0 到 59 之間的整數來指定秒。
ms
選擇項。以介於 0 到 999 之間的整數來指定毫秒數。

附註

Date 物件包含一個代表特定時間 (毫秒之內) 的數字。如果此引數值大於其範圍或為一負數，則其它的儲存值就會跟著修改。例如，您若指定 150 秒，Jscript 就會重新將該數字定義為 2 分 30 秒。

如果此數字為 NaN，此物件不代表一個特定時間。如果您未傳遞任何參數給 Date 物件，則會將它初始化為目前的時間 (UTC)。在可以使用它之前，您必須先為此物件指定一個值。

Date 物件中可以表示的日期範圍大約為 1970 年 1 月 1 日前後的 285,616 年。

Date 物件具有兩個靜態方法，不用建立 Date 物件就可以呼叫。它們是 parse 和 UTC。

錯誤

以下範例說明Date 物件的用法。

function DateDemo(){
   var d, s = "Today's date is: ";           //宣告變數。
   d = new Date();                           //建立Date物件。
   s += (d.getMonth() + 1) + "/";            //取得月份。
   s += d.getDate() + "/";                   //取得日期。
   s += d.getYear();                         //取得年份。
   return(s);                                //傳回日期。
}

屬性

constructor 屬性 | prototype 屬性

方法

getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 | getMilliseconds 方法 | getMinutes 方法 | getMonth 方法 | getSeconds 方法 | getTime 方法 | getTimezoneOffset 方法 | getUTCDate 方法 | getUTCDay 方法 | getUTCFullYear 方法 | getUTCHours 方法 | getUTCMilliseconds 方法 | getUTCMinutes 方法 | getUTCMonth 方法 | getUTCSeconds 方法 | getVarDate 方法 | getYear 方法 | setDate 方法 | setFullYear 方法 | setHours 方法 | setMilliseconds 方法 | setMinutes 方法 | setMonth 方法 | setSeconds 方法 | setTime 方法 | setUTCDate 方法 | setUTCFullYear 方法 | setUTCHours 方法 | setUTCMilliseconds 方法 | setUTCMinutes 方法 | setUTCMonth 方法 | setUTCSeconds 方法 | setYear 方法 | toGMTString 方法 | toLocaleString 方法 | toUTCString 方法 | toString 方法 | valueOf 方法 | parse 方法 | UTC 方法

基本條件

版本 1

請參閱

new 運算子 | var 陳述式


Enumerator 物件

啟動集合物件中項目的列舉功能。

enumObj = new Enumerator([collection])

collection 引數為任何集合物件。

引數

enumObj
必要項。Enumerator 物件指定至該變數名稱。
collection
選擇項。任意Collection 物件。

附註

集合物件與陣列不同，因為集合物件的成員無法直接存取，不能像陣列一樣使用索引，只能將目前的項目指標移到集合物件的第一個或下一個元件。

Enumerator 物件提供存取集合物件中任何成員的方法，其行為類似於 VBScript 中的 For...Each 陳述式。

範例

下面範例顯示 Enumerator 物件的用法：

function ShowDriveList(){
   var fso, s, n, e, x;                     //宣告變數。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);          //建立磁碟機的列舉功能。
   s = "";
   for (;!e.atEnd();e.moveNext())           //列舉磁碟機的集合物件。
      {
         x = e.item();
         s = s + x.DriveLetter;
         s += " - ";
         if (x.DriveType == 3)              //檢查是否為網路磁碟機。
            n = x.ShareName;                //取得共享資源名稱。
         else if (x.IsReady)                //檢查磁碟機是否就緒。
            n = x.VolumeName;               //取得卷冊名稱。
         else
            n = "[Drive not ready]";
         s +=  n + "<br>";
      }
   return(s);                               //傳回目前正在使用的磁碟機清單。
}

屬性

Enumerator 物件沒有任何屬性。

方法

atEnd 方法 | item 方法 | moveFirst 方法 | moveNext 方法

基本條件

版本 3


Error 物件

包含錯誤的相關資訊。

errorObj = new Error()
errorObj = new Error([number])
errorObj = new Error([number[, description]])

引數

errorObj
必要項。Error 物件指定至該變數名稱。
number
選擇項。指定給錯誤的數值。如果省略，則為零。
description
選擇項。簡要說明錯誤的字串。如果省略，則為空字串。

附註

每當發生執行階段錯誤時，就會建立一個 Error 物件的執行個體以描述該錯誤。這個執行個體具有兩項內建屬性，分別是錯誤的說明 (description 屬性) 和錯誤代碼 (number 屬性)。

錯誤代碼是一個 32 位元的值。前 16 個位元代表設備代碼 (facility code)，後 16 個位元才是實際的錯誤代碼。

Error 物件也可以使用上述語法，或是使用 throw 陳述式來明確建立。在以上兩種情況下，您可以加入任何自選的屬性，以擴展 Error 物件的功能。

一般說來，在 try...catch 陳述式中建立的區域變數通常會引用隱含建立的 Error 物件。這樣，您就可以按照自己選擇的方式來使用錯誤代碼和說明。

範例

下面範例說明使用隱含建立之 Error 物件的方法。

try
   x = y   // 導致錯誤。
catch(e){   // 建立區域變數e。
   response.write(e)   // 列印"[object Error]"。
   response.write(e.number & 0xFFFF)   // 列印5009。
   response.write(e.description)   // 列印"'y' 為 undefined"。
}

方法

Error 物件沒有方法。

屬性

description 屬性 | number 屬性

基本條件

版本 5

請參閱

new 運算子 | throw 陳述式 | try...catch 陳述式 | var 陳述式


Function 物件

建立一個新函數。

語法 1

function functionName([argname1 [, ...[, argnameN]]])
{
   body
}

語法 2

functionName = new Function( [argname1, [... argnameN,]] body );

引數

functionName
必要項。新建立的函數名稱
argname1...argnameN
選擇項。函數接受的選擇性引數清單。
body
選擇項。呼叫函數時，要執行的 JScript 程式碼字串。

附註

此函數為 JScript 中的基本資料型態。語法 1 會建立一函數值，當需要時 JScript 就會將它轉換為 Function 物件。而呼叫函數時，JScript 就會將語法 2 建立的 Function 物件轉換為函數值。

語法 1 是 JScript 中建立新函數的標準方式。語法 2 是另一種用來明確建立函數物件的替代形式。

例如，若要建立一個將兩個傳遞給它的引數加入到其中的函數，您可以利用下列兩種方式之一來進行：

範例 1

function add(x, y)
{
   return(x + y);            //執行增加項並傳回結果。
}

範例 2

var add = new Function("x", "y", "return(x+y)");

在任何一種方式中，您可以利用類似於下行的程式碼來呼叫此函數：

add(2, 3);
備註 呼叫函數時，請確定您已包含括弧以及任何必要的引數。如果呼叫沒有括弧的函數，則會傳回函數的文字，而不是函數的結果。

屬性

arguments 屬性 | caller 屬性 | constructor 屬性 | prototype 屬性

方法

toString 方法 | valueOf 方法

基本條件

版本 2

請參閱

function 陳述式 | new 運算子 | var 陳述式


Global 物件

一個收集全域方法的內建物件。

Global 物件沒有任何語法。您可以直接呼叫其方法。

附註

絕不可直接使用 Global 物件，而且不能使用 new 運算子來建立。此物件於 Script 引擎初始化時就會建立，因此能立即使用其方法和屬性。

屬性

Infinity 屬性 | NaN 屬性

方法

escape 方法 | eval 方法 | isFinite 方法 | isNaN 方法 | parseFloat 方法 | parseInt 方法 | unescape 方法

基本條件

版本 5

請參閱

Object 物件


Math 物件

提供基本數學功能和常值的內建物件。

Math.[{property | method}]

引數

property
必要項。Math 物件其中一個屬性的名稱。
method
必要項。Math 物件其中一個方法的名稱。

附註

Math 物件不能使用 new 運算子來建立，而且在您試圖如此建立時就會發生錯誤。此物件於載入 Script 引擎時便會建立，其所有方法和屬性隨時都能供您的 Script 使用。

屬性

E 屬性 | LN2 屬性 | LN10 屬性 | LOG2E 屬性 | LOG10E 屬性 | PI 屬性 | SQRT1_2 屬性 | SQRT2 屬性

方法

abs 方法 | acos 方法 | asin 方法 | atan 方法 | atan2 方法 | ceil 方法 | cos 方法 | exp 方法 | floor 方法 | log 方法 | max 方法 | min 方法 | pow 方法 | random 方法 | round 方法 | sin 方法 | sqrt 方法 | tan 方法

基本條件

版本 1

請參閱

Number 物件


Number 物件

數字資料型態的物件表示法和數值常數的預留位置。

numObj = new Number(value)

引數

numobj
必要項。Number 物件指定至該變數名稱。
value
必要項。建立Number 物件的數值。

附註

JScript 會根據數值的要求而建立 Number 物件，您很少需要明確建立 Number 物件。

Number 物件的主要目的是用來收集屬性，以及允許使用 toString 方法將數字轉換為字串。

屬性

MAX_VALUE 屬性 | MIN_VALUE 屬性 | NaN 屬性 | NEGATIVE_INFINITY 屬性 | POSITIVE_INFINITY 屬性 | constructor 屬性 | prototype 屬性

方法

toLocaleString 方法 |toString 方法 | valueOf 方法

基本條件

版本 1

請參閱

Math 物件 | new 運算子


Object 物件

提供所有 JScript 物件共用的功能。

obj = new Object([value])

引數

obj
必要項。Object 物件指定至該變數名稱。
value
選擇項。任何JScript基本資料型態(Number, Boolean, or String)。如果值是一個物件，這個物件將會不加修改的傳回。如果 value 是 null、undefined，或未提供，就會建立一個沒有內容的物件。

附註

Object 物件是包含在其它所有 JScript 物件中－其所有方法和屬性皆可在其它所有物件中使用。這些方法可在使用者自訂物件中重新定義，並在適當的時機透過 JScript 呼叫。toString 方法是一個經常重新定義之 Object 方法的範例。

在程式語言參考中，每個 Object 方法的說明皆同時包含內建JScript 物件的預設資訊和物件特定的資訊。

屬性

prototype 屬性 | constructor 屬性

方法

toString 方法 | valueOf 方法

基本條件

版本 3

請參閱

Function 物件 | Global 物件


RegExp 物件

一個全域的物件，用來儲存有關通用運算式模式比對搜尋的資訊。

RegExp.property

所需的property 引數可以是任意 RegExp 物件的其中一個屬性。

附註

RegExp 物件無法直接建立，但通常皆可使用。在成功的完成一個通用運算式搜尋之前，RegExp 物件各個屬性的起始值如下：

屬性 | 替代語法 | 起始值
index |  | -1
lastIndex |  | -1
lastMatch | $& | Empty string.
lastParen | $+ | Empty string.
leftContext |  | Empty string.
rightContext |  | Empty string.
$1 - $9 | $1 - $9 | Empty string.

它的屬性有一個 undefined 的值，直到一個通用運算式搜尋執行成功為止。

全域 RegExp 物件不能跟通用運算式物件混用。即使兩者看來像是相同的東西，它們實際上卻是壁壘分明的。 全域 RegExp 物件的屬性之一，是每當有新的資訊出現，它就會更新相符項目的內容，而通用運算式物件的屬性卻是只包含一項跟通用運算式內容相符的資訊。

範例

以下範例說明全域 RegExp 物件的用法。

function matchDemo(){
   var s;
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBdbsbdbdz";
   var arr = re.exec(str);
   s = "$1 contains: " + RegExp.$1 + "\n";
   s += "$2 contains: " + RegExp.$2 + "\n";
   s += "$3 contains: " + RegExp.$3;
   return(s);
}

屬性

$1...$9 屬性 | index 屬性 | input 屬性 | lastIndex 屬性 | lastMatch 屬性 | lastParen 屬性 | leftContext 屬性 | rightContext 屬性

方法

RegExp 物件沒有任何方法。

基本條件

版本 3

請參閱

通用運算式物件 | 通用運算式語法 | String 物件


通用運算式物件

一個包含通用運算式模式與旗標的通用運算式。旗標可以確定如何應用這個模式。

語法 1

re = /pattern/[flags]

語法 2

re = new RegExp("pattern",["flags"])

引數

re
必要項。通用運算式模式指定至該變數名稱。
pattern
必要項。將使用的通用運算式模式。如果您使用語法 1，則會用 "/" 字元來分隔此模式。如果您使用語法 2，則會用引號來括住此模式。
flags
選擇項。如果使用語法 2，就是引號裡的旗標。可使用的旗標（可能兩種以上一起使用）是：
  • g (全域搜尋所有出現的 pattern)
  • i (不區分大小寫)
  • m (多項搜尋。)

附註

全域 RegExp 物件不能跟 通用運算式 物件混用。即使兩者看來像是相同的東西，它們實際上卻是壁壘分明的。Regular Expression 物件只包含某個特定的 通用運算式，而全域 RegExp 物件卻能不斷更新相符項目的內容。

當搜尋的字串為字元組合時，RegularExpression 物件會儲存使用過的模式。建立一個 RegularExpression 物件之後，就會將它傳遞給一個字串方法，或將一個字串傳遞給其中一個通用運算式的方法。有關最近執行搜尋的資訊會儲存在全域 RegExp 物件中。

如果您事先知道搜尋的字串時，請使用語法 1。如果搜尋字串經常在改變或不知道時 (如由使用者輸入的字串)，請使用語法 2。

pattern 引數會在使用之前編譯為內部格式。對於語法 1，pattern 會編譯為載入的 script。對於語法 2，pattern 只會在使用之前或呼叫 compile 方法時加以編譯。

範例

以下範例利用建立一個包含通用運算式模式與旗標的物件 (re) 說明 Regular Expression 的用法。在此情況下，match 方法會使用Regular Expression 物件：

function MatchDemo(){
   var r, re;                     //宣告變數。
   var s = "The rain in Spain falls mainly in the plain";
   re = new RegExp("Spain","i");  //建立通用運算式物件。
   r = s.match(re);               //在字串裡尋找相符項目。
   return(r);                     //傳回相符項目的結果。
}

屬性

lastIndex 屬性 | source 屬性

方法

compile 方法 | exec 方法 | test 方法

基本條件

版本 3

請參閱

RegExp 物件 | 通用運算式語法 | String 物件


String 物件

允許處理和格式化文字字串，以及決定並定位字串內的子字串。

語法

newString = new String(["stringLiteral"])

引數

newString
必要項。String 物件指定至該變數名稱。
stringLiteral
選擇項。任意Unicode 字元的群組。

附註

String 物件可以使用字串文字來隱含建立。以此種方式 (以標準字串引用的方式) 建立的 String 物件是與使用 new 運算子所建立的 String 物件不同。所有的字串文字會共用一個通用、全域的字串物件。如果將一個屬性加入一個字串文字中，就可以供所有的標準字串物件使用：

var alpha, beta;
alpha = "This is a string";
beta = "This is also a string";

alpha.test = 10;

在此範例中，test 現在會定義給 beta 以及所有未來的字串文字。不過，在下面的範例中，以不同的方式處理新增的屬性：

var gamma, delta;
gamma = new String("This is a string");
delta = new String("This is also a string");

gamma.test = 10;

在上例中，test 不會定義給 delta。每個宣告為 new String 物件的 String 物件皆具有自己的成員組。這只有在 String 物件和字串文字以不同的方式處理時的情況。

屬性

constructor 屬性 | length 屬性 | prototype 屬性

方法

anchor 方法 | big 方法 | blink 方法 | bold 方法 | charAt 方法 | charCodeAt 方法 | concat 方法 | fixed 方法 | fontcolor 方法 | fontsize 方法 | fromCharCode 方法 | indexOf 方法 | italics 方法 | lastIndexOf 方法 | link 方法 | match 方法 | replace 方法 | search 方法 | slice 方法 | small 方法 | split 方法 | strike 方法 | sub 方法 | substr 方法 | substring 方法 | sup 方法 | toLowerCase 方法 | toUpperCase 方法 | toString 方法 | valueOf 方法

基本條件

版本 1

請參閱

new 運算子


VBArray 物件

提供對 Visual Basic 安全陣列的存取方法。

varName = new VBArray(safeArray)

safeArray 為一個 VBArray 值。

引數

varName
必要項。VBArray 指定至該變數名稱。
safeArray
必要項。一個 VBArray 值。

附註

VBArrays 具有唯讀性質且無法直接建立。safeArray 引數必須在傳遞給 VBArray 建構元 (constructor) 之前先取得一個 VBArray 值。這只能從現有的 ActiveX 或其它物件來擷取此值。

VBArrays 可以有多個維數。每個維數的索引可以不相同。dimensions 方法會擷取陣列中的維數個數；lbound 和 ubound 方法則擷取每個維數所使用的索引範圍。

範例

下面的範例包含三個部分。第一個部分是建立 Visual Basic 安全陣列的 VBScript 程式碼。第二個部分是將 VB 安全陣列轉換為 JScript 陣列的 JScript 程式碼。上述兩個部分構成 HTML 網頁的 <HEAD> 區段。第三個部分則是在 <BODY> 區段執行其他兩個部分的 JScript 程式碼。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("vbCRLF")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vbarray){
   var a = new VBArray(vbarray);
   var b = a.toArray();
   var i;
   for (i = 0; i < 9; i++)
   {
      document.writeln(b[i]);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JScript">
<!--
   VBArrayTest(CreateVBArray());
-->
</SCRIPT>
</BODY>

屬性

VBArray 物件沒有任何屬性。

方法

dimensions 方法 | getItem 方法 | lbound 方法 | toArray 方法 | ubound 方法

基本條件

版本 3

請參閱

Array 物件


JScript 運算子

下列表格列出了 JScript 運算子。

說明 | 語言項目
用來加總兩個數值運算式的值或進行字串串連。 | 加號運算子 (+)
將值指定給變數。 | 指定運算子 (=)
對兩個運算式進行位元 AND 運算。 | AND 位元運算子 (&)
將運算式的位元向左移。 | 位元左移運算子 (<<)
對一個運算式進行位元 NOT (否定) 運算。 | NOT 位元運算子 (~)
對兩個運算式進行位元 OR 運算。 | OR 位元運算子 (|)
將運算式的位元向右移，而且正負號維持不變。 | 位元右移運算子 (>>)
對兩個運算式進行位元互斥 OR 運算。 | XOR 位元運算子 (^)
使兩個運算式能循序執行。 | 逗號運算子(,)
傳回一個代表比較結果的布林值。 | 比較運算子
複合指定運算子的清單。 | 複合指定運算子
根據條件來執行兩個運算式的其中一個。 | 條件式(三元)運算子(?:)
將變數遞減1。 | 遞減運算子 (--)
刪除物件中的某個屬性，或是移除陣列中的某個元素。 | delete 運算子
將兩個數字相除並傳回數值結果。 | 除號運算子 (/)
比較兩個運算式以決定它們是否相等，以及是否為同一種資料型態。 | 等於運算子 (==)
比較兩個運算式以決定哪一個大。 | 大於運算子 (>)
比較兩個運算式以決定哪一個大於或等於另一個。 | 大於或等於運算子 (>=)
比較兩個運算式以決定它們是否相等，以及是否為同一種資料型態。 | 恆等運算子 (===)
將變數遞增1。 | 遞增運算子 (++)
比較兩個運算式以決定它們是否不相等。 | 不等於運算子(!=)
傳回一個布林值，指出該物件是否為某個物件類別的執行個體。 | instanceof 運算子
比較兩個運算式以決定哪一個小於另一個。 | 小於運算子 (<)
比較兩個運算式以決定哪一個小於或等於另一個。 | 小於或等於運算子 (<=)
進行兩個運算式的邏輯關連。 | AND 邏輯運算子(&&)
對一個運算式進行邏輯否定。 | NOT 邏輯運算子(!)
進行兩個運算式的邏輯分離。 | OR 邏輯運算子(||)
將兩個運算式的值相除並傳回餘數。 | 模數運算子(%)
將兩個數相乘。 | 乘號運算子 (*)
建立一個新物件。 | new 運算子
比較兩個運算式以決定它們是否不相等以及是否不屬於同一種資料型態。 | 非恆等運算子(!==)
包含有關執行JScript 運算子優先順序訊息的清單。 | 運算子優先順序
將兩個運算式相減。 | 減號運算子 (-)
傳回一個字串，指出運算式的資料型態。 | typeof 運算子
指出一個數值運算式的負值。 | 一元負數運算子 (-)
在運算式中進行不帶正負號的右移。 | 不帶正負號的右移運算子(>>>)
不讓運算式傳回值。 | void 運算子


加號指定運算子 (+=)

新增一個運算式的值至變數的值，並指定結果至該變數。

result += expression

引數

result
任意變數。
expression
任意運算式。

附註

使用此運算子與進行下列運算的效果完全相同：

result = result + expression

運算式的基本次型態會決定 += 運算子的行為。

若 | 則
兩個運算式皆為數值或布林值 | 相加
兩個運算式皆為字串 | 串連
一個運算式為數值，另一個運算式為字串 | 串連

基本條件

版本 1

請參閱

+ 運算子 | 運算子優先順序 | 運算子摘要


加號運算子 (+) (JScript)

JScript

加號運算子 (+)

用來加總兩個數值運算式的值或進行字串串連。

result = expression1 + expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

運算式的基本次型態會決定 + 運算子的行為。

若 | 則
兩個運算式皆為數值或布林值 | 相加
兩個運算式皆為字串 | 串連
一個運算式為數值，另一個運算式為字串 | 串連

基本條件

版本 1

請參閱

+= 運算子 | 運算子優先順序 | 運算子摘要


指定運算子 (=) (JScript)

JScript

指定運算子 (=)

指定一個值至該變數。

result = expression

引數

result
任意變數。
expression
任意數值運算式。

附註

因為 = 運算子的行為與其它運算子相似，所以使用它的運算式除了指定值至一變數 之外還會包含一個值。這表示您可以如下串接指定運算子：

j = k = l = 0;
在執行此範例陳述式後，J、K和l都會等於零。

基本條件

版本 1

請參閱

運算子優先順序| 運算子摘要


AND 位元指定運算子 (&=)

對變數值和運算值進行位元AND運算，並指定結果至該變數。

result &= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用此運算子與進行下列運算的效果完全相同：

result = result & expression

&= 運算子會針對 result 和 expression 值的二進位表示法進行位元 AND 運算。此運算的輸出如下：

0101    (result)
1100    (expression)
----
0100    (output)

只要這兩個運算式都有一個數字 1，結果中的該數字也會等於 1，否則為 0。

基本條件

版本 1

請參閱

& 運算子 | 運算子優先順序 | 運算子摘要


AND 位元運算子 (&)

對兩個運算式進行位元 AND 運算。

result = expression1 & expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

& 運算子會針對兩個運算式值的二進位表示法進行位元 AND 運算。此運算的結果如下：

0101   (expression1)
1100   (expression2)
----
0100   (result)

只要這兩個運算式都有一個數字 1，結果中的該數字也會等於 1，否則為 0。

基本條件

版本 1

請參閱

&= 運算子 | 運算子優先順序 | 運算子摘要


位元左移運算子 (<<)

將運算式的位元向左移。

result = expression1 << expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

<< 運算子會按照 expression2 中指定的位元數，將 expression1 的位元向左移。例如：

var temp
temp = 14 << 2

temp 變數的值為 56，因為 14 (二進位格式為 00001110) 向左移兩個位元等於 56 (二進位格式為 00111000)。

基本條件

版本 1

請參閱

<<= 運算子 | >> 運算子 | >>> 運算子 | 運算子優先順序 | 運算子摘要


NOT 位元運算子 (~)

對一個運算式進行位元 NOT (否定) 運算。

result = ~ expression

引數

result
任意變數。
expression1
任意運算式。

附註

所有的一元運算子，如 ~ 運算子，都會以下列方式來評估運算式：

  • 套用於 undefined或 null 運算式時，會產生執行階段錯誤。
  • 物件會轉換成字串。
  • 如果可以，字串會轉換成數字，否則會產生執行階段錯誤。
  • 布林值會被視為數字 (False 為 0，True 則為 1)。

運算子會套用到結果數字中。

~ 運算子會針對運算式值的二進位表示法進行位元否定運算。此項運算的結果如下：

0101   (expression)
----
1010   (result)

運算式中數字 1 的結果都會變成 0，而運算式中數字 0 的結果則會變成 1。

基本條件

版本 1

請參閱

! 運算子 | 運算子優先順序 | 運算子摘要


OR 位元指定運算子 (|=)

對變數值和運算值進行位元OR運算，並指定結果至該變數。

result |= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用此運算子與進行下列運算的效果完全相同：

result = result | expression

|= 運算子會針對 result 和 expression 值的二進位表示法進行位元 OR 運算。此運算的結果如下：

0101    (result)
1100    (expression)
----
1101    (output)

只要其中一個運算式有一個數字 1，結果中的該數字也會等於 1，否則為 0。

基本條件

版本 1

請參閱

| 運算子 | 運算子優先順序 | 運算子摘要


OR 位元運算子 (|)

對兩個運算式進行位元 OR 運算。

result = expression1 | expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

| 運算子會針對兩個運算式值的二進位表示法進行位元 OR 運算。此項運算的結果如下：

0101   (expression1)
1100   (expression2)
----
1101   (result)

只要其中一個運算式有一個數字 1，結果中的該數字也會等於 1，否則為 0。

基本條件

版本 1

請參閱

|= 運算子 | 運算子優先順序 | 運算子摘要


右移位元運算子 (>>)

將運算式的位元向右移，而且正負號維持不變。

result = expression1 >> expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

>> 運算子會按照 expression2 中指定的位元數，將 expression1 的位元向右移。expression1 的正負號位元是用來從左邊補上數字，而被右移的數字將會捨去。例如評估下列程式碼之後，temp 的值會變成 -4：-14 (二進位格式為 11110010) 向右移兩個位元等於 -4 (二進位格式為 11111100)。

var temp
temp = -14 >> 2

基本條件

版本 1

請參閱

<< 運算子 |>>= 運算子 | >>> 運算子 | 運算子優先順序 | 運算子摘要


XOR 位元指定運算子 (^=)

對一個變數和運算式進行位元互斥 OR 運算，並指定結果至該變數。

result ^= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用 ^= 運算子和進行下列運算的效果完全一樣：

result = result ^ expression

^= 運算子會針對兩個運算式值的二進位表示法進行位元互斥 OR 運算。此運算的結果如下：

0101    (result)
1100    (expression)
----
1001    (result)

當其中一個 (且只有一個) 運算式有個數字是 1 時，結果中的該數字也會是 1，否則為 0。

基本條件

版本 1

請參閱

^ 運算子 | 運算子優先順序 | 運算子摘要


XOR 位元運算子 (^)

對兩個運算式進行位元互斥 OR 運算。

result = expression1 ^ expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

^ 運算子會針對兩個運算式值的二進位表示法進行位元互斥 OR 運算。此運算的結果如下：

0101   (expression1)
1100   (expression2)
----
1001   (result)

當其中一個 (且只有一個) 運算式有個數字是 1 時，結果中的該數字也會是 1，否則為 0。

基本條件

版本 1

請參閱

^= 運算子 | 運算子優先順序 | 運算子摘要


逗號運算子 (,)

使兩個運算式能循序執行。

expression1, expression2

引數

expression1
任意運算式。
expression2
任意運算式。

附註

, 運算子會讓兩邊的運算式由左至右執行，並獲得右邊的運算式值。, 運算子最常用於 for 迴圈的遞增運算式中，例如：

for (i = 0; i < 10; i++, j++)
{
   k = i + j;
}

for 陳述式只允許在每個迴圈的結尾執行一個運算式。, 運算子的功用是可將多個運算式視同一運算式處理，因此可避開上述限制。

基本條件

版本 1

請參閱

for 陳述式 | 運算子優先順序 | 運算子摘要


比較運算子 (JScript)

JScript

比較運算子

傳回一個代表比較結果的布林值。

expression1 comparisonoperator expression2

引數

expression1
任意運算式。
comparisonoperator
任意比較運算子。
expression2
任意運算式。

附註

比較字串時，JScript 會使用字串運算式的 Unicode 字元值。

以下敘述說明根據 expression1 和 expression2 的型態和值，不同的運算子群組會有不同的行為方式：

關係式 (<、>、<=、>=)

  • 嘗試將 expression1 及 expression2 兩者皆轉換為數字。
  • 如果這兩個運算式皆是字串，則會進行語法上的字串比較。
  • 如果其中一個運算式為 NaN，則會傳回 false。
  • 負數零與正數零相等。
  • 負無限大小於任何一個數字 (包含其本身)。
  • 正無限大大於任何一個數字 (包含其本身)。

等號 (==、!=)

  • 如果兩個運算式的型態不同，則會嘗試將它們轉換為字串、數字或布林值。
  • NaN 不等於任何數字 (包含其本身)。
  • 負數零與正數零相等。
  • null 同時等於 null 和 undefined。
  • 如果兩個值是完全相同的字串、數值上相等的數字、相同的物件、同樣的布林值，或者 (如果型態不同) 可以將它們強制轉換為上述其中一種情況，則會將它們視為相等。
  • 其它所有的比較皆視為不相等。

恆等 (===, !==)

這些運算子行為上與等號運算子完全相同，除了不會進行型態轉換，以及必須是相同的型態之外，才能視為相等。

基本條件

版本 1

請參閱

運算子優先順序 | 運算子摘要


複合指定運算子

下列表格列出了 JScript 指定運算子。

運算子 | 符號
加號 | +=
AND位元 | &=
Or位元 | |=
XOR位元 | ^=
除號 | /=
左移 | <<=
模數 | %=
乘號 | *=
右移 | >>=
減號 | -=
不帶正負號的右移 | >>>=

基本條件

版本訊息


條件式 (三元) 運算子 (?:)

根據條件來執行兩個運算式的其中一個。

test ? statement1 : statement2

引數

test
任意布林運算式。
statement1
可能是 compound 陳述式。若 test 為 True ，則執行此陳述式。
statement2
可能是一個複合陳述式。若 test 為 False 則執行此運算式。

附註

?: 運算子是 if...else 陳述式的簡易表示法。在一些大型運算式中若使用 if...else 陳述式會顯得很冗長，因此通常會改用此運算子。例如：

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

上述範例會在 6pm 後建立內含「Good evening」的字串。以下是同樣的程式碼但使用 if...else 陳述式：

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";

基本條件

版本 1

請參閱

if...else 陳述式 | 運算子優先順序 | 運算子摘要


delete 運算子

說明

刪除物件中的某個屬性，或是移除陣列中的某個元素。

delete expression

expression 引數是一個有效的 JScript 運算式，通常會產生屬性名稱或陣列元件。

附註

若 expression 的結果為物件，則在 expression 中指定的屬性會存在，而且物件也不允許刪除該屬性，結果會傳回 False。

在其他的情況下則一律傳回 True。

基本條件

版本 3

請參閱

運算子優先順序 | 運算子摘要


除號指定運算子 (/=)

將一變數除以運算式，並指定結果至該變數。

result /= expression

引數

result
任意數字變數。
expression
任意數字運算式。

附註

使用 /= 運算子和進行下列運算的結果完全一樣：

result = result / expression

基本條件

版本 1

請參閱

/ 運算子 | 運算子優先順序 | 運算子摘要


除號運算子 (/) (JScript)

JScript

除號運算子 (/)

將兩個運算子相除。

result = number1 / number2

引數

result
任意數字變數。
number1
任意數值運算式。
number2
任意數值運算式。

基本條件

版本 1

請參閱

/= 運算子 | 運算子優先順序 | 運算子摘要


in 運算子

測試物件的屬性是否存在。

result = property in object

引數

result
必要項。任意變數。
property
必要項。評估為字串運算式的運算式。
object
必要項。任意物件。

附註

in 運算子會檢查一個物件是否有加上名稱的屬性。它也會檢查這個物件的屬性類型是否是一系列屬性當中的一個。

基本條件

版本 1

請參閱

運算子優先順序 | 運算子摘要


遞增 (++) 和遞減 (—) 運算子

將變數遞增 1 或遞減 1。

語法 1

result = ++variable
result = --variable
result = variable++
result = variable--

語法 2

++variable
--variable
variable++
variable--

引數

result
任意變數。
variable
任意變數。

附註

遞增和遞減運算子為修改變數中儲存值的簡易方法。包含其中一個這類運算子的運算式值，取決於運算子是位於變數的前面或後面：

var j, k;
k = 2;
j = ++k;

j 被指定為 3，因為遞增是發生於評估運算式之前。

與下面的範例相比：

var j, k;
k = 2;
j = k++;

這裡 j 被指定為 2，因為遞增發生於評估運算式之後。

基本條件

版本 1

請參閱

運算子優先順序 | 運算子摘要


instanceof 運算子

傳回一個布林值，指出該物件是否為某個特殊類別的執行個體。

result = object instanceof class

引數

result
必要項。任何變數。
object
必要項。任何物件運算式。
class
必要項。任何一個已定義的物件類別。

附註

如果 object 是 class 的執行個體，則 instanceof 運算子會傳回 True；如果 object 不是指定之物件類別的執行個體或者 object 為 null，則會傳回 False。

範例

下面的範例說明 instanceof 運算子的用法。

function objTest(obj){
   var i, t, s = "";   // 建立變數。
   t = new Array();   // 建立一個陣列。
   t["Date"] = Date;   // 將陣列填滿。
   t["Object"] = Object;
   t["Array"] = Array;
      for (i in t)
      {
         if (obj instanceof t[i])   // 檢查obj的類別。
         {
            s += "obj is an instance of " + i + "\n";
         }
         else
         {
            s += "obj is not an instance of " + i + "\n";
         }
   }
   return(s);   // 傳回字串。
}

var obj = new Date();
response.write(objTest(obj));

基本條件

版本 5

請參閱

運算子優先順序 | 運算子摘要


左移指定運算子 (<<=)

將一個運算式中變數值特定的小數點左移，並指定結果至該變數。將運算式的位元向左移。

result <<= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用 <<= 運算子和進行下列運算的效果完全一樣：

result = result << expression

<<= 運算子會按照 expression 中指定的位元數，將 result 的位元向左移。例如：

var temp
temp = 14
temp <<= 2

temp 變數的值為 56，因為 14 (二進位格式為 00001110) 向左移兩個位元等於 56 (二進位格式為 00111000)。位移後的位元會補上 0。

基本條件

版本 1

請參閱

<< 運算子 | >> 運算子 | >>> 運算子 | 運算子優先順序 | 運算子摘要


AND 邏輯運算子 (&&)

進行兩個運算式的邏輯關連。

result = expression1 && expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

如果 (只要) 兩個運算式皆評估為 True，則 result 為 True。如果其中一個運算式評估為 False，則 result 為 False。

JScript 使用下列規則將非布林值轉換為布林值：

  • 所有的物件皆被視為 True。
  • 字串會被視為 False，如果 (只要) 它們是空字串。
  • null 和 undefined 會被視為 False。
  • 數字會被視為 False，如果 (只要) 它們是零。

基本條件

版本 1

請參閱

運算子優先順序 | 運算子摘要


NOT 邏輯運算子 (!)

對一個運算式進行邏輯否定。

result = !expression

引數

result
任意變數。
expression
任意運算式。

附註

下表說明如何決定 result。

如果expression 是 | 則result 是
True | False
False | True

所有的一元運算子，如 ! 運算子，都會依照下列方式評估運算式：

  • 若套用於 undefined 或 null 運算式，會產生執行階段錯誤。
  • 物件會轉換成字串。
  • 如果可以，字串會轉換成數字，否則會產生執行階段錯誤。
  • 布林值會被視為數字 (False 為 0，True 為 1)。

運算子會套用在結果數字中。

對 ! 運算子而言，若 expression 不是 0，result 就是 0。若 expression 是 0，result 就是 1。

基本條件

版本 1

請參閱

~ 運算子 | 運算子優先順序 | 運算子摘要


OR 邏輯運算子 (||)

進行兩個運算式的邏輯分離。

result = expression1 || expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

如果其中一個或兩個運算式都為 True，則 result 為 True。下表說明如何決定 result：

如果 expression1 是 | 且 expression2 是 | 則result 是
True | True | True
True | False | True
False | True | True
False | False | False

JScript 會利用下列規則，將非布林值轉換成布林值：

  • 所有物件皆視為 True。
  • 如果字串是空的，則會將其視為 False。
  • null 和 undefined 都會視為 False。
  • 如果數字是 0，則為 False。

基本條件

版本 1

請參閱

運算子優先順序 | 運算子摘要


模數指定運算子 (%=)

將變數值除以運算式的值，並指定餘數至該變數。

result %= expression

引數

result
任意變數。
expression
任意數值運算式。

附註

使用 %= 運算子和進行下列運算的效果完全一樣：

result = result % expression

基本條件

版本 1

請參閱

% 運算子 | 運算子優先順序 | 運算子摘要


模數運算子 (%)

將兩個運算式的值相除並傳回餘數。

result = number1 % number2

引數

result
任意數字變數。
number1
任意數值運算式。
number2
任意數值運算式。

附註

模數或餘數運算子會將 number1 除以 number2 (將浮點進位到整數)，並且只傳回餘數作為 result。例如，下面的運算式中，A (即 result) 等於 5。

A = 19 % 6.7

基本條件

版本 1

請參閱

%= 運算子 | 運算子優先順序 | 運算子摘要


乘號指定運算子 (*=)

將變數值乘以運算式的值，並指定結果至該變數。

result *= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用 *= 運算子和進行下列運算的效果完全一樣：

result = result * expression

基本條件

版本 1

請參閱

* 運算子 | 運算子優先順序 | 運算子摘要


乘號運算子 (*) (JScript)

JScript

乘號運算子 (*)

將兩個運算式的值相乘。

result = number1*number2

引數

result
任意變數。
number1
任意運算式。
number2
任意運算式。

基本條件

版本 1

請參閱

*= 運算子 | 運算子優先順序 | 運算子摘要


new 運算子

建立一個新物件。

new constructor[(arguments)]

引數

constructor
必要項。物件的建構元。如果建構元不含引數，可將括弧省略。
arguments
選擇項。傳到新物件建構元中的任意引數。

附註

new 運算子會執行下列任務：

  • 建立不含成員的物件。
  • 呼叫該物件的建構元，並將一個指標傳遞給剛建立的物件作為 this 指標。
  • 接著，建構元會依據傳遞給自己的引數來初始化物件。

以下為有效使用 new 運算子的範例。

my_object = new Object;
my_array = new Array();
my_date = new Date("Jan 5 1996");

基本條件

版本 1

請參閱

function 陳述式


右移指定運算子 (>>=)

將運算式裡變數值特定的小數點向右移，而且正負號維持不變，並指定結果至該變數。

result >>= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用 >>= 運算子和進行下列運算的效果完全一樣：

result = result >> expression

>>= 運算子會按照 expression 中指定的位元數，將 result 的位元向右移。result 的正負號位元是用來從左邊補上數字，而被右移的數字將會捨去。例如評估下列程式碼之後，temp 的值會變成 -4：-14 (二進位格式為 11110010) 向右移兩個位元等於 -4 (二進位格式為 11111100)。

var temp
temp = -14
temp >>= 2

基本條件

版本 1

請參閱

<< 運算子 | >> 運算子 | >>> 運算子 | 運算子優先順序 | 運算子摘要


減號指定運算子 (-=)

將變數減去運算式的值，並指定結果至該變數。

result -= expression

引數

result
任意數字變數。
expression
任意數值運算式。

附註

使用 -= 運算子和進行下列運算的效果完全一樣：

result = result - expression

基本條件

版本 1

請參閱

- 運算子 | 運算子優先順序 | 運算子摘要


減號運算子 (-) (JScript)

JScript

減號運算子 (-)

將兩個運算式相減求出一個運算式的負值。

語法 1

result = number1 - number2

語法 2

-number

引數

result
任意數字變數。
number
任意數值運算式。
number1
任意數值運算式。
number2
任意數值運算式。

附註

在語法 1 中的 - 運算子是一個算術減號運算子，可用以求出兩個數字的差。語法 2 中的 - 運算子則是作為一元負數運算子，代表運算式的負值。

語法 2 和所有的一元負數運算子一樣，都會依下列方式評估：

  • 若套用到 undefined 或 null 運算式，會產生執行階段錯誤。
  • 物件會被轉換成字串。
  • 如果可以，字串會被轉換成數字，否則會產生執行階段錯誤。
  • 布林值會被視為數字 (False 為 0，True 為 1)。

運算子會套用到結果數字中。 在語法 2 中，若結果數字不是 0，則 result 等於正負號相反的結果數字。若結果數字是 0，則 result 為 0。

基本條件

版本 1

請參閱

-= 運算子 | 運算子優先順序 | 運算子摘要


typeof 運算子

傳回一個字串，指出運算式的資料型態。

typeof[(]expression[)] ;

expression 引數是要取得型態資訊的任意運算式。

附註

typeof 運算子會以字串傳回型態資訊。typeof 可能傳回的六個值分別是：number、string、boolean、object、function 和 undefined。

在 typeof 語法中的括弧可有可無。

基本條件

Version 1

請參閱

運算子優先順序 | 運算子摘要


不帶正負號的右移運算子 (>>>)

對運算式中的位元進行不帶正負號的右移。

result = expression1 >>> expression2

引數

result
任意變數。
expression1
任意運算式。
expression2
任意運算式。

附註

>>> 運算子會按照 expression2 中指定的位元數，將 expression1 中的位元向右移。0 會從左邊補進來，而被右移的數字將會捨去。例如：

var temp
temp = -14 >>> 2

temp 變數的值是 1073741820，因為 -14 (二進位格式為 11111111 11111111 11111111 11110010) 向右移兩個位元等於 1073741820 (二進位格式為 00111111 11111111 11111111 11111100)。

基本條件

版本 1

請參閱

>>>= 運算子 | << 運算子 | >> 運算子 | 運算子優先順序 | 運算子摘要


不帶正負號的右移指定運算子 (>>>=)

對變數中的位元進行不帶正負號的右移，並指定結果至該變數。

result >>>= expression

引數

result
任意變數。
expression
任意運算式。

附註

使用 >>>= 運算子和進行下列運算的效果完全一樣：

result = result >>> expression

>>>= 運算子會按照 expression 中指定的位元數，將result 的位元向右移。0 會從左邊補進來，而被右移的數字將會捨去。例如：

var temp
temp = -14
temp >>>= 2

temp 變數的值是 1073741820，因為 -14 (二進位格式為 11111111 11111111 11111111 11110010) 向右移兩個位元等於 1073741820 (二進位格式為 00111111 11111111 11111111 11111100)。

基本條件

版本 1

請參閱

>>> 運算子 |<< 運算子 | >> 運算子 | 運算子優先順序 | 運算子摘要


void 運算子

防止運算式傳回一個值。

void expression

expression 引數為任何有效的 JScript 運算式。

附註

void 運算子會評估它的運算式並傳回 undefined。當您要評估運算式但不要讓 Script 的其餘部分使用該結果時，此運算子便很有用。

基本條件

版本 2

請參閱

運算子優先順序 | 運算子摘要


JScript 屬性

下列表格列出了 JScript 屬性。

說明 | 語言項目
傳回 9 個最近在模式比對時找到的部份。 | $1...$9 屬性
傳回引數給目前正在執行的函數物件。 | arguments 屬性
傳回一個呼叫目前函數的函數引用。 | caller 屬性
指定建立物件的函數。 | constructor 屬性
傳回或設定與錯誤相關的描述性字串。 | description 屬性
傳回歐拉常值 (Euler's constant) ，即自然對數的底數。 | E 屬性
傳回一個字元位置，代表搜尋字串中第一個符合的位置。 | index 屬性
傳回一個 Number.POSITIVE_INFINITY 的初值。 | Infinity 屬性
依據所執行的通用運算式搜尋傳回字串。 | input 屬性
傳回字元位置，代表搜尋字串中下一個符合的位置。 | lastIndex 屬性
傳回陣列中定義之最高元素索引值加 1 的整數值。 | length 屬性 (Array)
傳回為函數定義的引數個數。 | length 屬性 (Function)
傳回 String 物件的長度。 | length 屬性 (String)
傳回 2 的自然對數。 | LN2 屬性
傳回 10 的自然對數。 | LN10 屬性
傳回以 2 為基數的 e 對數，也就是歐拉常值 (Euler's constant)。 | LOG2E 屬性
傳回以 10 為基數的 e 對數，也就是歐拉常值 (Euler's constant)。 | LOG10E 屬性
傳回能在 JScript 中表示的最大值。 | MAX_VALUE 屬性
傳回能在 JScript 中表示最接近零的數字。 | MIN_VALUE 屬性
傳回特殊值 NaN，以指出運算式不是一個數字。 | NaN 屬性 (Global)
一個特殊值，可指出算術運算式的傳回值不是一個數字。 | NaN 屬性 (Number)
傳回一個能在 JScript 中表示、且比最大負數 (-Number.MAX_VALUE) 還要小的值。 | NEGATIVE_INFINITY 屬性
傳回或設定與錯誤相關的數值。 | number 屬性
傳回圓周與直徑的比率，大約是 3.141592653589793。 | PI 屬性
傳回能在 JScript 中表示且大於最大數 (Number.MAX_VALUE) 的值。 | POSITIVE_INFINITY 屬性
傳回一個物件類別的原型引用。 | prototype 屬性
傳回通用運算式的模式。 | source 屬性
傳回 0.5 的平方根，或是 1 除以 2 的平方根。 | SQRT1_2 屬性
傳回 2 的平方根。 | SQRT2 屬性


JScript

0...n 屬性

傳回由執行中函數的 arguments 屬性所傳回的 arguments 物件中的個別引數之實際值。

[function.]arguments[[0|1|2|...|n]]

引數

function
選擇項。目前正在執行的 Function 物件名稱。
0, 1, 2, ... n
必要項。在 0 到 n 的範圍內的非負整數，其中 0 代表第一個引數，n 代表最後一個引數。最後一個引數 n 的值是 arguments.length-1。

附註

0 . . . n 屬性傳回的值是傳給執行中函數的實際值。雖然不是實際的引數陣列，但組成 arguments 物件的個別引數的存取方式與陣列元素的存取方式相同。

範例

以下範例示範 arguments 物件的 0 . . . n 屬性用法。為充分了解範例起見，傳送一或多個引數給函數：

function ArgTest(){
   var s = "";
   s += "個別的引數是: "
   for (n=0; n< arguments.length; n++){
      s += ArgTest.arguments[n];
      s += " ";
   }
   return(s);
}
print(ArgTest(1, 2, "hello", new Date()));

基本條件

版本 5.5

請參閱

適用於：arguments 物件 | Function 物件


$1...$9 屬性

傳回 9 個最近在模式比對時找到的部份。具有唯讀性質。

RegExp.$n

引數

RegExp
固定為全域 RegExp 物件。

n

n 引數是介於 1 和 9 之間的數字。

附註

只要括號中的項目比對成功，$1...$9 屬性的值就會修改。在通用運算式 (regular expression) 的模式中可指定任意數量個加括號的子字串，但只會儲存最近的 9 個。

下面的範例說明 $1...$9 屬性的用法：

function matchDemo(){
   var s;
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBdbsbdbdz";
   var arr = re.exec(str);
   s = "$1 contains: " + RegExp.$1 + "\n";
   s += "$2 contains: " + RegExp.$2 + "\n";
   s += "$3 contains: " + RegExp.$3;
   return(s);
}

基本條件

版本 1

請參閱

RegExp 物件屬性 | 通用運算式語法

適用於：RegExp 物件


arguments 屬性

傳回引數給目前正在執行的函數物件。

function.arguments

function 引數為目前所執行函數的名稱，不能省略。

附註

此 arguments 屬性能讓函數以較適當的方式來處理各種數量的引數。arguments物件中的 length 屬性包含傳遞給函數的引數個數。每一個包含在arguments物件中的引數，都可以存取陣列元素的方式來存取。

範例

下面的範例說明 arguments 屬性的用法：

function ArgTest(){
   var i, s, numargs = arguments.length;
   s = numargs;
   if (numargs < 2)
      s += " argument was passed to ArgTest. It was ";
   else
      s += " arguments were passed to ArgTest. They were " ;
   for (i = 0; i < numargs; i++)
      {
         s += arguments[i] + " ";
      }
   return(s);
}

基本條件

版本 2

請參閱

Arguments 物件 | function 陳述式

適用於：Function 物件


callee 屬性

傳回正在執行的 Function 物件，也就是指定的 Function 物件的主體文字。

[function.]arguments.callee

選擇性的 function 引數正是目前執行中的 Function 物件名稱。

附註

callee 屬性是 arguments 物件的成員，只有在執行相關的函數時才能取得。

callee 屬性的起始值是正在執行的 Function 物件。這使得匿名函數可以遞回呼叫。

範例

function factorial(n){
  if (n <= 0)
  return 1;
  else
    return n * arguments.callee(n - 1)
}
print(factorial(3));

基本條件

版本 5.5

請參閱

適用於：arguments 物件 | Function 物件


caller 屬性

傳回一個呼叫目前函數的函數引用。

functionName.caller

functionName 物件是任意執行中函數的名稱。

附註

caller 屬性只會定義給正在執行的函數。如果從 JScript 程式的最高階層級來呼叫函數，則 caller 會包含null。

如果 caller 屬性使用於字串內容中，則其結果與functionName.toString 相同，也就是說，會顯示出函數的解譯文字。

下面的範例說明 caller 屬性的用法：

function CallLevel(){
   if (CallLevel.caller == null)
      return("CallLevel was called from the top level.");
   else
      return("CallLevel was called by another function.");
}

基本條件

版本 2

請參閱

function 陳述式

適用於：Function 物件


constructor 屬性

指定建立物件的函數。

object.constructor

所需的object 為物件或函數的名稱。

附註

constructor 屬性為每個具有原型宣告之物件的原型成員。這包含所有的內建 JScript 物件 (除了 Global 和 Math 物件之外)。constructor 屬性包含建構該特殊物件之執行個體的函數引用。 例如：

x = new String("Hi");
if (x.constructor == String)
      // 採取一些方式(條件將為 true)。

或

function MyFunc {
   // 函數主體。
}

y = new MyFunc;
if (y.constructor == MyFunc)
      //採取一些方式(條件將為 true)。

基本條件

版本 2

請參閱

prototype 屬性

適用於：Array 物件 | Boolean 物件 | Date 物件 | Function 物件 | Math 物件 | Number 物件 | Object 物件 | String 物件


description 屬性

傳回或設定與錯誤相關的描述性字串。

object.description [= stringExpression]

引數

object
必要項。任何的 Error 物件執行個體。
stringExpression
選擇項。包含錯誤描述的字串運算式。

附註

description 屬性包含與錯誤相關的錯誤訊息字串。請利用這個屬性所包含的值，來警告使用者已發生無法或無意處理的錯誤。

下面的範例說明 description 屬性的用法：

try
   x = y   // 導致錯誤發生。
catch(var e){   // 建立區域變數e。
   document.write(e)   // 列印"[object Error]"。
   document.write((e.number & 0xFFFF))   // 列印5009。
   document.write(e.description)   // 列印"'y' 為 undefined"。
}

基本條件

版本 5

請參閱

number 屬性

適用於：Error 物件


E 屬性

傳回歐拉常值 (Euler's constant) ，即自然對數的底數。E 屬性大約等於 2.718。

numVar = Math.E

基本條件

版本 1

請參閱

exp 方法 | Math 物件屬性

適用於：Math 物件


global 屬性 (JScript)

JScript

global 屬性

傳回布林值，該布林值指示通用運算式所用全域旗標 (g) 的狀態。預設值是 false。唯讀。

rgExp.global

必要的 rgExp 引用是 Regular Expression 物件的執行個體。

附註

如果已設定通用運算式的全域旗標，global 屬性會傳回 true，否則傳回 false。

若使用全域旗標，表示搜尋功能應該在搜尋字串中將發生的每一次比對模式找出來，而不只是第一次。這也稱為全域模式比對。

範例

以下範例示範 global 屬性的用法。如果傳送 "g" 給以下函數，所有出現的 "the" 這個字都會被 "a" 這個字取代。請注意，字串開始處的 "The" 並不會被取代。這是因為第一個字母是大寫，因此不符合 "the" 中的小寫 "t"。

這個函數以表格方式傳回字串，顯示與可允許的通用運算式旗標 g、i 和 m 相關的屬性狀況。這個函數也會傳回全部取代過後的字串。

function RegExpPropDemo(flag){
   if (flag.match(/[^gim]/))        //檢查旗標以確認。
     return("Flag specified is not valid");
   var r, re, s                    //宣告變數。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = new RegExp("the",flag);    //指定要搜尋的模式。
   r = ss.replace(re, "a");        //以"a"取代"the" 。
   s = "Regular Expression property values:\n\n"
   s += "global  ignoreCase  multiline\n"
   if (re.global)                  //測試全域旗標。
     s += " True     ";
   else
     s += "False     ";
   if (re.ignoreCase)              //測試ignoreCase 旗標。
     s += " True  ";
   else
     s += "False  ";
   if (re.multiline)               //檢查多行旗標。
     s += "     True     ";
   else
     s += "     False   ";
   s += "\n\nThe resulting string is:\n\n" + r;
   return(s);                      //傳回取代後的字串。
}

基本條件

版本 5.5

請參閱

ignoreCase 屬性 | multiline 屬性 | 通用運算式語法

適用於：RegExp 物件


hasOwnProperty 方法

傳回布林值，指示物件是否具有指定名稱的屬性。

object.hasOwnProperty(proName)

引數

object
必要項。物件的執行個體。
proName
必要項。屬性名稱的字串值。

附註

如果 object 具有指定名稱的屬性，hasOwnProperty 方法傳回 true，否則傳回 false。這個方法不會檢查屬性是否存在物件的原型鏈結中；屬性必須是物件本身的成員。

範例

在以下範例中，所有 String 物件共用一個 split 方法。以下程式碼將列出 false 和 true。

var s = new String("JScript");
print(s.hasOwnProperty("split"));
print(String.prototype.hasOwnProperty("split"));

基本條件

版本 5.5

請參閱

in 運算子

適用於：Object 物件


ignoreCase 屬性

傳回布林值，該布林值指示通用運算式所用 ignoreCase 旗標 (i) 的狀態。預設值 false。唯讀。

rgExp.ignoreCase

必要的 rgExp 引用是 RegExp 物件的執行個體。

附註

如果已設定通用運算式的 ignoreCase 旗標，ignoreCase 屬性會傳回 true，否則傳回 false。

若使用 ignoreCase 旗標，表示搜尋功能在搜尋字串內比對模式時應該忽略大小寫。

範例

以下範例示範 ignoreCase 屬性的用法。如果傳送 "i" 給以下函數，所有出現的 "the" 這個字都會被 "a" 這個字取代，包括開頭的 "The"。這是因為若已設定 ignoreCase 旗標，搜尋功能就會忽略大小寫。所以就模式比對而言，"T" 跟 "t" 是一樣的。

這個函數以表格方式傳回字串，顯示與可允許的一般運算式旗標 g、i 和 m 相關的屬性狀況。這個函數也會傳回全部取代過後的字串。

function RegExpPropDemo(flag){
   if (flag.match(/[^gim]/))        //檢查旗標以確認。
     return("Flag specified is not valid");
   var r, re, s                    //宣告變數。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = new RegExp("the",flag);    //指定搜尋的模型。
   r = ss.replace(re, "a");        //以"a"取代"the"。
   s = "Regular Expression property values:\n\n"
   s += "global  ignoreCase  multiline\n"
   if (re.global)                  //測試全域旗標。
     s += " True     ";
   else
     s += "False     ";
   if (re.ignoreCase)              //檢查 ignoreCase 旗標。
     s += " True  ";
   else
     s += "False  ";
   if (re.multiline)               //檢查多行旗標。
     s += "     True     ";
   else
     s += "     False   ";
   s += "\n\nThe resulting string is:\n\n" + r;
   return(s);                      //傳回取代後的字串。
}

基本條件

版本 5.5

請參閱

global 屬性 | multiline 屬性 | 通用運算式語法

適用於：RegExp 物件


index 屬性

傳回一個字元位置，代表搜尋字串中第一個符合的位置。傳回值為唯讀性質。

RegExp.index

跟屬性相關聯的物件一律是全域 RegExp 物件。

附註

index 屬性從0開始編起，如果沒有搜尋成功，初始值就是 -1。每當一個搜尋成功，值就會改變。

範例

以下範例說明 index 屬性的用法。此功能重複一個字串搜尋，並顯示出字串中每一個字的index和 lastIndex 值。

function RegExpTest(){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  if (ver >= 5.5){
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g;
    var arr;
    while ((arr = re.exec(src)) != null)
       print(arr.index + "-" + arr.lastIndex + "\t" + arr);
  }
  else{
    alert("You need a newer version of JScript for this to work");
  }

}

基本條件

版本 3

請參閱

RegExp 物件屬性 | 通用運算式語法

適用於：RegExp 物件


Infinity 屬性

傳回一個 Number.POSITIVE_INFINITY 的初值。

Infinity

附註

Infinity 屬性是 Global 物件的一個成員，而且在初始化 Scripting 引擎時才可以使用。

基本條件

版本3

請參閱

POSITIVE_INFINITY 屬性 | NEGATIVE_INFINITY 屬性

適用於：Global 物件


input 屬性 ($_)

JScript

input 屬性($_)

依據所執行的通用運算式搜尋傳回字串。屬於唯讀性質。

RegExp.input

與屬性相關聯的物件一律是全域 RegExp 物件。

附註

只要變更搜尋字串，input 屬性的值就會加以修改。

下面的範例說明 input 屬性的用法：

function inputDemo(){
   var s;
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBdbsbdbdz";
   var arr = re.exec(str);
   s = "The string used for the match was " + RegExp.input;
   return(s);
}

基本條件

版本 3

請參閱

RegExp 物件屬性 | 通用運算式語法

適用於：RegExp 物件


isPrototypeOf 方法

傳回布林值，指示物件是不是存在另一個物件的原型鏈結中。

object1.isPrototypeOf(object2)

引數

object1
必要項。物件的執行個體。
object2
必要項。即將檢查其原型鏈結的另一個物件。

附註

如果 object2 的原型鏈結中有 object1，isPrototypeOf 方法即傳回 true。原型鏈結是用來讓同一種物件型別的執行個體共用功能。如果 object2 不是物件，或 object1 不在 object2 的原型鏈結中，isPrototypeOf 方法即傳回 false。

範例

以下範例示範 isPrototypeof 方法的用法。

function test(){
  var re = new RegExp();                        //使變數初始化。
  return (RegExp.prototype.isPrototypeOf(re));  //傳回True。
}

基本條件

版本 5.5

請參閱

適用於：Object 物件


lastIndex 屬性

傳回字元位置，代表搜尋字串中下一個符合的位置。

RegExp.lastIndex

與屬性相關聯的物件一律是全域 RegExp 物件。

附註

lastIndex 屬性的初值為0，亦即第一個字元的索引是 0。如果未搜尋到符合項目，初始值就從-1開始。只要比對成功，它的值就會更改。

lastIndex 屬性可由 RegExp 物件的 exec 和 test 方法，以及 String 物件的 match、replace 和 split 方法加以修改。

以下為 lastIndex 值的適用原則：

  • 如果比對失敗，lastIndex 會設為 -1。
  • 如果 lastIndex 大於字串的長度，test 和 exec 會失敗，且 lastIndex 會設為 -1。
  • 如果 lastIndex 等於字串的長度，通用運算式會檢查模式是否為空字串。否則比對將失敗，且 lastIndex 會重設為 -1。
  • 否則，lastIndex 會設為最近一次比對成功項目的下一個位置。

範例

以下範例說明 lastIndex 屬性的用法。這個功能會反覆執行一個字串搜尋，並為字串中的每個字複製出index 及lastIndex 值。

function RegExpTest(){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  if (ver >= 5.5){
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g;
    var arr;
    while ((arr = re.exec(src)) != null)
       print(arr.index + "-" + arr.lastIndex + "\t" + arr);
  }
  else{
    alert("You need a newer version of JScript for this to work");
  }
}

基本條件

版本 3

請參閱

RegExp 物件屬性 | 通用運算式語法

適用於：RegExp 物件


leftContext 屬性 ($`)

傳回從搜尋字串最開始一直到上一次符合的前一個位置的字元。唯讀。

RegExp.leftContext

與這個屬性相關的物件一定是全域的 RegExp 物件。

附註

leftContext 屬性的起始值是空白的字串。每次比對成功時，leftContext 屬性的值就會改變。

範例

以下範例示範 leftContext 屬性的用法：

function matchDemo(){
   var s;                                //宣告變數。
   var re = new RegExp("d(b+)(d)","ig"); //通用運算式模式。
   var str = "cdbBdbsbdbdz";             //搜尋字串。
   var arr = re.exec(str);               //執行搜尋。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            //傳回結果。
}
document.write(matchDemo());

基本條件

版本 5.5

請參閱

$1...$9 屬性 | index 屬性 | input 屬性 | lastIndex 屬性 | lastMatch 屬性 | lastParen 屬性 | rightContext 屬性

適用於：RegExp 物件


length 屬性 (引數)

傳回由呼叫者傳給函數的實際引數個數。

[function.]arguments.length

選擇性的 function 引數正是目前執行中的 Function 物件名稱。

附註

Scripting 引擎會在開始執行函數時，將 arguments 物件的 length 屬性初始化，並設成傳給 Function 物件的實際引數個數。

範例

以下範例示範 arguments 物件的 length 屬性用法。為充分了解範例起見，因此多傳送幾個引數給預期 2 個引數的函數：

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = arguments.length;
   var expargs = ArgTest.length;
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   return(s);
}

基本條件

版本 5.5

請參閱

arguments 屬性 | length 屬性 (Array) | length 屬性 (String)

適用於：arguments 物件 | Function 物件


length 屬性 (Array)

傳回陣列中定義之最高元素索引值加 1 的整數值。

numVar = arrayObj.length

引數

numVar
必要項。任意數值變數。
arrayObj
必要項。任意Array 物件。

附註

因為陣列中的元素不必是連續的，所以 length 屬性不一定是陣列中的元素個數。例如，在下面的陣列定義中，my_array.length 的值為 7 而不是 2︰

var my_array = new Array( );
my_array[0] = "Test";
my_array[6] = "Another Test";

如果您指定給 length 屬性的值小於之前的指定值，就會截斷此陣列，而且任何陣列索引值等於或大於 length 屬性新值的元素也都會喪失。

如果您指定給 length 屬性的值大於之前的指定值，就會擴充此陣列，而且任何新建立的元件值都是undefined。

下面的範例說明 length 屬性的用法︰

function LengthDemo(){
   var a;
   a = new Array(0,1,2,3,4);
   return(a.length);
}

基本條件

版本 2

請參閱

length 屬性 (Function) | length 屬性 (String)

適用於：Array 物件


lastMatch 屬性 ($&)

從任何通用運算式搜尋傳回最後一個相符的字元。唯讀。

RegExp.lastMatch

與這個屬性相關的物件一定是全域的 RegExp 物件。

附註

lastMatch 屬性的起始值是空白的字串。每次比對成功時，lastMatch 屬性的值就會改變。

範例

以下範例示範 lastMatch 屬性的用法：

function matchDemo(){
   var s;                                //宣告變數。
   var re = new RegExp("d(b+)(d)","ig"); //通用運算式模式。
   var str = "cdbBdbsbdbdz";             //搜尋字串。
   var arr = re.exec(str);               //執行搜尋。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            //傳回結果。
}
document.write(matchDemo());

基本條件

版本 5.5

請參閱

$1...$9 屬性 | index 屬性 | input 屬性 | lastIndex 屬性 | lastParen 屬性 | leftContext 屬性 | rightContext 屬性

適用於：RegExp 物件


lastParen 屬性 ($+)

傳回任何通用運算式搜尋 (如果有的話) 中最後一次括在括弧裏的相符次項目。唯讀。

RegExp.lastParen

與這個屬性相關的物件一定是全域的 RegExp 物件。

附註

lastParen 屬性的起始值是空白的字串。每次比對成功時，lastParen 屬性的值就會改變。

範例

以下範例示範 lastParen 屬性的用法：

function matchDemo(){
   var s;                                //宣告變數。
   var re = new RegExp("d(b+)(d)","ig"); //通用運算式模式。
   var str = "cdbBdbsbdbdz";             //搜尋字串。
   var arr = re.exec(str);               //執行搜尋。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            //傳回結果。
}
document.write(matchDemo());

基本條件

版本 5.5

請參閱

$1...$9 屬性 | index 屬性 | input 屬性 | lastIndex 屬性 | lastMatch 屬性 | leftContext 屬性 | rightContext 屬性

適用於：RegExp 物件


length 屬性 (Function)

傳回為函數定義的引數個數。

functionName.length

所需的functionname 是函數的名稱。

附註

當建立函數的執行個體時，函數中的 length 屬性是由 Scripting 引擎初始化為此函數定義中的引數個數。

當函數使用與其 length 屬性不同的引數個數來呼叫時，所發生的問題視該函數而定。

下面的範例說明 length 屬性的用法：

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = ArgTest.arguments.length;
   var expargs = ArgTest.length;
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   return(s);
}

基本條件

版本 2

請參閱

arguments 屬性 | length 屬性 (Array) | length 屬性 (String)

適用於：Function 物件


length 屬性 (String)

傳回 String 物件的長度。

strVariable.length
"String Literal".length

附註

length 屬性包含一個整數，可指出 String 物件中的字元數。String 物件中最後一個字元的 length 索引是 -1。

基本條件

版本 1

請參閱

length 屬性 (Array) | length 屬性 (Function) | String 物件方法 | String 物件屬性

適用於：String 物件


LN10 屬性

傳回 10 的自然對數。

numVar = Math.LN10

附註

LN10 屬性大約等於 2.302。

基本條件

版本 1

請參閱

Math 物件屬性

適用於：Math 物件


LN2 屬性

傳回 2 的自然對數。

numVar = Math.LN2

語法

LN2 屬性大約等於 0.693。

基本條件

版本 1

請參閱

Math 物件屬性

適用於：Math 物件


LOG10E 屬性

傳回以 10 為基數的 e 對數，也就是歐拉常值 (Euler's constant)。

varName = Math.LOG10E

附註

LOG10E 屬性 (一個常值) 大約等於 0.434。

基本條件

版本 1

請參閱

Math 物件屬性

適用於：Math 物件


LOG2E 屬性

傳回以 2 為基數的 e 對數，也就是歐拉常值 (Euler's constant)。

var varName
varName = objName.LOG2E

引數

RegExp
一律是全域RegExp 物件。
n
從1 到9的任意整數。

附註

LOG2E 屬性 (一個常值) 大約等於 1.442。

基本條件

版本 1

請參閱

Math 物件屬性

適用於：Math 物件


MAX_VALUE 屬性

傳回能在 JScript 中表示的最大值。大約等於 1.79E+308。

Number.MAX_VALUE

number 引數為 Number 物件。

附註

Number 物件不一定要在存取 MAX_VALUE 屬性之前建立。

基本條件

版本 2

請參閱

MIN_VALUE 屬性 | NaN 屬性 | NEGATIVE_INFINITY 屬性 | POSITIVE_INFINITY 屬性 | toString 方法

適用於：Number 物件


message 屬性

傳回錯誤訊息的字串。

errorObj.message

引數

errorObj
必要項。Error 物件的執行個體。

附註

message 屬性是內含顯示給使用者之錯誤訊息的字串。它包含的資訊跟 description 屬性一樣。

範例

以下範例會導致丟出 TypeError 例外狀況，並顯示錯誤名稱及其訊息。

try {
  // 'null' 不是正確的物件
  null.doSomething();
}
catch(e){
  print(e.name + ": " + e.message);
  print(e.number + ": " + e.description);
}

基本條件

版本 5.5

請參閱

description 屬性 | name 屬性

適用於：Error 物件


MIN_VALUE 屬性

傳回能在 JScript 中表示最接近零的數字。大約等於 5.00E-324。

Number.MIN_VALUE

number 引數為 Number 物件。

附註

Number 物件不一定要在存取 MIN_VALUE 屬性之前建立。

基本條件

版本 2

請參閱

MAX_VALUE 屬性 | NaN 屬性 | NEGATIVE_INFINITY 屬性 | POSITIVE_INFINITY 屬性 | toString 方法

適用於：Number 物件


multiline 屬性

傳回布林值，該布林值指示通用運算式所用 multiline 旗標 (m) 的狀態。預設值 false。唯讀。

rgExp.multiline

必要的 rgExp 引用是 RegExp 物件的執行個體。

附註

如果已設定通用運算式的 multiline 旗標，multiline 屬性會傳回 true，否則傳回 false。如果是以 m 旗標建立通用運算式物件，multiline 屬性會是 true。

如果 multiline 是 false，"^" 會比對字串的開始位置，而 "$" 則會比對字串的結束位置。如果 multiline 是 true，"^" 會比對字串的開始位置，以及 "\n" 或 "\r" 後面的位置；而 "$" 則會比對字串的結束位置，以及 "\n" 或 "\r" 前面的位置。

範例

以下範例示範 multiline 屬性的行為方式。如果傳送 "m" 給以下函數，"while" 這個字會被 "and" 這個字取代。這是因為已設定 multiline 旗標，而且 "while" 這個字發生在換行字元後、一行的開始處。multiline 旗標讓搜尋功能可對多行字串進行。

這個函數以表格方式傳回字串，顯示可允許的一般運算式旗標 g、i 和 m 的狀況。這個函數也會傳回全部取代過後的字串。

function RegExpPropDemo(flag){
   if (flag.match(/[^gim]/))          //檢查旗標以確認。
     return("Flag specified is not valid");
   var r, re, s                       //宣告變數。
   var ss = "The man hit the ball with the bat.";
   ss += "\nwhile the fielder caught the ball with the glove.";
   re = new RegExp("^while",flag);    //指定搜尋字串。
   r = ss.replace(re, "and");         //以"a"取代"the"。
   s = "Regular Expression property values:\n\n"
   s += "global  ignoreCase  multiline\n"
   if (re.global)                     //測試全域旗標。
     s += " True     ";
   else
     s += "False     ";
   if (re.ignoreCase)                 //檢查ignoreCase 旗標。
     s += " True  ";
   else
     s += "False  ";
   if (re.multiline)                  //檢查多行字串。
     s += "     True     ";
   else
     s += "     False   ";
   s += "\n\nThe resulting string is:\n\n" + r;
   return(s);                         //傳回取代字串。
}

基本條件

版本 5.5

請參閱

global 屬性 | ignoreCase 屬性 | 通用運算式語法

適用於：RegExp 物件


name 屬性

傳回錯誤的名稱。

errorObj.name

引數

errorObj
必要項。Error 物件的執行個體。

附註

name 屬性會傳回錯誤的名稱或例外狀況型別。發生執行期錯誤時，屬性會設成下列原生例外狀況型別之一：

例外狀況型別 | 意義
ConversionError | 試圖將物件轉換成無法轉換的型別時，就會發生這個錯誤。
RangeError | 提供給函數的引數超出允許的範圍時，就會發生這個錯誤。例如，建構 Array 物件時，若試圖使用不是有效的正整數做長度，就會發生這個錯誤。
ReferenceError | 偵測到無效引用時，就會發生這個錯誤。例如，如果預期的引用是 null，就會發生這個錯誤。
RegExpError | 通用運算式發生編譯錯誤時，就會發生這個錯誤。然而，通用運算式一旦經過編譯後，就不可能發生這個錯誤。例如，如果宣告通用運算式所用的模式語法無效，或旗標不是 i、g 或 m，或同一個旗標出現不止一次，就會發生這樣的例子。
SyntaxError | 剖析原始碼文字，而該原始碼文字不符合正確語法時，就會發生這個錯誤。例如，如果呼叫 eval 函數時所用的引數不是有效的程式文字，就會發生這樣的例子。
TypeError | 只要運算元實際的型別不符合預期型別時，就會發生這個錯誤。例如，如果對非物件的東西呼叫函數，或這個東西不支援該呼叫，就會發生這樣的例子。
URIError | 偵測到非法的 Uniform Resource Indicator (URI) 時，就會發生這個錯誤。例如，在被編碼或解碼的字串中發現非法的字元時，就會發生這個錯誤。

範例

以下範例會導致 TypeError 例外狀況丟出，並顯示錯誤名稱及其訊息。

try {
  // 'null' 不是正確的物件
  null.doSomething();
}
catch(e){
  print(e.name + ": " + e.message);
  print(e.number + ": " + e.description);
}

基本條件

版本 5.5

請參閱

description 屬性 | message 屬性 | number 屬性

適用於：Error 物件


NaN 屬性

一個特殊值，可指出算術運算式的傳回值不是一個數字。

Number.NaN

number 引數為 Number 物件。

附註

Number 物件不一定會在存取 NaN 屬性之前建立。

NaN 不等於任何數值 (包含其本身在內)。若要檢驗一個值是否相當於 NaN，請使用 isNaN 函數。

基本條件

版本 2

請參閱

isNaN 方法 | MAX_VALUE 屬性 | MIN_VALUE 屬性 | NEGATIVE_INFINITY 屬性 | POSITIVE_INFINITY 屬性 | toString 方法

適用於：Number 物件


NaN 屬性 (Global)

傳回特殊值 NaN，以指出運算式不是一個數字。

NaN

附註

NaN 屬性 (不是一個數字) 是 Global 物件的一個成員，而且在初始化 Scripting 引擎時才可以使用。

基本條件

版本 3

請參閱

isNaN 方法

適用於：Global 物件


NEGATIVE_INFINITY 屬性

傳回一個能在 JScript 中表示、且比最大負數 (-Number.MAX_VALUE) 還要小的值。

Number.NEGATIVE_INFINITY

number 引數為 Number 物件。

附註

Number 物件不一定要在存取 NEGATIVE_INFINITY 屬性之前建立。

JScript 會將 NEGATIVE_INFINITY 值顯示為負無限大。此值在數學上為無限大。

基本條件

版本 2

請參閱

MAX_VALUE 屬性 | MIN_VALUE 屬性 | NaN 屬性 | POSITIVE_INFINITY 屬性 | toString 方法

適用於：Number 物件


number 屬性

傳回或設定與錯誤相關的數值。Error 物件的預設屬性為 number。

object.number [= errorNumber]

引數

object
任何的 Error 物件執行個體。
errorNumber
代表這個錯誤的整數。

附註

錯誤代碼是一個 32 位元的值。前 16 個位元代表設備代碼 (facility code)，後 16 個位元才是實際的錯誤代碼。

下面的範例說明 number 屬性的用法：

try
   x = y   //導致錯誤發生。
catch(var e){   //建立區域變數 e。
   document.write(e)   // 列印 "[object Error]".
   document.write(e.number>>16 & 0x1FFF)   //列印 "[object Error]"。
   document.write(e.number & 0xFFFF)   // 列印Prints 5009，錯誤代碼。
   document.write(e.description)   //列印 "'y' 為 undefined"。
}

基本條件

版本 5

請參閱

description 屬性 | message 屬性 | name 屬性

適用於：Error 物件


PI 屬性

傳回圓周與直徑的比率，大約是 3.141592653589793。

numVar = Math.PI

語法

PI 屬性 (常值) 大約等於 3.14159。

基本條件

版本 1

請參閱

Math 物件屬性

適用於：Math 物件


POSITIVE_INFINITY 屬性

傳回能在 JScript 中表示且大於最大數 (Number.MAX_VALUE) 的值。

Number.POSITIVE_INFINITY

number 引數為 Number 物件。

附註

Number 物件不一定要在存取 POSITIVE_INFINITY 屬性之前建立。

JScript 會將 POSITIVE_INFINITY 的值顯示為無限大。此值在數學上為無限大。

基本條件

版本 2

請參閱

MAX_VALUE 屬性 | MIN_VALUE 屬性 | NaN 屬性 | NEGATIVE_INFINITY 屬性 | toString 方法

適用於：Number 物件


propertyIsEnumerable 屬性

傳回布林值，該布林值指示指定的屬性是不是物件的一部分，以及是否可以列舉。

object.propertyIsEnumerable(proName)

引數

object
必要項。物件的執行個體。
proName
必要項。屬性名稱的字串值。

附註

如果 proName 存在 object 中，而且可以使用 For�In 迴圈加以列舉，propertyIsEnumerable 屬性即傳回 true。如果 object 沒有指定名稱的這個屬性，或是指定的屬性無法列舉，propertyIsEnumerable 屬性即傳回 false。一般而言，預先定義的屬性是無法列舉的，而使用者自訂屬性一律可列舉。

propertyIsEnumerable 屬性不考慮原型鏈結中的物件。

範例

function testIsEnumerable(){
  var a = new Array("apple", "banana", "cactus");
  return(a.propertyIsEnumerable(1));
}

基本條件

版本 5.5

請參閱

適用於：Object 物件


prototype 屬性

傳回一個物件類別的原型引用。

objectName.prototype

objectName 引數為物件的名稱。

附註

使用 prototype 屬性來提供一物件類別的基本功能組。該物件的新執行個體會「繼承」指定給該物件的原型行為。

例如，您如果想要新增一個方法到 Array 物件中，而該方法會傳回陣列中的最大元素值，則請先宣告一函數，並將它加入 Array.prototype 中，然後使用它。

function array_max( ){
   var i, max = this[0];
   for (i = 1; i < this.length; i++)
   {
   if (max < this[i])
   max = this[i];
   }
   return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );

執行此段程式碼之後， y 就會是陣列 x 中的最大值 (此例中為 6)。

所有的內建 JScript 物件皆具有一個唯讀的 prototype 屬性。可以將功能加入原型中 (如範例所示)，但是不能將另一個原型指定給物件。不過，使用者自訂物件便可以指定一個新原型。

在程式語言參考中會列出每個內建物件的方法和屬性，並會分別列出屬於物件原型的部分，以及不屬於物件原型的部分。

基本條件

版本 2

請參閱

constructor 屬性

適用於：Array 物件 | Boolean 物件 | Date 物件 | Function 物件 | Number 物件 | Object 物件 | String 物件


rightContext 屬性 ($')

傳回從上一次符合的位置開始一直到搜尋字串結束的字元。唯讀。

RegExp.rightContext

與這個屬性相關的物件一定是全域的 RegExp 物件。

附註

rightContext 屬性的起始值是空白的字串。每次比對成功時，rightContext 屬性的值就會改變。

範例

以下範例示範 rightContext 屬性的用法：

function matchDemo(){
   var s;                                //宣告變數。
   var re = new RegExp("d(b+)(d)","ig"); //通用運算式模式。
   var str = "cdbBdbsbdbdz";             //搜尋字串。
   var arr = re.exec(str);               //執行搜尋。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            //傳回結果。
}
document.write(matchDemo());

基本條件

版本 5.5

請參閱

$1...$9 屬性 | index 屬性 | input 屬性 | lastIndex 屬性 | lastMatch 屬性 | lastParen 屬性 | leftContext 屬性

適用於：RegExp 物件


source 屬性 (JScript)

JScript

source 屬性

傳回通用運算式的模式。具有唯讀性質。

rgExp.source

rgExp 引數是一個通用運算式物件，可以是變數名稱或常值。

下面的範例說明 source 屬性的用法：

function SourceDemo(re, s){
   var s1;
   //測試字串是否包括通用運算式。
   if (re.test(s))
      s1 = " contains ";
   else
      s1 = " does not contain ";
   //取得通用運算式的文字。
   return(s + s1 + re.source);
}

基本條件

版本 3

請參閱

通用運算式物件方法 | 通用運算式物件屬性 | 通用運算式語法

適用於：通用運算式物件


SQRT1_2 屬性

傳回 0.5 的平方根，或是 1 除以 2 的平方根。

numVar = Math.SQRT2

附註

SQRT1_2 屬性 (常值) 大約等於 0.707。

基本條件

版本 1

請參閱

Math 物件屬性 | sqrt 方法 | SQRT2 屬性

適用於：Math 物件


SQRT2 屬性

傳回 2 的平方根。

var numVar
numVar = Math.SQRT2

語法

SQRT2 屬性 (常值) 大約等於 1.414。

基本條件

版本 1

請參閱

Math 物件屬性 | sqrt 方法 | SQRT1_2 屬性

適用於：Math 物件


undefined 屬性

傳回 undefined 的初始值。

undefined

附註

undefined 屬性是 Global 物件的成員，而且在 scripting 引擎初始化時才能有效運用。只經過宣告，但尚未初始化的變數，它的值是 undefined。

如果未宣告變數，就無法將它與 undefined 比較，但可以將變數的型別與 "undefined" 字串比較。

undefined 屬性在要明確測試變數，或將變數設為 undefined 時很管用。

範例

var declared;                         //宣告變數。
if (declared == undefined)            //測試變數。
  document.write("declared has not been given a value.");

if (typeOf(notDeclared) == "undefined")
  document.write("notDeclared has not been defined.");

基本條件

版本 5.5

請參閱

適用於：Global 物件


JScript 陳述式

下列表格列出了 JScript 陳述式。

說明 | 語言項目
終止目前的迴圈，若與標籤一起使用，將會終止相關的陳述式。 | break 陳述式
當try 區塊有程式碼發生錯誤時，用來解決錯誤的陳述式。 | catch 陳述式
啟動條件式編譯支援。 | @cc_on 陳述式
使JScript 剖析器掠過單行註解。 | // (單行註解陳述式)
使JScript 剖析器掠過多行註解。 | /*..*/ (多行註解陳述式)
停止迴圈目前的迭代 (iteration)，並開始新的迭代。 | continue 陳述式
先執行一段陳述式，然後重複執行迴圈，直到條件運算式被評估為 False 為止。 | do...while 陳述式
只要指定的條件是 true，就一直執行該段陳述式。 | for 陳述式
對物件的每個或陣列的每個元素執行的一或多個陳述式。 | for...in 陳述式
宣告一個新函數。 | function 陳述式
根據運算式的值，有條件地執行一組陳述式。 | @if 陳述式
根據運算式的值，有條件地執行一組陳述式。 | if...else 陳述式
提供陳述式的識別項。 | Labeled 陳述式
離開目前的函數，並從函數傳回值。 | return 陳述式
建立與條件式編譯陳述式合用的變數。 | @set 陳述式
在指定運算式的值與標籤相符時，執行一或多個陳述式。 | switch 陳述式
表示目前的物件。 | this 陳述式
產生一個可由try...catch陳述式處理的錯誤情況。 | throw 陳述式
進行Jscript的錯誤處理。 | try 陳述式
宣告一個變數。 | var 陳述式
執行陳述式直到指定的條件為 false 為止。 | while 陳述式
建立陳述式的預設物件。 | with 陳述式


@cc_on 陳述式

啟動條件式編譯支援。

@cc_on

附註

@cc_on 陳述式會啟動 Script 引擎中的條件式編譯。

鄭重建議您在註解中使用 @cc_on 陳述式，以便不支援條件式編譯的瀏覽器可接受您的 Script 為有效的語法：

/*@cc_on*/
...
(Script 的其他部分)

此外，註解外的 @if 或 @set 陳述式也會啟動條件式編譯。

基本條件

版本 3

請參閱

條件式編譯 | 條件式編譯變數 | @if 陳述式 | @set 陳述式


@if 陳述式

根據運算式的值，有條件地執行一組陳述式。

@if (
   condition1
)
   text1
[@elif (
   condition2
)
   text2]
[@else
   text3]
@end

引數

condition1, condition2
選擇項。限制為布林運算式。
text1
選擇項。當 condition1 為 True 時要剖析的文字。
text2
選擇項。當 condition1 為 False 且 condition2 為 True 時要剖析的文字。
text3
選擇項。當 condition1 和 condition2 都為 False 時要剖析的文字。

附註

當您撰寫 @if 陳述式時，不需要將每個子句分行放置。您可使用多個 @elif 子句，不過所有的 @elif 子句都必須位於 @else 子句之前。

通常您可使用 @if 陳述式來決定要使用多個選項中的哪個文字作為文字輸出，例如：

alert(@if (@_win32) "using Windows NT or Windows 95" @else "using Windows 3.1" @end)

基本條件

版本 3

請參閱

條件式編譯 | 條件式編譯變數 | @cc_on 陳述式 | @set 陳述式


@set 陳述式

建立與條件式編譯陳述式合用的變數。

@set @varname = term

引數

varname
必要項。有效的 JScript 變數名稱，前面永遠必須加上一個 @ 字元。
term
必要項。0 個或多個一元運算子，後接一個常數、條件式編譯變數或加括號之運算式。

附註

條件式編譯可使用數值和布林變數，但字串變數則否。使用 @set 建立的變數通常用於條件式編譯陳述式，但在 JScript 程式碼中的任何位置都可使用這些變數。

以下為變數宣告的範例：

@set @myvar1 = 12

@set @myvar2 = (@myvar1 * 20)

@set @myvar3 = @_jscript_version

下列運算子均可用於加括號的運算式中：

  • ! ~
  • * / %
  • + -
  • << >> >>>
  • < <= > >=
  • == != === !==
  • & ^ |
  • && | |

如果使用的變數尚未定義，它的值就是 NaN。使用 @if 陳述式時可檢查 NaN：

@if (@newVar != @newVar)
   ...

因為 NaN 是唯一不會等於自己的值。

基本條件

版本 3

請參閱

條件式編譯 | 條件式編譯變數 | @cc_on 陳述式 | @if 陳述式


break 陳述式

終止目前的迴圈，若與標籤一起使用，將會終止相關的陳述式。

break [label];

選擇性引數 label 指定您要中斷的陳述式的標籤。

附註

您通常可以在 switch 陳述式及 while、for、for...in 或 do...while 等迴圈中使用 break 陳述式。label 引數最常用於 switch 陳述式，不過在任何陳述式中都可以使用它，不論是一般式或複合式陳述式。

範例

執行 break 陳述式，可自目前的迴圈或陳述式中退出，並繼續從緊接在後的陳述式開始執行 Script。

下面的範例說明 break 陳述式的用法。

function BreakTest(breakpoint){
   var i = 0;
   while (i < 100)
   {
   if (i == breakpoint)
      break;
      i++;
   }
   return(i);
}

基本條件

版本 1

請參閱

continue 陳述式 | do...while 陳述式 | for 陳述式 | for...in 陳述式 | Labeled 陳述式 | while 陳述式


Comment 陳述式

JScript

註解陳述式

使 JScript 剖析程式忽略註解。

語法 1

單行註解：
// comment

語法 2

多行註解：
/*
comment
*/

comment 引數是您要包含在 Script 中的任何註解文字。

語法 3

//@CondStatement

語法 4

/*@
condStatement
@*/

condStatement 引數是在啟動條件式編譯時所使用的條件式編譯程式碼。若使用語法 3，則在 // 和 @ 字元之間不能有空格。

附註

使用註解以避免 JScript 剖析程式讀取 Script 的某些部份。您可使用註解將解說性的文字加入程式中。

如果使用語法 1，剖析程式會忽略註解符號和行尾之間的所有文字。若使用語法 2，則會忽略開頭符號與結尾符號之間的所有文字。

使用語法 3 和 4 可支援條件式編譯，並維持與不支援該功能的瀏覽程式之間的相容性。這些瀏覽程式分別將這些註解形式視同語法 1 和 2。

範例

下面的範例說明 comment 陳述式最常見的用法。

function myfunction(arg1, arg2){
   /*這是多行註解，允許您視需要
      將註解跨行顯示。 */
   var r;
   // 這是單行註解。
   r = arg1 + arg2; //將兩個引數加總。
   return(r);
}

基本條件

版本 1


continue 陳述式

停止迴圈目前的迭代 (iteration)，並開始新的迭代。

continue [label];

選擇性引數 label 指定了要套用 continue 的陳述式。

附註

您只能在 while、do...while、for 或 for...in 迴圈中使用 continue 陳述式。執行 continue 陳述式會停止目前的迴圈迭代，並繼續執行迴圈開頭的程式。對於不同類型的迴圈會產生下列不同的結果：

  • while 和 do...while 迴圈會檢驗它們的條件，如果為 True，會再執行一次迴圈。
  • for 迴圈會執行它們的遞增運算式，而如果檢驗運算式為 True，會再執行一次迴圈。
  • for...in 迴圈會繼續執行指定變數的下一個欄位，並且再執行一次迴圈。

範例

下面的範例說明 continue 陳述式的用法。

function skip5(){
   var s = "", i=0;
   while (i < 10)
   {
      i++;
      // Skip 5
      if (i==5)
      {
       continue;
      }
   s += i;
   }
   return(s);
}

基本條件

版本 1

請參閱

break 陳述式 | do...while 陳述式 | for 陳述式 | for...in 陳述式 | Labeled 陳述式 | while 陳述式


do...while 陳述式

先執行一段陳述式，然後重複執行迴圈，直到條件運算式被評估為 False 為止。

do
   statement
while (expression) ;

引數

statement
選擇項。當 expression 為 True 時要執行的陳述式。可以是複合式陳述式。
expression
選擇項。為布林值 True 或 False 的運算式。若 expression 為 True，會再執行一次迴圈。若 expression 為 False，則迴圈會終止。

附註

expression 的值會等到迴圈第一次迭代 (iteration) 後才檢查，因此保證迴圈至少會執行一次。此後會在每次迴圈迭代之後檢查。

範例

下面範例會使用 do...while 陳述式來反複處理 Drives 集合物件。

function GetDriveList(){
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   do
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
         s +=  n + "<br>";
      e.moveNext();
   }
   while (!e.atEnd());
   return(s);
}

基本條件

版本 3

請參閱

break 陳述式 | continue 陳述式 | for 陳述式 | for...in 陳述式 | while 陳述式 | Labeled 陳述式


for 陳述式

只要指定的條件是 True，就一直執行該段陳述式。

for (initialization; test; increment)
   statements

引數

initialization
必要項。這是一個運算式。此運算式只會在迴圈執行之前執行一次。
test
必要項。這是一個布林運算式。如果 test 為 True，則執行 statement。如果 test 為 False，則迴圈會終止。
increment
必要項。這是一個運算式。遞增運算式會在每次執行至迴圈末端時執行。
statements
選擇項。如果 test 為 true，則執行一個或多個陳述式.。可以是複合式陳述式。

附註

當要執行特定次數的迴圈時，您通常可使用 for 迴圈。

範例

以下為 for 迴圈的範例。

/* i 在開始時設為 0，而且在每次迭代末端遞增
1。當 i 值在迴圈迭代進行前已不小於 10 時，
迴圈便會終止。 */
var myarray = new Array();
for (i = 0; i < 10; i++) {
   myarray[i] = i;
}

基本條件

版本 1

請參閱

for...in 陳述式 | while 陳述式


for...in 陳述式

對物件的每個屬性或陣列的每個元素執行的一或多個陳述式。

for (variable in [object | array])
   statements

引數

variable
必要項。可以是 object 之任意屬性或一個 array 之任意元素的變數。
object, array
選擇項。要重複執行的物件或陣列。
statements
選擇項。對 object 的每個屬性或 array 的每個元素執行的一個或多個陳述式。可以是複合式陳述式。

附註

在每次重複執行迴圈之前，就會將 variable 指定為 object 的下一個屬性或 array 的下一個元素。然後您就可以在迴圈中的任一個陳述式中使用，正如使用 object 的屬性或 array 的元素一樣。

重複執行一個物件時，無法決定或控制物件成員指定給 variable 的順序。而重複執行一個陣列時，會按照元素的順序執行，也就是 0、1、2、...

範例

下面的範例說明 for ... in 陳述式的用法，以及作為結合陣列 (associative array) 使用的物件。

function ForInDemo(){
   // 建立一些變數。
   var a, key, s = "";
   // 將物件初始化。
   a = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"}
   // 反覆屬性
   for (key in a)   {
      s += a[key] + "&ltBR>";
   }
   return(s);
}
備註 請用 enumerator 物件來重複集合物件的成員。

基本條件

版本 5

請參閱

for 陳述式 | while 陳述式


function 陳述式

宣告一個新函數。

function functionname([arg1 [, arg2 [,...[, argN]]]])
{
   statements
}

引數

functionname
必要項。函數的名稱。
arg1...argN
選擇項。這是一份以逗號區隔的選擇性引數清單，這些引數是函數所能接受的。
statements
選擇項。一或多個 JScript 陳述式。

附註

使用 function 陳述式可宣告函數供稍後使用。statements 中包含的程式碼會等到從 Script 中的其他位置呼叫函數之後才執行。

範例

下面的範例說明 function 陳述式的用法。

function myfunction(arg1, arg2){
   var r;
   r = arg1 * arg2;
   return(r);
}
備註 呼叫函數時，請務必包含括號和所有必要的引數，若未加上括號，將會傳回函數的文字而非其結果。

基本條件

版本 1

請參閱

new 運算子


if...else 陳述式

根據運算式的值，有條件地執行一組陳述式。

if (condition)
   statement1
[else
   statement2]

引數

condition
必要項。這是一個布林運算式。若 condition 為 null 或 undefined，condition 將會被視為 False。
statement1
選擇項。當 condition 為 True 時要執行的陳述式。可以是複合式陳述式。
statement2
選擇項。當 condition 為 False 時要執行的陳述式。可以是複合式陳述式。

附註

請養成將 statement1 和 statement2 包含在大括號 ({}) 中的習慣，這樣看起來會比較清楚，也可避免不慎犯錯。

範例

在下面的範例中，您可能打算將 else 與第一個 if 陳述式合用，但事實上卻與第二個合用。

if (x == 5)
   if (y == 6)
      z = 17;
else
   z = 20;

以下列的方式改寫程式碼，可避免各種不確定性：

if (x == 5)
   {
   if (y == 6)
      z = 17;
   }
else
   z = 20;

同理，如果您要在 statement1 中加入一個陳述式，卻未使用大括號，則可能會產生錯誤：

if (x == 5)
   z = 7;
   q = 42;
else
   z = 19;

在上例中出現了語法錯誤，因為在 if 和 else 陳述式之間出現一個以上的陳述式。在 if 和 else 之間的陳述式兩端必須加上大括號。

基本條件

版本 1

請參閱

條件式運算子 (?:)


Labeled 陳述式

提供陳述式的識別項。

label :
   statements

引數

label
必要項。引用 Labeled 陳述式時使用的唯一識別項。
Statements
選擇項。與 label 有關的一個或多個陳述式。

附註

break 和 continue 陳述式使用標籤來指定要套用 break 和 continue 的陳述式。

範例

在下面的陳述式中，continue 陳述式使用 Labeled 陳述式來建立一個陣列，其中每一列的第三欄包含一個未定義的值：

function labelDemo(){
   var a = new Array();
   var i, j, s = "", s1 = "";
   Outer:
      for (i = 0; i < 5; i++)
      {
         Inner:
            for (j = 0; j < 5; j++)
            {
               if (j == 2)
                  continue Inner;
               else
                  a[i,j] = j + 1;
            }
      }
      for (i = 0;i < 5; i++)
      {
         s = ""
         for (j = 0; j < 5; j++)
         {
            s += a[i,j];
         }
         s1 += s + "\n";
      }
      return(s1)
}

基本條件

版本 3

請參閱

break 陳述式 | continue 陳述式


return 陳述式

離開目前的函數，並從函數傳回值。

return[(][expression][)];

可選擇的expression 引數是從函數傳回的值，若予以省略，函數將不會傳回任何值。

附註

您可以使用 return 陳述式來停止執行函數並傳回 expression 的值。若省略 expression，或未執行函數中的 return 陳述式，則呼叫目前函數的運算式會被指定為 undefined 值。

範例

下面的範例說明 return 陳述式的用法。

function myfunction(arg1, arg2){
   var r;
   r = arg1 * arg2;
   return(r);
}

基本條件

版本 1

請參閱

function 陳述式


switch 陳述式

在指定運算式的值與標籤相符時，執行一或多個陳述式。

switch (expression) {
   case label :
       statementlist
   case label :
       statementlist
   ...
   default :
       statementlist
}

引數

expression
要評估的運算式。
label
與 expression 比對的識別項。如果 label === expression，則會開始執行冒號後面的 statementlist，直到出現 break 陳述式 (選擇項) 或到 switch 陳述式的結尾為止。
statementlist
要執行的一或多個陳述式。

附註

使用 default 子句，以提供在沒有標籤值與 expression 相符的情況下要執行的陳述式。它可以出現在 switch 程式碼區塊中的任何位置。

可指定 0 或多個 label 區塊。如果沒有一個 label 與 expression 的值相符，而且在沒有提供 default 的情況下，將不會執行任何陳述式。

switch 陳述式的執行程序如下：

  • 評估 expression 並依序查看 label，直到找到符合的項目為止。
  • 如果 label 的值等於 expression，則執行其附隨的 statementlist。
    繼續執行直到 break 陳述式出現或 switch 陳述式結束。這表示若不使用 break 陳述式，就會執行多個 label 區塊。
  • 如果沒有 label 等於 expression，則執行 default 情況。如果沒有 default 情況，則跳到最後一個步驟。
  • 繼續執行 switch 程式碼區塊後面的陳述式。

範例

下面的範例會檢驗物件的類型。

function MyObject() {
...}

switch (object.constructor){
   case Date:
   ...
   case Number:
   ...
   case String:
   ...
   case MyObject:
   ...
   default:
   ...
}

基本條件

版本 3

請參閱

break 陳述式 | if...else 陳述式


this 陳述式

表示目前的物件。

this.property

所需的 property 引數是目前的物件屬性之一。

附註

this 關鍵字通常用於物件建構元中來引用目前的物件。

範例

在下面的範例中，this 代表剛建立的 Car 物件，並指定三個屬性的值：

function Car(color, make, model){
   this.color = color;
   this.make = make;
   this.model = model;
}

在客戶端版的 JScript 中，this 若用於任何其他的物件內容外，則代表引用 window 物件。

基本條件

版本 1

請參閱

new 運算子


throw 陳述式

產生一個可由try...catch�finally 陳述式處理的錯誤情況。

throw exception

所需的exception 引數可以是任意的運算式。

附註

下面的範例是根據傳入值來產生錯誤，然後再說明如何在try...catch�finally 陳述式的階層中處理這個錯誤：

function TryCatchDemo(x){
   try {
      try {
      if (x == 0)   // 評估引數。
         throw "x equals zero";   // 丟出一個錯誤。
      else
         throw "x does not equal zero";   // 丟出一個不同的錯誤。
      }
      catch(e) {   // 在此處理 "x = 0" 錯誤。
         if (e == "x equals zero")   // 在此進行錯誤處理檢查。
            return(e + " handled locally.");   // 傳回物件錯誤訊息。
         else   // 無法在此處理錯誤。
            throw e;   // 重新丟出錯誤以進行下一次的
      }   // 錯誤處理。
   }
   catch(e) {   // 在此處理其他錯誤。
      return(e + " handled higher up.");   // 傳回錯誤訊息。
   }
}
document.write(TryCatchDemo(0));
document.write(TryCatchDemo(1));

基本條件

版本 5

請參閱

try...catch 陳述式


try...catch...finally 陳述式

JScript

try...catch�finally 陳述式

進行 Jscript 的錯誤處理。

try {
   tryStatements}
catch(exception){
   catchStatements}
finally {
   finallyStatements}

引數

tryStatements
必要項。發生錯誤的陳述式。
exception
必要項。任意變數名稱。exception 的初值就是丟出的錯誤值。
catchStatements
選擇項。用來處理發生在與 tryStatement 相關之錯誤的陳述式。
finallyStatements
選擇項。在所有錯誤發生之後，非條件式執行的陳述式。

附註

對於可能在特定程式碼區塊中發生的錯誤，try...catch�finally 陳述式提供了處理方式，能讓程式碼維持在執行狀態下。如果發生程式設計師沒有處理過的錯誤，JScript 只會將一般的錯誤訊息提供給使用者，當作沒有錯誤處理發生。

tryStatements 引數中包含可能發生錯誤的程式碼，而 catchStatements 則包含用來處理確實發生錯誤的程式碼。如果 tryStatements 中發生錯誤，則程式控制權會轉移給 catchStatements 處理。exception 的初值就是在 tryStatements中發生的錯誤值。如果沒有錯誤發生，tryStatements就不會執行。

如果與發生錯誤的 tryStatements 相關的 catchStatements 無法處理這個錯誤，請用 throw 陳述式來傳送錯誤，或是將錯誤重新丟出並傳給更高階的錯誤處理程式。

在tryStatements 中所有陳述式執行後，在catchStatements產生任何錯誤處理時，finallyStatements 裡的陳述式會非條件式的執行。

注意finallyStatements 內含的程式碼將會執行，即使有陳述式傳回try 或 catch 區塊，或者catch 區塊重新丟回這個錯誤。 finallyStatments 總是會執行，除非有未處理的錯誤發生。(例如catch 區塊裡發生了執行時的錯誤。).

範例

下面的範例是根據傳入的值來產生錯誤，然後再說明如何在 try...catch 陳述式的階層中處理這個錯誤。

try {
  print("Outer try running..");
  try {
    print("Nested try running...");
    throw "an error";
  }
  catch(e) {
    print("Nested catch caught " + e);
    throw e + " re-thrown";
  }
  finally {
    print("Nested finally is running...");
  }
}
catch(e) {
  print("Outer catch caught " + e);
}
finally {
  print("Outer finally running");
}
// 因為Windows Script 主機改變為WScript.Echo(s)
function print(s){
   document.write(s);
}

產生以下輸出:

Outer try running..
Nested try running...
Nested catch caught an error
Nested finally is running...
Outer catch caught an error re-thrown
Outer finally running

基本條件

版本 5

請參閱

throw 陳述式


var 陳述式

宣告一個變數。

var variable1 [ = value1 ] [, variable2 [ = value2], ...]

引數

variable1, variable2
要宣告的變數名稱。
value1, value2
為變數指定的初值。

附註

使用 var 陳述式來宣告變數。這些變數可在宣告時或稍後在指令碼中指定值。

範例

以下的範例說明了var 陳述式的用法。

var index;
var name = "Thomas Jefferson";
var answer = 42, counter, numpages = 10;

基本條件

版本 1

請參閱

function 陳述式 | new 運算子


while 陳述式

執行陳述式直到指定的條件為 False 為止。

while (expression)
   statements

引數

expression
必要項。在每次迴圈迭代 (iteration) 進行之前檢查的布林運算式。若 expression 為 True，則會執行迴圈；若 expression 為 False，則會終止迴圈。
statements
選擇項。當 expression 為 True 時要執行的一個或多個陳述式。

附註

while 陳述式會在第一次執行迴圈之前先檢查 expression。若此時 expression 為 False，則絕不會執行迴圈。

範例

下面的範例說明 while 陳述式的用法。

function BreakTest(breakpoint){
   var i = 0;
   while (i < 100)
   {
   if (i == breakpoint)
      break;
      i++;
   }
   return(i);
}

基本條件

版本 1

請參閱

break 陳述式 | continue 陳述式 | do...while 陳述式 | for 陳述式 | for...in 陳述式


with 陳述式 (JScript)

JScript

with 陳述式

建立陳述式的預設物件。

with (object)
   statements

引數

object
新的預設物件。
statements
其 object 為預設物件的一個或多個陳述式。

附註

with 陳述式通常用來減少您在某些情況下必須撰寫的程式碼量。請注意到以下範例中重複使用了 Math。

x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10)
y = Math.tan(14 * Math.E)

若使用 with 陳述式，您的程式碼會變得比較短且易於閱讀：

with (Math){
   x = cos(3 * PI) + sin (LN10)
   y = tan(14 * E)
}

基本條件

版本 1

請參閱

this 陳述式


VBScript

VBScipt 使用者指南

VBScript 語言參考


VBScript 使用者指南

什麼是VBScript?

在HTML 網頁中加入VBScript程式碼

VBScript 基礎學習

VBScript 資料型態

VBScript 變數

VBScript 常數

VBScript 運算子

使用條件陳述式

重複執行程式碼

VBScript 程序

VBScript 程式撰寫規格


什麼是 VBScript？

Microsoft Visual Basic Scripting 版將 Active Scripting 帶入更多不同的環境中，包括 Microsoft Internet Explorer 的web客戶端 指令碼和 Microsoft Internet Information Server 的網路資訊服務。

易用易學

如果您懂 Visual Basic 或 Visual Basic for Applications (VBA)，您對 VBScript 將會非常熟悉。即使您不懂 Visual Basic，一旦您開始學習 VBScript，您就已經在學習 Visual Basic 程式語言家族的程式設計了。雖然您可以在這幾頁網頁中學到 VBScript，但這裡並沒有教您如何設計程式。要學習程式設計，請參考由 Microsoft Press 所出版的 Step by Step 書籍。

Windows Script

VBScript 藉由 Windows Script 和主應用程式 (Host Application) 溝通。在使用 Windows Script、瀏覽器和其它的主應用程式時，不需要依照每一種 Scripting 元件做特別的整合。Windows Script 啟用一個主應用程式來編譯程式，取得並呼叫進入點，進而管理可供程式設計師使用的命名空間。透過 Windows Script，程式語言經銷商可建立 指令碼 執行時的標準程式語言。Microsoft 將會針對 VBScript 提供執行階段的支援。Microsoft 利用多樣性的網際網路群組工具來定義 Windows Script 標準，使撰寫Scripting 引擎可以互相交流。Windows Script 可以使用於 Microsoft® Internet Explorer 和 Microsoft® Internet Information Service。

在其他應用程式和瀏覽器中的 VBScript

身為程式設計師，您可以在不需付費的情況下，在您的產品中使用 VBScript 原始工具。Microsoft 對於 32 位元 Windows® API、16 位元 Windows® API 和 Macintosh® 皆提供 VBScript 的二進位工具。VBScript 和網際網路瀏覽器是整合在一起的。VBScript 和 Windows Script 也可當成其他應用程式中的一般 指令碼 程式語言來使用。


在 HTML 網頁中加入 VBScript 程式碼

您可以使用 指令碼 組成元素將 VBScript 程式碼加到 HTML 網頁中。

<Script> 標記

VBScript 程式碼要放在一對 <Script> 標記之中。舉例來說，用來測試傳送日期的程序看起來可能像下面這樣：

<Script LANGUAGE="VBScript">
<!--
   Function CanDeliver(Dt)
      CanDeliver = (CDate(Dt) - Now()) > 2
   End Function
-->
</Script>

程式碼需要放置在起始和結束的 <Script> 標記之中。LANGUAGE 屬性則是用來指明 指令碼 程式語言的種類。因為瀏覽器可以使用多種 指令碼 程式語言，所以您必須指明語言的種類。注意到 CanDeliver 函數是放在註解標記 (<!— 和 —>) 中，如此可以避免看不懂 <Script> 標記的瀏覽器將程式碼顯示出來。

因為這個例子中的函數是一個通用的函數—所以它不必和任何特定的表單控制項放在一起—您可以把它放在網頁的 HEAD 區段中：

<HTML>
<HEAD>
<TITLE>Place Your Order</TITLE>
<Script LANGUAGE="VBScript">
<!--
   Function CanDeliver(Dt)
      CanDeliver = (CDate(Dt) - Now()) > 2
   End Function
-->
</Script>
</HEAD>
<BODY>
...

您可以在 HTML 網頁中的任何一個部分使用 指令碼 區塊，BODY 和 HEAD 區段中都可以放置。然而，您可能會希望把所有一般用途的 指令碼 程式碼都放在 HEAD 區段中，以讓這些程式碼可以放置在一起。把您的程式碼放在 HEAD 區段中可以確保所有的程式碼在被 BODY 區段呼叫前就已經被瀏覽器解讀過了。

一個值得注意的例外是，您可能會希望在表單中使用「行間」指令碼 程式碼以回應表單內物件的事件。舉例來說，您可以放置 指令碼 程式碼來回應表單中的按下按鈕事件：

<HTML>
<HEAD>
<TITLE>Test Button Events</TITLE>
</HEAD>
<BODY>
<FORM NAME="Form1">
   <INPUT TYPE="Button" NAME="Button1" VALUE="Click">
   <Script FOR="Button1" EVENT="onClick" LANGUAGE="VBScript">
      MsgBox "Button Pressed!"
   </Script>
</FORM>
</BODY>
</HTML>

大部分的程式碼都會包含在 Sub 或 Function 程序中，而且只有在您的程式碼指定到該程序時才會被呼叫。不過，您也可以把 VBScript 程式碼放在程序之外，但仍放在 指令碼 區塊之中。這些程式碼只會在 HTML 網頁被載入時執行一次，您可以在載入網頁時藉此初始化一些資料或動態的改變網頁外觀。


非 VBA中的 VBScript 功能

Visual Basic Scripting Edition

非 VBA 中的 VBScript 功能

下列表中列出了不在 VBA 中的 VBScript 功能。

類別 | 功能與關鍵字
宣告 | Class
其他 | Eval Execute
物件 | RegExp
確認Script 引擎 | ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion


非 VBScript 中的 VBA 功能

下列表中列出了不在 VBScript 中的 Visual Basic for Applications 功能。

類別 | 省略的功能與關鍵字
陣列處理 | Option Base 宣告下限不等於零的陣列
集合物件 | Add, Count, Item, Remove 使用 ! 字元存取集合物件
條件式編譯 | #Const #If...Then...#Else
控制流程 | DoEvents GoSub...Return, GoTo On Error GoTo On...GoSub, On...GoTo 行號 (Line number)、行標 (Line label)
轉換 | CVar, CVDate Str, Val
資料型態 | 除了 Variant Type...End Type 之外的所有內建資料型態
日期與時間 | Date 陳述式，Time 陳述式
DDE | LinkExecute, LinkPoke, LinkRequest, LinkSend
除錯 | Debug.Print End, Stop
宣告 | Declare (用於宣告 DLLs) Optional ParamArray Static
錯誤處理 | Erl Error Resume, Resume Next
檔案輸入/輸出 | 所有傳統 Basic 的檔案輸出入功能
財務 | 所有財務函數
Object Manipulation | TypeOf
物件 | Clipboard Collection
運算子 | Like
選項 | Deftype Option Base Option Compare Option Private Module
Select Case | 包含 Is 關鍵字或任何比較運算子的運算式 包含使用 To 關鍵字以表示一數值區域的運算式
字串 | 固定長度字串 LSet, RSet Mid 陳述式 StrConv
使用物件 | 使用 ! 存取集合物件


VBScript 基礎學習

VBScript 資料型態

VBScript 變數

VBScript 常數

VBScript 運算子

使用條件陳述式

重複執行程式碼

VBScript 程序

VBScript 程式撰寫規格


簡單的 VBScript 網頁

簡單的網頁

您可以使用Microsoft® Internet Explorer 檢視由下列 HTML 程式碼所產生的網頁。當您按下網頁上的按鈕時，就可看到 VBScript 的執行結果。

<HTML>
<HEAD><TITLE>第一個簡單的網頁</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Button1_OnClick
   MsgBox "Mirabile visu."
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>第一個簡單的網頁</H3><HR>
<FORM><INPUT NAME="Button1" TYPE="BUTTON" VALUE="請按這裡"></FORM>
</BODY>
</HTML>

這個結果並沒有非常令人意外：一個對話方塊顯示一個拉丁文成語 (「令人驚奇的所見」)。然而，這個結果的底下的確有一些動作在執行。

當 Internet Explorer 讀取這個網頁時，它會發現 <SCRIPT> 標記，因而認出這裡有一段 VBScript 程式碼，並儲存這段程式碼。當您按下按鈕時，Internet Explorer 會在按鈕和程式碼之間建立連結，同時執行這個程序。

在 <SCRIPT> 標記中的 Sub 程序是一個事件程序。在程序名稱中包含了兩個部分：一是按鈕的名稱 Button1 (這是從 <INPUT> 標記中的 NAME 屬性而來的)；一是事件的名稱 OnClick。這兩個名稱使用底線 ( _ ) 連結在一起。當這個按鈕在任何時候被按下時，Internet Explorer 將會找尋並執行相對應的事件程序 - Button1_OnClick。

Internet Explorer 在 Microsoft® 網站 (http://www.microsoft.com) 上的 Internet Explorer Scripting 物件模型文件中定義了各種可用於表單控制項的事件。

網頁也可以由程序和控制項組成。在 VBScript 和表單中示範了一些控制項之間的簡單互動。

把程式碼連結到事件的其他方法

我們在前面看到把程式碼連結到事件的這個方法是最常用也最簡單的方法。除此之外，您還有另外兩種方法可以使用。 Internet Explorer 允許您在定義控制項的標記中加入一段簡短的「行間」程式碼。舉例來說，使用下面的 <INPUT> 標記可以使您在按下按鈕時得到和前一個範例相同的結果：

<INPUT NAME="Button1" TYPE="BUTTON"
   VALUE="Click Here" OnClick='MsgBox "Mirabile visu."'>

請注意，函數呼叫本身是包含在一個單引號中，而 MsgBox 函數的字串參數則是包含在雙引號中。您可以使用多個陳述式，陳述式和陳述式之間則用冒號 ( : ) 隔開。

您也可以寫一個給特定控制項之特定事件使用的 <SCRIPT> 標記：

<SCRIPT LANGUAGE="VBScript" EVENT="OnClick" FOR="Button1">
<!--
   MsgBox "Mirabile visu."
-->
</SCRIPT>

因為 <SCRIPT> 標記中已經指明了事件和控制項，所以這裡不必再使用 Sub 和 End Sub 陳述式。


VBScript 功能

下列表格是 VBScript 功能的清單。

類別 | 關鍵字
陣列處理 | Array Dim, Private, Public, ReDim IsArray Erase LBound, UBound
指定 | Set
註解 | 註解使用 ' 或Rem
常數/常值 | Empty Nothing Null True, False
控制流程 | Do...Loop For...Next For Each...Next If...Then...Else Select Case While...Wend With
轉換 | Abs Asc, AscB, AscW Chr, ChrB, ChrW CBool, CByte CCur, CDate CDbl, CInt CLng, CSng, CStr DateSerial, DateValue Hex, Oct Fix, Int Sgn TimeSerial, TimeValue
日期/時間 | Date, Time DateAdd, DateDiff, DatePart DateSerial, DateValue Day, Month, MonthName Weekday, WeekdayName, Year Hour, Minute, Second Now TimeSerial, TimeValue
宣告 | Class Const Dim, Private, Public, ReDim Function, Sub Property Get, Property Let, Property Set
錯誤處理 | On Error Err
運算式 | Eval Execute RegExp Replace Test
字串格式 | FormatCurrency FormatDateTime FormatNumber FormatPercent
輸入/輸出 | InputBox LoadPicture MsgBox
常值 | Empty False Nothing Null True
數學 | Atn, Cos, Sin, Tan Exp, Log, Sqr Randomize, Rnd
其他 | Eval 函數 Execute 陳述式 RGB 函數
物件 | CreateObject Err 物件 GetObject RegExp
運算子 | 加號(+)、減號(-) 指數運算(^) 模數運算(Mod) 乘號(*)、除號(/) 整數除號(\) 負號(-) 字串串連(&) 等於(=)、不等於(<>) 小於(<) 、小於或等於(<=) 大於(>) 、 大於或等於(>=) Is And, Or, Xor Eqv, Imp
選項 | Option Explicit
程序 | Call Function, Sub Property Get, Property Let, Property Set
四捨五入 | Abs Int, Fix, Round Sgn
Script 引擎ID | ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion
字串 | Asc, AscB, AscW Chr, ChrB, ChrW Filter, InStr, InStrB InStrRev Join Len, LenB LCase, UCase Left, LeftB Mid, MidB Right, RightB Replace Space Split StrComp String StrReverse LTrim, RTrim, Trim
變數 | IsArray IsDate IsEmpty IsNull IsNumeric IsObject TypeName VarType


VBScript 資料型態

VBScript 只有一種稱為 Variant 的資料型態。Variant 是一個很特殊的資料型態，它可以隨著被使用方法的不同而包含不同的資訊。因為 Variant 是 VBScript 中的唯一資料型態，所以它也是 VBScript 中所有函數傳回資料的唯一型態。

在這麼簡單的結構中，Variant 同樣可以包含數字或字串的資訊。當您在一個應該使用數字的地方使用 Variant 時，它就會被當成一個數字；當您在一個應該使用字串的地方使用 Variant 時，它就會被當成一個字串。這也就是說，當您使用一個看起來像數字的資料時，VBScript 就會假設它是數字，同時採取適當的處理。相同的，如果您使用的資料只能是字串資料時，VBScript 就會把它當成字串資料。您可以在數字外加上引號(" ")強迫 VBScript 把它當成字串。

Variant 子型態

除了數值或字串的分別之外，Variant 還可以更進一步區分數值資訊的性質。舉例來說，您可以讓一個數值代表日期或時間。當它和其它日期或時間一起做運算時，其結果都會以日期或時間表示。您還可以使用各種不同大小的數值資訊。它可以小如布林值，或大如浮點數。這些可以包含在 Variant 中的不同種類資訊稱為子型態。在大部分的情形下，您都可以直接把您所想用的型態放到 Variant 中，Variant 會以最適當的方式來處理其中所包含的資料。

下面的表格中列出了 Variant 可以包含的子型態。

子型態 | 說明
Empty | Variant 仍未初始化。數值變數將會是 0，字串變數則是長度為零的字串("")。
Null | Variant 包含一個無效的資料。
Boolean | 包含 True 或 False。
Byte | 包含 0 到 255 之間的整數。
Integer | 包含介於 -32,768 到 32,767 之間的整數。
Currency | 介於 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 之間。
Long | 包含介於 -2,147,483,648 到 2,147,483,647 之間的整數。
Single | 包含一個單精度浮點數，其負數的範圍介於 -3.402823E38 到 -1.401298E-45 之間；正數的範圍則介於 1.401298E-45 到 3.402823E38 之間。
Double | 包含一個雙精度浮點數，其負數的範圍介於 -1.79769313486232E308 到 -4.94065645841247E-324 之間；正數的範圍則介於 4.94065645841247E-324 到 1.79769313486232E308 之間。
Date (Time) | 包含一個代表日期的數值，其值介於西元 100 年 1 月 1 日到西元 9999 年 12 月 31 日之間。
String | 包含一個可變長度的字串，其長度最長可以到將近 20 億個字元。
Object | 包含一個物件。
Error | 包含一個錯誤代碼。

您可以使用轉換函數來轉換資料的子型態。此外，VarType 函數可以傳回儲存在 Variant 中的資料。


VBScript 變數

變數代表一個指向電腦記憶體位置的預留空間。在這個空間中，您可以儲存一些在 指令碼 執行過程中會變動的程式資訊。舉例來說，在某個網頁中，您可以建立一個稱做 ClickCount 的變數來儲存使用者用滑鼠點選某一個物件的次數。變數儲存在電腦記憶體中的哪個位置並不重要，重要的是您只需用變數的名稱即可檢視或更改儲存在其中的值。在 VBScript 中，基本資料型態就是 Variant。

宣告變數

您可以使用 Dim 陳述式、Public 陳述式、或 Private 陳述式在 指令碼 中明確宣告一個變數。比如像：

 Dim DegreesFahrenheit

您也可以同時宣告多個變數，變數之間以逗號隔開即可。比如像：

 Dim Top, Bottom, Left, Right

您也可以在 指令碼 中使用它的名字來宣告一個變數。不過一般來說，這並不是一個好的方法。因為您可能會在使用時拼錯了變數的名稱，而產生不可預期的執行結果。基於這個理由，您可以使用 Option Explicit 陳述式來要求所有變數都要明確宣告。您應該在指令碼的開端都放上 Option Explicit 陳述式。

命名的限制

在 VBScript 中，變數的命名必須遵循一標準規則。一個變數名稱中：

  • 必須以字母開頭。
  • 中間不能包含句點 (.)。
  • 不能超過 255 個字元。
  • 在宣告的有效範圍中必須唯一。

變數的有效範圍和生命週期

一個變數的有效範圍是由其宣告的地點來決定。當您在一個程序中宣告變數時，那麼就只有程序中的程式碼可以存取或更改這個變數的值。它有區域的有效範圍，同時稱之為程序層次變數。如果您是在程序之外宣告一個變數，那麼 指令碼 中的所有程序將都能使用這個變數。這是一個 Script 層次的變數，同時它有 Script 層次的有效範圍。

一個變數能存在多久，決定了它的生命週期。一個 Script 層次變數的生命週期是從變數被宣告開始一直到 Script 執行完畢為止。而程序層次變數就只有在程序執行時會存在。當離開程序時，這些變數就會消失。當程序執行時，區域變數是一個用來暫存資料的絕佳選擇。您可以在許多個不同程序中宣告同樣名稱的區域變數，因為只有變數所在的程序才會認得該變數。

指定值給變數

指定值給變數所要使用的運算式如下：變數在運算式的左邊，您要指定給變數的值在右邊。舉例來說，像：

 B = 200

單一值變數和陣列變數

在大多數的情形下，您只會想指定單一個值給您宣告的變數。一個含有單一個值的變數稱為單一值變數。在某些情形中，指定數個相關的值給一個變數會比指定一個來得方便。此時，您就可以建立一個可以包含一群值的變數。這種變數稱之為陣列變數。 宣告陣列變數和宣告單一值變數是相同的，但是在宣告陣列變數時，您需要在變數名稱後面加上括號 ( )。在下面的例子中，我們宣告了一個含有 11 個元素的一維陣列：

 Dim A(10)

雖然在括號中的數字是 10，不過因為在 VBScript 中的所有陣列都是以零為基底的陣列，所以這個陣列實際上包含了 11 個元素。在以零為基底的陣列中，陣列的元素個數永遠是括號中的數字再加 1。這種類型的陣列稱為固定大小的陣列。

您可以使用索引來指定值給陣列中的元素。索引的值由零開始，其最大值到 10。您可以用下列的方式把資料指定給陣列中的元素：

 A(0) = 256
 A(1) = 324
 A(2) = 100
 . . .
 A(10) = 55

同樣地，您也可以使用索引值來讀取特定陣列元素中的資料。比如像：

 . . .
 SomeVariable = A(8)
 . . .

陣列並不一定要是一維陣列，它最大可以到達 60 維。不過大部分的人通常最多都只用到三或四維。您可以在括號中填入陣列各個維度的大小以宣告多維陣列，而每個數字之間是以逗號隔開。在下面的例子中，MyTable 這個變數是一個二維陣列，它包含了 6 個資料列和 11 個資料行：

 Dim MyTable(5, 10)

在一個二維的陣列中，第一個數字代表資料列的數目；第二個則代表資料行的數目。

您也可以宣告一個在 指令碼 執行過程中大小會改變的陣列。這種陣列稱之為動態陣列。在程序中，您可以用 Dim 陳述式或 ReDim 陳述式來宣告動態陣列。然而在動態陣列的宣告中，括號內不必填入任何維度或陣列的大小。比如像：

 Dim MyArray()
 ReDim AnotherArray()

當您要使用動態陣列時，您必須先使用 ReDim 來決定陣列的維度以及每個維度的大小。在下面的例子中，ReDim 首先將動態陣列的起始大小設為 25，之後的 ReDim 陳述式則將大小修改為 30，同時它使用了 Preserve 這個關鍵字，它可以在陣列大小改變時，使原來儲存在陣列中的資料得以保存。

 ReDim MyArray(25)
 . . .
 ReDim Preserve MyArray(30)

動態陣列之大小變化的次數並沒有任何限制。雖然當您縮小陣列時，存放在被刪除掉的元素中的資料都會消失不見。


VBScript 常數

常數是一個用來取代固定數字或固定字串的有意義名稱。VBScript 定義了許多內建常數。您可以在 VBScript 程式語言參考中找到關於這些內建常數的資訊。

建立常數

在 VBScript 中，您可以使用 Const 陳述式建立使用者自訂的常數。藉由 Const 陳述式，您就可以使用一個有意義的名稱來建立一個字串或數字常數，並給它們指定值。舉例來說，像：

Const MyString = "This is my string."
Const MyAge = 49

請注意，字串文字是放在引號 (" ") 中。引號是分辨字串值和數值最明顯的一個方法。用井字符號 (#) 把日期表示式和時間表示式括起來表示。比如像：

Const CutoffDate = #6-1-97#

您可以採用不同的命名結構來辨別常數和變數。這樣做可以避免您在執行 指令碼 時犯下重複指定常數值的錯誤。舉例來說，您可以在常數名稱前加上「vb」或「con」當作字首，或者常數名稱全部用大寫字母來命名。當您在開發比較複雜的 指令碼時，區分常數和變數可以減少不少困擾。


VBScript 運算子

VBScript 具有完整的運算子，包括算術運算子、比較運算子、串連運算子和邏輯運算子。

運算子優先順序

當一個運算式中有數個動作發生時，各部分的動作會在預先決定的順序下完成，而此順序就是運算子優先順序。括號則可推翻優先順序的等級，並且強迫運算式的某些部分必須優先執行。括號內要比括號外部的先執行。然而，括號中運算子優先順序與正常情況是一樣的。

當運算式有超過一種運算子時，會先執行算術運算子，其次是比較運算子，而後才是邏輯運算子。比較運算子優先順序全都是相同的，也就是說依照出現的順序由左到右依序執行。而算術和邏輯運算子則必須依照下列的優先順序，依序執行：

算術

描述 | 符號
指數運算 | ^
負數 | -
乘法 | *
除號 | /
整數除號 | \
模組算術 | Mod
加號 | +
減號 | -
字串串連 | &

比較

描述 | 符號
相等 | =
不等 | <>
小於 | <
大於 | >
小於或相等 | <=
大於或相等 | >=
物件等價 | Is

邏輯

描述 | 符號
邏輯否定 | Not
邏輯連結 | And
邏輯性分離 | Or
邏輯性互斥 | Xor
邏輯等價 | Eqv
邏輯隱含式 | Imp

若乘號和除號同時存在於運算式中，則計算時的順序就是依照其由左到右的位置來決定。同樣地，若加號和減號同時存在於一個運算式中，計算時的順序就是依照其由左到右的位置來決定。

字串串連運算子 (&) 不是算術運算子，但是在優先順序上它會落在所有算術運算子之後，且在所有比較運算子之前。Is 運算子是一個物件引用比較運算子。它並非比較物件或是它們的值；而是檢查兩個物件是否引用到相同的物件。


使用條件陳述式控制程式的執行

您可以使用條件陳述式和迴圈陳述式來控制 指令碼 的流程。使用條件陳述式，您就可以撰寫出執行選擇和重複動作的 VBScript 程式碼。VBScript 中包含了下列的條件陳述式：

  • If...Then...Else 陳述式
  • Select Case 陳述式

使用 If...Then...Else 做選擇

If...Then...Else 陳述式會檢查條件是 True 或是 False，然後再依據這個結果來執行一個或更多個陳述式。條件通常是一個使用比較運算子的運算式，它會比較兩個數值或變數。關於比較運算子的更進一步資訊，請參考比較運算子。您可以在 If...Then...Else 陳述式中依您所需的使用多層巢狀結構。

在條件為 True 時執行陳述式

若您在條件為 True 時只要執行一個陳述式，您就可以使用 If...Then...Else 陳述式的單行語法。下面就是一個單行語法的範例。請注意，這個範例省略了 Else 關鍵字。

 Sub FixDate()
    Dim myDate
    myDate = #2/13/95#
    If myDate < Now Then myDate = Now
End Sub

如果您要執行超過一行以上的程式碼時，您就必須使用多行 (或區塊) 語法。這個語法包含了一個 End If 陳述式，如下例所示：

Sub AlertUser(value)
   If value = 0 Then
      AlertLabel.ForeColor = vbRed
      AlertLabel.Font.Bold = True
      AlertLabel.Font.Italic = True
   End If
End Sub

在條件是 True 時執行某幾個陳述式，條件是 False 時執行其它的陳述式

您可以使用 If...Then...Else 陳述式來定義兩個執行區塊：一個區塊在條件是 True 時執行，另一個則是在條件是 False 時執行。

 Sub AlertUser(value)
   If value = 0 Then
      AlertLabel.ForeColor = vbRed
      AlertLabel.Font.Bold = True
      AlertLabel.Font.Italic = True
   Else
      AlertLabel.Forecolor = vbBlack
      AlertLabel.Font.Bold = False
      AlertLabel.Font.Italic = False
   End If
End Sub

在多種選擇中做決定

一個 If...Then...Else 陳述式的變形可以讓您從多種選擇中選取一種選擇。加上 ElseIf 子句的 If...Then...Else 陳述式可以擴充其功能，這樣能讓您的程式有多種不同的流程。舉例來說：

Sub ReportValue(value)
   If value = 0 Then
      MsgBox value
   ElseIf value = 1 Then
      MsgBox value
   ElseIf value = 2 then
      Msgbox value
   Else
      Msgbox "Value out of range!"
   End If

您可以依您所需的加上多個 ElseIf 子句以提供其它選項。ElseIf 子句用的太多常常會變成一種麻煩。一個在多種選項之中選擇的較佳辦法是使用 Select Case 陳述式。

使用 Select Case 做選擇

Select Case 結構提供了 If...Then...ElseIf 外的另一種方式，讓您從多個陳述式區塊中選擇一個出來執行。Select Case 陳述式提供的功能和 If...Then...Else 陳述式類似，但它可使程式更加的有效率，且可讀性更高。

Select Case 結構在其前端有一個測試運算式，這個運算式只會被執行一次。執行完的結果將被拿來和每一個 Case 的值做比較。如果有相符的情形時，如同下列範例，這個 Case 區塊中的陳述式就會被執行：

 Select Case Document.Form1.CardType.Options(SelectedIndex).Text
   Case "MasterCard"
      DisplayMCLogo
      ValidateMCAccount
   Case "Visa"
      DisplayVisaLogo
      ValidateVisaAccount
   Case "American Express"
      DisplayAMEXCOLogo
      ValidateAMEXCOAccount
   Case Else
      DisplayUnknownImage
      PromptAgain
End Select

請注意到 Select Case 結構只在前端執行一個運算式。相反的， If...Then...ElseIf 結構則可在每一個 ElseIf 陳述式後面執行一個不同的運算式。只有在每一個 ElseIf 陳述式使用的都是同一個運算式時，您才能用 Select Case 結構取代 If...Then...ElseIf 結構。


使用程式碼來執行迴圈

迴圈可以讓您重複的執行一群陳述式。有一些迴圈是在條件變成 False 之前，會一直重複執行陳述式；另一些則可能是在條件變成 True 時才停止迴圈。此外，還有一些迴圈是重複了某個固定次數之後就會停止。

VBScript 中可以使用下列的迴圈陳述式：

  • Do...Loop：當條件是 True 時執行迴圈，也可以是執行到條件為 True 時，停止迴圈。
  • While...Wend：當條件是 True 就執行迴圈。
  • For...Next：使用一個計數器，讓陳述式重複執行某個固定的次數。
  • For Each...Next：對每個集合物件中的項目或陣列中的元素重複執行一次迴圈。

使用 Do 迴圈

您可以使用 Do...Loop 陳述式來重複執行一群陳述式數次。直到條件是 True 時，或條件變成 True 為止，迴圈會不斷的重複。

當條件是 True 時重複陳述式

在 Do...Loop 陳述式中，需用 While 關鍵字來檢查條件。您可以在進入迴圈之前就先檢查(就像以下的 ChkFirstWhile 例子)，或在迴圈至少執行過一次之後再檢查(像是 ChkLastWhile 的例子)。在 ChkFirstWhile 程序中，如果 myNum 不是設成 20，而是設成 9，那麼在迴圈中的陳述式就永遠不會被執行。在 ChkLastWhile 程序中，迴圈裡的陳述式只會被執行一次。因為它的條件已經是 False 了。

 Sub ChkFirstWhile()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do While myNum > 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   MsgBox "The loop made " & counter & " repetitions."
End Sub

Sub ChkLastWhile()
   Dim counter, myNum
   counter = 0
   myNum = 9
   Do
      myNum = myNum - 1
      counter = counter + 1
   Loop While myNum > 10
   MsgBox "The loop made " & counter & " repetitions."
End Sub

重複執行陳述式，直到條件變成 True 為止

在 Do...Loop 陳述式中，有兩種方法可以使用 Until 關鍵字檢查條件。您可以在進入迴圈前先檢查條件(像是以下的 ChkFirstUntil 例子)，或在迴圈至少執行過一次後再檢查(像是 ChkLastUntil 的例子)。只要在條件是 False 時，迴圈就會執行。

Sub ChkFirstUntil()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do Until myNum = 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   MsgBox "The loop made " & counter & " repetitions."
End Sub

Sub ChkLastUntil()
   Dim counter, myNum
   counter = 0
   myNum = 1
   Do
      myNum = myNum + 1
      counter = counter + 1
   Loop Until myNum = 10
   MsgBox "The loop made " & counter & " repetitions."
End Sub

在迴圈中跳離 Do...Loop 陳述式

您可以在 Do...Loop 中使用 Exit Do 陳述式來跳離迴圈。因為通常您只會希望在某些特定的情形發生時，才要跳離迴圈，比如像要避免無窮迴圈時，您應該把 Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時，迴圈就會照常執行。

在下面的例子中，myNum 將會被指定成一個會造成無窮迴圈的值。其中的 If...Then...Else 陳述式將會檢查這個條件，以避免無窮迴圈的發生。

 Sub ExitExample()
   Dim counter, myNum
      counter = 0
      myNum = 9
      Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
      Loop
      MsgBox "The loop made " & counter & " repetitions."
End Sub

使用 While...Wend

在 VBScript 中有提供 While...Wend 陳述式，這是為了用慣了 While...Wend 陳述式的使用者所提供的。不過，因為使用 While...Wend 較缺乏彈性，所以我們還是建議您使用 Do...Loop 來取代。

使用 For...Next

您可以使用 For...Next 陳述式使一整區塊的陳述式重複執行某個固定的次數。在 For 迴圈中，有一個用來當作計數器的變數。每執行一次迴圈時，這個變數的值就會遞增或是遞減。

下列範例將會呼叫 MyProc 程序 50 次。這個 For 陳述式指定了一個計數器變數 x，還有其起始值和結束值。Next 陳述式會使計數器的值遞增 1。

 Sub DoMyProc50Times()
   Dim x
   For x = 1 To 50
      MyProc
   Next
End Sub

使用 Step 關鍵字，您就可以隨您的需要來遞增或遞減計數器變數。在下面的例子中，計數器變數 j 會在每次迴圈執行後遞增 2。當迴圈執行完時，變數 total 將是 2、4、6、8 和 10 的總合。

 Sub TwosTotal()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "The total is " & total
 End Sub

如果您要使計數器變數遞減，請使用負的 Step 值。此時，結束值必須小於起始值。在下面例子中，計數器變數 myNum 會在每次迴圈執行過後遞減 2。當這個迴圈結束時，變數 total 的值將會是 16、14、12、10、8、6、4 和 2 的總合。

 Sub NewTotal()
   Dim myNum, total
   For myNum = 16 To 2 Step -2
      total = total + myNum
   Next
   MsgBox "The total is " & total
End Sub

您可以使用 Exit For 陳述式在計數器到達其結束值之前跳離 For...Next 陳述式。因為通常您只會希望在某些特定的情形發生時，才要跳離迴圈，比如像發生錯誤時。所以您應該把 Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時，迴圈就會照常執行。

使用 For Each...Next

For Each...Next 和 For...Next 迴圈非常相似。它們的不同之處在於，For Each...Next 迴圈是針對集合物件中的每一個物件或陣列中的每一個元素重複執行一次迴圈，而後者是依指定的數字重複執行迴圈的次數。當您不知道集合物件中有幾個元素時，For Each...Next 迴圈會特別的有用。

在下面的 HTML 程式碼範例中，Dictionary 物件的功用是要將文字放到數個文字方塊中。

 <HTML>
<HEAD><TITLE>Forms and Elements</TITLE></HEAD>
<Script LANGUAGE="VBScript">
<!--
Sub cmdChange_OnClick
   Dim d   'Create a variable
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "0", "Athens"   'Add some keys and items
   d.Add "1", "Belgrade"
   d.Add "2", "Cairo"

   For Each I in d
      Document.frmForm.Elements(I).Value = D.Item(I)
   Next
End Sub
-->
</Script>
<BODY>
<CENTER>
<FORM NAME="frmForm"

<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Button" NAME="cmdChange" VALUE="Click Here"><p>
</FORM>
</CENTER>
</BODY>
</HTML>


VBScript 程序

VBScript 有二種不同的程序：Sub 程序和 Function 程序。

Sub 程序

一個 Sub 程序是指一連串 VBScript 陳述式 (由 Sub 和 End Sub 陳述式所包圍) 但執行後不傳回值。Sub 程序可以代入引數 (由呼叫的程序傳過來的常數、變數、或運算式)。若 Sub 程序不含任何引數，則須在 Sub 陳述式加上一個空括弧 ()。

下面的 Sub 程序使用二個內建的 VBScript 函數， MsgBox 和 InputBox，來顯示資訊給使用者。再根據這些資訊來計算結果。這些計算是使用一個 VBScript 的 Function 程序來完成的。在接下來的討論之後，會列出這個 Function 程序。

 Sub ConvertTemp()
   temp = InputBox("Please enter the temperature in degrees F.", 1)
   MsgBox "The temperature is " & Celsius(temp) & " degrees C."
End Sub

Function 程序

一個 Function 程序是指一連串 VBScript 陳述式，它由 Function 和 End Function 陳述式所包圍。Function 程序與 Sub 程序相似，但它會於執行後傳回值。Function 程序可以代入引數 (由呼叫的程序傳過來的常數、變數、或運算式)。若 Function 程序不含任何引數，則需在 Function 陳述式加上一個空括弧 ()。Function 把傳回值指定給程序中的一個或多個陳述式。一般 Function 的傳回型態是 Variant。

在下面的例子中，Celsius 函數是把華氏的度數轉成攝氏。當 ConvertTemp Sub 程序呼叫此函數時，把帶有引數值的變數傳給函數。而計算後的結果會傳回給呼叫的程序，並顯示在訊息方塊中。

 Sub ConvertTemp()
     temp = InputBox("Please enter the temperature in degrees F.", 1)
     MsgBox "The temperature is " & Celsius(temp) & " degrees C."
 End Sub

 Function Celsius(fDegrees)
     Celsius = (fDegrees - 32) * 5 / 9
 End Function

從程序傳入或獲得資料

每一個資料都是透過引數傳給程序的。引數可當成是預留給傳送到程序的資料位置。您可以用任何有效的變數名稱來作為參數命名。無論您是建立一個 Sub 陳述式或 Function 陳述式，您都必須在程序名稱之後加上括弧。任何在括弧內的引數都是以逗號來隔開的。例如，以下例子的 fDegrees 是預留給要傳到 Celsius 函數轉換的值：

 Function Celsius(fDegrees)
   Celsius = (fDegrees - 32) * 5 / 9
End Function

要從程序中獲得資料，就得使用 Function。切記，Function 程序可傳回值；Sub 程序不傳回值。

在程式碼中使用 Sub 和 Function 程序

在程式碼中，Function 必須使用於變數指定的右邊或放在運算式中。例如：

Temp = Celsius(fDegrees)

-或-

MsgBox "The Celsius temperature is " & Celsius(fDegrees) & " degrees."

從另一個程序中呼叫 Sub 程序時，您只要在程序名稱加上所需的引數即可，引數須以逗號來隔開。不一定要使用 Call 陳述式，但若您要使用它，您必須把引數包含於括弧中。

下面為二種呼叫 MyProc 程式的方法。一個是使用 Call 陳述式的，一個則沒有。而二者所做的事情是完全一樣的。

Call MyProc(firstarg, secondarg)
MyProc firstarg, secondarg

請注意 當不使用 Call 陳述式呼叫時，括弧要省略。


VBScript 程式撰寫規格

程式撰寫規格就是一些對您使用 Microsoft Visual Basic Scripting 版開發程式時會有幫助的建議。它包含了下列數項：

  • 物件、變數和程序的命名規格
  • 寫註解時的規格
  • 文字格式和縮排的使用原則

使用一致的程式撰寫規格之主要理由在於可以標準化一個 指令碼 或一組 指令碼 的架構和程式碼樣式。如此一來，您和其它人便可以輕鬆地了解這些程式碼的意義。使用良好的程式撰寫規格，可提高原始程式碼的精確度、可讀性和清晰度，而且可使它與其他程式語言規格更具一致性和直覺性。

常數命名規格

早期的 VBScript 版本不能建立使用者自訂常數。如果需要使用常數時，通常都是以一變數來當作常數，同時使用全部大寫的字母來命名以和一般的變數區別。而每個字之間則使用底線 ( _ ) 字元來做區隔。比如像：

 USER_LIST_MAX
 NEW_LINE

雖然現在這仍是一個辨別常數的可行辦法，但因為現在可以使用 Const 陳述式來建立一個真正的常數，所以您可能會希望改用另一種命名的架構。這個方式混合了大小寫字母，同時在常數之前加了一個「con」當作字首。比如像：

 conYourOwnConstant

變數命名規格

為了提升程式的可讀性和一致性，請您在您的 VBScript 程式碼內的變數名稱前，加上下述的字首。

子型態 | 字首 | 範例
Boolean | bln | blnFound
Byte | byt | bytRasterData
Date (Time) | dtm | dtmStart
Double | dbl | dblTolerance
Error | err | errOrderNum
Integer | int | intQuantity
Long | lng | lngDistance
Object | obj | objCurrent
Single | sng | sngAverage
String | str | strFirstName

變數的有效範圍

變數應該盡可能的定義在最小的有效範圍之中。VBScript 變數有下列幾種有效範圍：

有效範圍 | 變數宣告的地點 | 可視性
宣告程序層次。 | 事件，函數，或 Sub 程序。 | 可見範圍在其宣告的程序中
Script 層次 | HTML 網頁的 HEAD 區段，需寫在所有程序之外。 | 指令碼 中的每一個程序都可見。

變數有效範圍字首

當指令碼很大時，加上變數有效範圍字首將可以快速區別變數的有效範圍。一個置於型態字首之前的單一字母之有效範圍字首可以幫我們做到這點，同時又不會過度的增加變數名稱的長度。

有效範圍 | 字首 | 範例
程序層次 | 不必加 | dblVelocity
指令碼 層次 | s | sblnCalcInProgress

有說明性的變數和程序名稱

變數和程序名稱應該使用大小寫混合的命名名稱，同時這個名稱必須能夠說明變數的用途。此外，程序名稱應該以動詞開頭，比如像 InitNameArray 或 CloseDialog。

對於一些經常使用的長名詞，我們建議您使用標準的縮寫，以免名稱過長。一般來說，名稱長度如果超過 32 個字元就很難閱讀。當您使用縮寫時，請在全部的 指令碼 中都保持相同的縮寫方式。舉例來說，如果您在一個 指令碼 或一組 指令碼 中時而用 Cnt，時而用 Count，那麼有時可能會造成困擾。

物件命名規格

下清單格列出了您在撰寫 VBScript 時會遭遇的物件型態及建議的命名規格。

物件型態 | 字首 | 範例
3D Panel | pnl | pnlGroup
Animated button | ani | aniMailBox
Check box | chk | chkReadOnly
Combo box, drop-down list box | cbo | cboEnglish
Command button | cmd | cmdExit
Common dialog | dlg | dlgFileOpen
Frame | fra | fraLanguage
Horizontal scroll bar | hsb | hsbVolume
Image | img | imgIcon
Label | lbl | lblHelpMessage
Line | lin | linVertical
List Box | lst | lstPolicyCodes
Spin | spn | spnPages
Text box | txt | txtLastName
Vertical scroll bar | vsb | vsbRate
Slider | sld | sldScale

程式註解規格

所有的程序都應該以一簡短的註解當作開頭來解釋程序的功用。這些說明不必解釋程式製作的細節(它怎麼做到的)， 因為這些內容可能時時會改變。如此一來，您就不必做一些不必要的註解維護工作，或是讓您的註解錯誤百出。這些程式碼本身和所有必要的行間註解就足以說明製作的方式。

當要傳遞到程序中的引數之目的不是很明顯時，或是程序預期引數的值應該介於某個範圍之間時，您就應該在註解中說明。函數的傳回值以及會被程序更動的變數，特別是經由引用的引數，也都應該寫在程序的前頭的註解中。

程序的開頭註解應該包含下列幾個區段標題。您可以參考以下「格式化您的程式碼」中的例子。

區段標題 | 註解內容
目的 (Purpose) | 程序的功用 (不是如何達成其功用)。
假設 (Assumptions) | 列出任何會影響這個程序的外部變數、控制項或其它元件。
影響 (Effects) | 列出這個程序會影響的任何外部變數、控制項或其它元件。
輸入 (Inputs) | 解釋每一個沒有明顯功能的引數。每一個引數都應該自成一行，同時使用行間註解。
傳回值 (Return Values) | 解釋傳回值的意義。

請記得下列幾個要點：

  • 每一個重要變數的宣告都應該伴隨著一個行間註解來說明變數的功用。
  • 變數、控制項和程序的名稱都應該要令人可以一目了然，以確保行間註解只需要用在一些較複雜的程式細節部分。
  • 在 指令碼 的開頭，您應該包含一段描述整個 指令碼 的概觀，同時列舉物件、程序、演算法、對話方塊以及其它和系統相關的事項。有時用一段虛擬碼來說明演算法可能會有不小的幫助。

格式化您的程式碼

盡可能保留螢幕的空間，但是同時要讓您的程式格式可以反映程式的邏輯結構和巢狀架構。這裡有幾個建議：

  • 用四個空格縮排標準的巢狀區塊。
  • 用一個空格縮排一個程序的概觀註解。
  • 緊接在概觀註解後的最高層級陳述式用四個空格縮排，其中的巢狀區塊則再用四個空格縮排。

下列的程式碼沿襲了 VBScript 的編碼慣例。

'*********************************************************
' 目的: 在UserList 陣列中安置
'          指定使用者的第一次出現。
' 輸入: strUserList(): 要搜尋的使用者清單。
'         strTargetUser: 要搜尋的使用者名稱。
' 傳回: 在strUserList 陣列中
'          strTargetUser 第一次出現的索引。
'          如果找不到目標使用者，就會傳回 -1。
'*********************************************************
Function intFindUser (strUserList(), strTargetUser)
   Dim i   ' 迴圈計數器。
   Dim blnFound   ' 發現目標的旗標
   intFindUser = -1
   i = 0   ' 初始化迴圈計數器
   Do While i <= Ubound(strUserList) and Not blnFound
      If strUserList(i) = strTargetUser Then
         blnFound = True   ' 設定旗標為True
         intFindUser = i   ' 把傳回值設定給迴圈計數器
      End If
      i = i + 1   ' 遞增迴圈計數器
   Loop
End Function


VBScript 和表單

簡單的確認

您可使用 Visual Basic Scripting 版處理許多您常在伺服器上執行的表單，同時也可以執行一些無法在伺服器上處理的工作。

這裡有一個對客戶端做簡單確認的範例程式。這些 HTML 程式碼用來產生一個文字方塊和按鈕。當您使用 Microsoft® Internet Explorer 來檢視由下列程式碼所產生的網頁時，您將會看到一個小小的文字方塊，同時緊接著一個按鈕。

<HTML>
<HEAD><TITLE>簡單的確認</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Submit_OnClick
  Dim TheForm
  Set TheForm = Document.ValidForm
  If IsNumeric(TheForm.Text1.Value) Then
    If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
      MsgBox "請輸入 1 到 10 中的任一值！"
    Else
      MsgBox "感謝您！"
    End If
Else
    MsgBox "請輸入數字！"
  End If
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>簡單的確認</H3><HR>
<FORM NAME="ValidForm">
輸入 1 到 10 中的任一值：
<INPUT NAME="Text1" TYPE="TEXT" class='9v'>
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="傳送">
</FORM>
</BODY>
</HTML>

這個文字方塊和簡單的 VBScript 網頁上的範例之不同處，在於此文字方塊的 Value 屬性是用來檢查輸入值。程式碼必須以文字方塊名稱的引用來取得 Value 屬性。

您可以每次都寫出完整的引用 Document.ValidForm.Text1。然而，當您有多重表單控制項的引用時，您就可以使用下面的方法。首先先宣告一個變數。然後使用 Set 陳述式指定一個表單給變數 TheForm。一般的指定陳述式，像是 Dim，在這裡就無法使用；您必須用 Set 來保留對物件的引用。

使用數字值

請注意，這個範例是直接使用數字來測試該值：它使用 IsNumeric 函數來確認在文字方塊中的字串是否為數字。雖然 VBScript 可以自動轉換字串和數字，不過在測試使用者輸入的值之前，先檢查資料的子型態並依需要使用轉換函數。當使用文字方塊的數值來做加法運算時，數值會被精確地轉換成數字。因為 (+) 運算子符號可以代表加號和字串連結。例如，假設 Text1 等於「1」，而 Text2 等於「2」，您會看到以下的結果：

A = Text1.Value + Text2.Value   ' A is "12"
A = CDbl(Text1.Value) + Text2.Value   ' A is 3

從伺服器確認與傳回資料

以下為使用按鈕控制項的簡單確認範例。在這範例中，當您按下傳送控制項時，將不會看到資料被檢查—也就是說每一個動作將立即傳送到伺服器中。若您在傳送控制項中檢查資料，它就不會將資料傳送到伺服器。為了避免這種情形，需多加一行的程式碼：

<SCRIPT LANGUAGE="VBScript">
<!--
Sub Button1_OnClick
 Dim TheForm
 Set TheForm = Document.ValidForm
 If IsNumeric(TheForm.Text1.Value) Then
    If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
      MsgBox "請輸入1到10的任何一個數字。"
    Else
      MsgBox "謝謝您。"
      TheForm.Submit   ' Data correct; send to server.
    End If
 Else
    MsgBox "請輸入一個數值。"
 End If
End Sub
-->
</SCRIPT>
</SCRIPT>

當資料正確並要傳送到伺服器時，程式碼會呼叫在表格物件中的 Submit 方法。從那裡，伺服器可以掌握到資料就如同從其他地方傳來的一樣 — 除非資料在傳送前就是對的。可在 Microsoft® 網站 (http:www.microsoft.com) 上的 Internet Explorer Scripting 物件模型文件取得有關 Submit 方法和其它方法的完整資訊。

到此，您只看到了標準 HTML <FORM> 物件。Internet Explorer 也能讓您完全發揮 ActiveX® 控制項 (先前稱為 OLE 控制項) 及 Java物件的威力。


Internet Explorer 中的 VBScript

Visual Basic Scripting Edition

Internet Explorer中的VBScript

簡單的 VBScript 網頁

VBScript 和表單

在VBScript中使用物件


在 VBScript 中使用物件

使用物件

不論您是使用 ActiveX® 控制項 (早期稱為 OLE 控制項) 或是 Java物件，在 Microsoft Visual Basic Scripting 版和 Microsoft® Internet Explorer 皆以相同的方法來掌控。如果您已經使用 Internet Explorer，同時在 Label 中安裝控制項，請您參考由下列程式所產生的網頁。

請您使用 <OBJECT> 標記來載入物件，且使用 <PARAM> 標記來設定初始屬性值。如果您是 Visual Basic 程式設計師，您將明白使用 <PARAM> 標記就如同在表單控制項中設定初始屬性一樣。例如，以下是在一個網頁中加入 ActiveX Label 控制項所設定的 <OBJECT> 和 <PARAM> 標記屬性：

<OBJECT
   classid="clsid:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"
   id=lblActiveLbl
   width=250
   height=250
   align=left
   hspace=20
   vspace=0
>
<PARAM NAME="Angle" VALUE="90">
<PARAM NAME="Alignment" VALUE="4">
<PARAM NAME="BackStyle" VALUE="0">
<PARAM NAME="Caption" VALUE="A Simple Desultory Label">
<PARAM NAME="FontName" VALUE="Verdana, Arial, Helvetica">
<PARAM NAME="FontSize" VALUE="20">
<PARAM NAME="FontBold" VALUE="1">
<PARAM NAME="FrColor" VALUE="0">
</OBJECT>

您可以如同在表單控制項中一樣取得物件屬性、設定屬性、和呼叫方法。以下所示範的程式碼，包含 <FORM> 中之控制項以提供您靈活運用 Label 的二種屬性：

<FORM NAME="LabelControls">
<INPUT TYPE="TEXT" NAME="txtNewText" class='9v'5>
<INPUT TYPE="BUTTON" NAME="cmdChangeIt" VALUE="更改文字">
<INPUT TYPE="BUTTON" NAME="cmdRotate" VALUE="旋轉文字">
</FORM>

在表單的定義之中，cmdChangeIt 按鈕的事件程序改變了標籤文字的屬性：

<SCRIPT LANGUAGE="VBScript">
<!--
Sub cmdChangeIt_onClick
   Dim TheForm
   Set TheForm = Document.LabelControls
   lblActiveLbl.Caption = TheForm.txtNewText.Value
End Sub
-->
</SCRIPT>

這個程式碼適合運用在控制項和表單中的設定值，如同簡單的確認。

在 Internet Explorer 中，有多種 ActiveX 控制項可供使用。您可以找到相關屬性、方法、事件的完整資訊，與在 Microsoft® 網站 (http://www.microsoft.com) 中用於控制項的類別識別碼 (CLSID)。您也可以在 Internet Explorer 4.0 Author's Guide 與 HTML Reference 網頁中找到有關 <OBJECT> 標記的資料。

備註 早期發表的 Internet Explorer 需要大括弧 ({}) 括住屬性，而且不需要遵守 W3C 規格。若使用大括弧現在則會產生「此網頁使用了過期的 <OBJECT> 標記」的訊息。


早期發展

通用運算式可回溯到早期人類神經系統如何運作的研究。華倫麥考路克（Warren McCulloch）和華特比玆（Walter Pitts）這一對神經心理學者發展出一套數學方式，來描述這些神經網路。

1956年，美國數學家史蒂芬克里尼（Stephen Kleene）以先前麥考路克和比玆的研究為基礎，發表了一篇名為「神經網路的事件發表」（“Representation of Events in Nerve Nets”）的文章，文章中介紹了通用運算式的概念。通用運算式是一種他稱之為「通用集合代數」的運算式。「通用運算式」就此誕生。

後來他的研究給了肯特湯普森（Ken Thompson，Unix 主要發明人）早期發展搜尋運算邏輯一些幫助。通用運算式第一個可應用的程式是在 Unix 上的 qed 編輯程式。

最後如他們所說的，這成為歷史的一部份。從那時起，通用運算式已經是搜尋工具和文字導向的編輯程式中重要的部分了。


通用運算式的應用

在一個典型的尋找取代程序中，您必須提供與想要找的文字一模一樣的內容。這樣的技巧可能足夠應付靜態文字中單純的尋找和取代工作，但它很可能缺乏彈性，並使搜尋動態文字變得困難。

使用通用運算式，您可以：

  • 於一字串中測試搜尋模式。例如，您可測試一輸入字串以得知是否字串中有符合電話號碼格式或信用卡號碼格式。這稱為資料核定。
  • 取代文字。您可以使用通用運算式來找出文件中特定的文字，然後可完全地移除它或用其他文字來取代。
  • 依照尋找格式從一字串中擷取一子字串。您可以於文件或輸入欄位中找到特定文字。

例如，如果您需要搜尋一整個 web 站台以移除某些過時的內容，並更換某些 HTML 格式標籤，您可使用通用運算式來測試各個檔案，以確定您想要的內容或 HTML 格式標籤存在於其中的檔案。這樣，您可以縮小檔案範圍到只含有需要被移除或改變內容的檔案。然後您可以用通用運算式來移除過時的內容，最後再使用通用運算式來搜尋和置換需要被更改的標籤。

另一個通用運算式的好處是當遇到不以字串處理能力見長的語言時。VBScript (一個 Visual Basic 的子集) 擁有豐富的字串處理能力。 Jscript像 C 語言一樣不含有這樣的功能。通用運算式提供了 Jscript 可觀的字串處理能力。然而，通用運算式在 VBScript 中也可能更有效能，可允許您在一個單一運算式中執行多個字串操作。


通用運算式語法

通用運算式是一種文字模式，包含了一般字元 (例如 a 到 z 的字元 ) 和中繼字元（metacharacter）的特殊字元。這個模式在尋找文字時描述了一或多個字串。通用運算式就像是用來跟被搜尋字串比對的字元樣板。

下面是幾個您可能會遇到的通用運算式範例：

JScript | VBScript | 符合
/^\[ \t]*$/ | "^\[ \t]*$" | 比對一空白行。
/\d{2}-\d{5}/ | "\d{2}-\d{5}" | 核定一個 ID 由 2 位元數字、連字號和另一 5 位元數字組成的數字。
/<(.*)>.*<\/\1>/ | "<(.*)>.*<\/\1>" | 比對一個HTML 標記。

下面表格包含了完整的中繼字元清單，和它們在通用運算式內的作用：

字元 | 說明
\ | 標示下一個字元為一個特殊字元、常值、回溯值，或是一個8進位的逸出字元。例如，'n與'字元'n'相符。'\n' 與換行字元相符。序列'\\' 與"\" 相符，而'\(' 與'("相符。
^ | 比對輸入字串開始的位置。如果 RegExp 物件已設定 多行（Multiline）屬性， ^ 也會比對'\n'或 '\r'之後的位置。
$ | 比對輸入字串結束的位置。如果 RegExp 物件已設定 多行（Multiline）屬性，$ 也會比對'\n'或 '\r'之前的位置。
* | 比對先前的子運算式 0 次或多次。 舉例來說， "zo*" 與 "z" 及 "zoo" 相符。* 相當於{0,}。
+ | 比對先前的子運算式 1 次或多次。 舉例來說，'zo+' 與 "zo"及 "zoo" 相符,但跟 "z"不相符。+ 相當於{1,}。
? | 比對先前的子運算式 0 次或 1 次。 舉例來說， "do(es)?" 跟 "do" 在 "do" 或 "does" 中相符。? 等於 {0,1}。
{n} | n 是一個非負數的整數，必須完全符合 n 次。例如，'o{2}' 並不符合 Bob 中的 'o'，但可符合"food"中的前兩個 o。
{n,} | n 是一個非負數的整數. 至少符合n 次。 舉例來說，'o{2,}' 跟"Bob"中的"o"不符， 且 與"foooood"中所有o相符 。'o{1,}'等於 'o+'。'o{0,}' 等於 'o*'。
{n,m} | m 和 n是非負數的整數，而且 n <= m。符合最少n次而符合最多 m 次。舉例來說， 'o{1,3}' 跟"fooooood"中前三個 0 相符。 'o{0,1}' 等於'o?'。注意逗號和號碼間不可有空格。
? | 當這個字元緊接於任何其他次數符號(*, +, ?, {n}, {n,}, {n,m})時，其比對模型式是不強烈。不強烈模式跟搜尋字串幾乎不相符，可是預設的 強烈模式 卻跟搜尋字串幾乎完全相符。 舉例來說， 字串 "oooo"，'o+?' 跟單一的 "o"相符, 而 'o+'跟所有的 'o' 相符。
. | 與每一個字元相符，除了字元"\n"以外。要與含有 '\n'的字元相符， 請使用 '[.\n]'的模式。
(pattern) | 比對模式並擷取相符的項目。擷取的相符項目可以在相符項目結果中的集合物件找到，只要利用 SubMatches 在 VBScript 中的集合物件或 Jscript中$0?B>$9的屬性。 用 '\(' 或 '\)' 來比對括號字元 ( )。
(?:pattern) | 比對模式但並不記錄相符的項目。也就是，它是一個非紀錄相符項目，並不儲存作日後使用。這對用or 字元 (|) 來結合模式的好幾部分很有用。例如，'industr(?:y|ies) 較 'industry|industries'來的更方便。
(?=pattern) | 在字串比對模式開始前，正預看可以從任何角度比對搜尋字串。這樣就稱為一個非擷取的相符項目，也就是說，這並非用來儲存作為日後可能的使用。舉例來說，'Windows (?=95|98|NT|2000)' 與"Windows 2000"中的"Windows"相符，但不符合 "Windows 3.1" 中的 "Windows"。預看並不會浪費字元，也就是說，再找到一個相符項目之後，會馬上開始找尋下一個項目，而不會等找到預看所需的字元後才開始搜尋。
(?!pattern) | 反預看符合搜尋字串與比對模式不相符的任何部分。這樣就稱為一個非擷取的相符項目，也就是說，也就是說，這並非擷取來作為日後可能的使用。舉例來說，'Windows (?!95|98|NT|2000)'符合"Windows 3.1 "裡的 "Windows"，但不符合 "Windows 2000 " 裡的 "Windows"。預看並不會浪費字元，也就是說，再找到一個相符項目之後，會馬上開始找尋下一個項目，而不會等找到預看所需的字元後才開始搜尋。
x|y | 符合x 或 y。例如，'z|food' 符合"z"或"food"。'(z|f)ood' 符合"zoo" 或 "food"。
[xyz] | 一組符合任何附屬字元的字元集。例如'[abc]' 符合"plain"裡的'a'。
[^xyz] | 一組符合任何附屬字元的反字元集。例如，'[^abc]'符合"plain"裡的'p'。
[a-z] | 這是一個字元範圍。符合某特定範圍中的任何字元。例如，'[a-z]' 符合'a'到'z'範圍裡，任何小寫字母的字元。
[^a-z] | 符合任何不在特定範圍裡的反字元。例如，'[a-z]' 符合任何不在'a' 到'z'範圍裡的字元
\b | 符合文字邊界（word boundary）。也就是說在字與空格之間的位置。例如，'er\b' 符合"never" 裡的'er'但是不符合"verb"裡的'er'。
\B | 符合非文字邊界。'er\B' 符合"verb"裡的'er'但是不符合"never" 裡的'er'。
\cx | 符合x.顯示的控制字元。例如，\cM 符合Control-M或托架傳回字元。x 值必須在A-Z 或a-z的範圍內，否則c 會被視為是一個常值"c"字元。
\d | 符合一個相當於從0-9的數位字元。
\D | 符合一個相當於^0-9的非數位字元。
\f | 符合一個相當於\x0c 和 \cL.的格式傳送字元。
\n | 符合一個相當於\x0a 和 \cJ.的換行字元。
\r | 符合一個相當於\x0d 和 \cM的托架傳回字元。
\s | 符合任何包括空格的虛格，像tab， form-feed等等。相當於[ \f\n\r\t\v]。
\S | 符合任何非虛格空格的字元。相當於[^ \f\n\r\t\v]。
\t | 符合一個欄標字元。相當於\x09 和 \cI。
\v | 符合一個垂直欄標字元。相當於\x0b 和\cK。
\w | 符合任何含底線的字符元。相當於'[A-Za-z0-9_]'。
\W | 符合任何非字符元的字元。相當於'[^A-Za-z0-9_]'。
\xn | 符合16進位的逸出值n。16進位的逸出值一定要是2位數。例如，'\x41' 符合"A"。'\x041'相當於'\x04' & "1"。這使的ASCII 程式碼可以在通用運算式中使用。
\num | 符合正整數的num。可以回溯以往的相符項目。例如'(.)\1' 符合2個相同連續的字元。
\n | 確認到底是八進位的逸出值還是回溯值。如果在\n 之前已經擷取了至少n 個子運算式，n就是一個回溯值。但如果n是一個從0-7的八進位數位值，它就是一個逸出值。
\nm | 確認到底是八進位的逸出值還是回溯值。如果在\nm 之前已經擷取了至少nm 個子運算式，nm 就是回溯值，後面緊跟著常值 m。如果上述情形不存在，那麼當 n 和 m 是 0-7 的數值時，\nm 符合八進位的逸出值。
\nml | 當 n 是0-3 的八進位數位值時，\nml 符合八進位的逸出值，此時 m 和 l 都是 0-7 的八進位數位值。
\un | 符合Unicode 字元的n，用來表示四個十六進位位元。例如， \u00A9 符合著作權符號 (©)。


建立一個通用運算式

通用運算式的建構方式和數學運算式一樣。也就是小的運算式經由各種中繼字元和運算子來組成較大的運算式。

您靠把各種運算式模式的元件擺在一對界定字元之間來建構一個通用運算式。在 Jscript 中，界定字元是一對斜線 (/) 字元。例如：

/運算式/

VBScript則由一對引號 ("")來界定通用運算式。例如：

"運算式"

在上述兩個例子中，通用運算式模式（運算式） 是儲存在 RegExp 物件的 Pattern 屬性中。

通用運算式的元件可以是個別字元、一組字元、某一範圍的字元、字元間的選項或是上述各種的組合。


一般字元

一般字元包含了所有可列印和不是明顯設計成中繼字元的不可列印字元。包括了大寫和小寫字母、所有數字、所有標點符號和某些象徵符號。

最簡單的通用運算式是在搜尋字串中符合本身的單一、一般字元。例如，一個單一字元模式 'A' 符合字母'A'，不論它出現在搜尋字串的何處。這裡是單一字元通用運算式模式的幾個例子：

/a/
/7/
/M/

VBScript 版中比對的單一字元通用運算式是：

"a"
"7"
"M"

您可以結合一定數目的單一字元形成較大的運算式。例如，下面的JScript 通用運算式就只是由結合單一字元 'a'、'7'和'M'所組成的運算式。

/a7M/

VBScript 版本比對的運算式是：

"a7M"

注意不能有連結運算子。您只要加入一字元於其他字元之後即可。


特殊字元 (通用運算式)

JScript and VBScript Regular Expressions

特殊字元

有一些中繼字元，在比對它們時要特別的處理。要比對這些特殊字元，您必須先跳出這些字元，也就是在它們之前使用斜線字元 (\)。下面的表格顯示那些特殊字元和意義：

特殊字元 | 註解
$ | 比對輸入字串結束的位置。如果RegExp物件已設定多行（Multiline）屬性，$ 也會比對'\n'或 '\r'之前的位置。想要比對$字元本身，請使用\$。
( ) | 標出子運算式的開頭和結尾。子運算式為了日後使用而擷取。想要比對這些字元，請使用\( 和 \)。
* | 比對先前的子運算式0次或多次。想要比對* 字元，請使用 \* 。
+ | 比對先前的子運算式1次或多次。想要比對+字元，請使用 \+ 。
. | 符合除了換行字元 \n 外的任何一個字元。要比對.，請使用 \ 。
[ | 標出方括號運算式的開頭。 要比對 [，請使用 \[ 。
? | 比對之前的子運算式0次或1次，或是指出一個不強烈 的次數符號。要比對 ? 字元，請使用\?。
\ | 標示下一個字元為一個特殊字元、常值、回溯值，或是一個8進位的逸出字元。例如，'n與'字元'n'相符。'\n' 與換行字元相符。序列'\\' 與"\" 相符，而'\(' 與'("相符。
^ | 比對輸入字串開頭的位置，除了當使用在方括弧運算式中時會翻轉字元集之外。要比對^字元，請使用 \^。
{ | 標示次數運算式的開頭。要比對{，請使用 \{ 。
| | 顯示兩個項目間的選項。要比對 |，請使用 \|。


字元比對

句點 (.) 比對一個字串的任何可列印或非列印字元，除了換行字元(\n)。下面的 JScript 通用運算式符合'aac'、'abc' 、 'acc' 、 'adc' 等等，以及 'a1c' 、 'a2c' 、 ' a-c' 和 ‘a#c'：

/a.c/

VBScript 版本的通用運算式是:

"a.c"

如果您嘗試比對一個檔案名稱的字串，其中含有一個句點 (.) 。您需在句點前加上一反斜線(\) 字元。下面的JScript 通用運算式符合'filename.ext'：

/filename\.ext/

VBScript 版本的通用運算式如下：

"filename\.ext"

這些運算式仍十分有限。它們只讓您比對任何的單一字元。很多時候，從一清單中比對特定字元是很有用的。例如，假如您有一個含有以數字表示之章節標題的輸入文字，如Chapter 1 ，Chapter 2 等等，您可能會想要找出這些章節標題。

方括號運算式

您可靠加入一或多個各別字元於方括號運算式 ([ 和 ])中來建立比對字元的清單。當字元被方括號包含其中，這清單稱為方括號運算式 。在方括弧中，就如在其他任何地方一樣，一般字元代表的是它們本身，也就是說，它們符合輸入字串中的本身。而在方括號運算式中的大部分特殊字元則失去其意義。下面則有些例外：

  • 如果清單不是第一個物件，']' 字元就會結束它。想要在清單中比對 ']' 字元，請在左方括號 '['之後立即放入這個清單。
  • '\' 字元持續為逸出字元。要比對'\' 字元，請使用 '\\' 。

包含於方括號運算式中的字元只比對通用運算式中方括弧運算式裡同一個位置的單一字元 。下面的JScript 通用運算式比對'Chapter 1' 、 'Chapter 2' 、 'Chapter 3' 、 'Chapter 4' 和 'Chapter 5'：

/Chapter [12345]/

想要比對 VBScript 中相同的章節，請使用下面的敘述：

"Chapter [12345]"

注意'Chapter' 文字和其後的空白固定在方括號內字元的相對位置。方括號運算式只是用來指定緊跟在文字'Chapter'和一個空白之後相對位置的字元集，也就是第9個字元的位置。

如您想要使用某一範圍來表達比對字元，而不是用字串本身來表示，您可以使用連字符號(-)來分隔開始和結束字元的範圍。 個別字元的字元值決定它們在範圍內的相對順序。下面的JScript 通用運算式包含了和上述方括號清單中相同的範圍運算式。

/Chapter [1-5]/

VBScript 相同版本的運算式如下：

"Chapter [1-5]"

當一範圍是用這種方式指定，開始和結束值都包括於此範圍內。重要的是開始值必須依照 Unicode 排列順序，而且擺在結束值之前。

如果您想要在方括號運算式裡包含連字字元，您必須執行下面其中之一的動作：

  • 使用反斜線離開:
    [\-]
  • 將連字符號放到方括弧清單的開頭或結尾。下面的運算式比對所有小寫字母和連字符號：
    [-a-z]
[a-z-]
  • 建立一個範圍 ，其開始字元值小於連字符號且結束字元值等於或是大於連字符號。下面兩個通用運算式符合這個需求：
    [!--]
[!-~]

您也可以在清單的開頭放置一個逸出字元(^)，以找出不在清單或範圍內的所有字元。如果逸出符號出現於清單內任何位置，它便符合本身，也就是它並無特殊意義。下面的JScript 通用運算式比對大於5的章節標題：

/Chapter [^12345]/

VBScript 的用法是:

"Chapter [^12345]"

上述範例中，除了 1, 2, 3, 4 或5，運算式符合任何在第九個位置出現的數字位元。例如， 'Chapter 7' 便符合，'Chapter 9'也符合。

上述範例可用連字符號 (-) 來表示。 對於JScript：

/Chapter [^1-5]/

或是以下的 VBScript 方法：

"Chapter [^1-5]"

一個典型的方括弧運算式使用是指定任何大寫或小寫英文字母字元或是任何數字的比對。下面的JScript 便指定了這樣的比對：

/[A-Za-z0-9]/

相對的 VBScript 運算式是：

"[A-Za-z0-9]"


次數符號

某些時候，您不知道有多少字元要比對。為了解決這樣的不確定性，通用運算式支援次數符號的概念。這些次數符號讓您指定通用運算式所給的元件必須符合您比對多少次數，以使條件成真。

下面表格顯示了各種次數符號和其意義：

字元 | 說明
* | 比對先前的子運算式0次或多次。 舉例來說， "zo*" 與 "z"及"zoo"相符。*相當於{0,}。
+ | 比對先前的子運算式1次或多次。 舉例來說，'zo+' 與 "zo"及 "zoo"相符,但跟"z"不相符。+ 相當於{1,}。
? | 比對先前的子運算式0次或1次。 舉例來說， "do(es)?"跟 "do" 在 "do" 或 "does"中相符。? 等於 {0,1}。
{n} | n 是一個非負數的整數，必須完全符合 n 次。例如，'o{2}' 並不符合 Bob 中的 'o'，但可符合"food"中的前兩個 o。
{n,} | n 是一個非負數的整數. 至少符合n 次。 舉例來說，'o{2,}' 跟"Bob"中的"o"不符， 且 與"foooood"中所有o相符 。'o{1,}'等於 'o+'。'o{0,}' 等於 'o*'。
{n,m} | m 和 n是非負數的整數，而且n <= m。符合最少n次而符合最多 m 次。舉例來說， 'o{1,3}' 跟"fooooood"中前三個0相符。 'o{0,1}' 等於'o?'。注意逗號和號碼間不可有空格。

對於大型輸入文件，章節數字可輕易地超過九，所以您需要一個方法來處理二或三位數的章節數字。次數符號可以讓您有這能力。下面的JScript 通用運算式可以比對任何數字的章節標題：

/Chapter [1-9][0-9]*/

下面 VBScript 通用運算式執行相同的比對：

"Chapter [1-9][0-9]*"

注意次數符號出現在範圍運算式之後。所以它可以適用於整個運算式的範圍，然而在這裡，它只指定了從0 到 9 完整數字的範圍運算式（包含0和9）。

'+' 次數符號不用在這裡，因為第二或接下來的位置並不需要是數字。 '?' 字元也不用在這裡，因為它將章節數字限制到只有兩位數。 您要比對的是'Chapter' 和空白字元後至少一位的數字。

如果您知道章節數目限制只有99 個章節，您可使用下面的JScript 運算式來指定至少一個但不多於二位數的運算式。

/Chapter [0-9]{1,2}/

VBScript 版本，使用下面的通用運算式：

"Chapter [0-9]{1,2}"

上述通用運算式的壞處是，如果有一章節數字大於 99，它將只會比對前面兩位數。另一個壞處是某些人會建立一個Chapter 0 並且還是會被比對。比對只有兩位數章節比較好的JScript 運算式如下：

/Chapter [1-9][0-9]?/

-或-

/Chapter [1-9][0-9]{0,1}/

同於VBScript版本的以下運算式：

"Chapter [1-9][0-9]?"

-或-

"Chapter [1-9][0-9]{0,1}"

'*' 、 '+'和 '?' 次數符號都被指為強烈，那就是它們盡可能地比對文字。有時這些並不全是您想要的。 有時您只想要一個很小的比對。

例如說，您搜尋一個HTML 文件以找到以 H1 標記包住的標題。那個文字出現在您文件如同：

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的運算式比對從小於符號 (<) 開始到 H1標記結尾的大於符號的所有東西。

/<.*>/

VBScript版本的通用運算式是：

"<.*>"

如果您只想要比對開始的 H1 標記，如下所示，不強烈的運算式只比對 <H1>。

/<.*?>/

-或-

"<.*?>"

在'*' 、'+'、或 '?' 次數符號之後加入 '?'，運算式便由強烈轉成不強烈或很小的比對。


選項和群組

選項（alternation）允許使用 '|' 由原來的2至多個選項中作選擇 。您可延伸處理章節的通用運算式，使其不只處理章節。然而，事情並不如您所想的簡單。當使用選項時，字元 '|' 兩邊最有可能符合的運算式會被比對。您可能會想下面 Jscript 和 VBScript 的運算式應該比對 'Chapter' 或 'Section' ，之後接著開頭和結尾有 1 或 2 位數出現的一行：

/^Chapter|Section [1-9][0-9]{0,1}$/
"^Chapter|Section [1-9][0-9]{0,1}$"

很不幸地，所發生的是上述的通用運算式比對了一行開頭的 'Chapter' 文字或是一行結束的'Section'及其後所緊接的數字。如果輸入字串是'Chapter 22'，上述的運算式只比對 'Chapter' 一字。如果輸入字串是 'Section 22'， 運算式便比對 'Section 22'。但這並非我們所想要的，所以必須有一個方法讓通用運算式更能回應您想要做的事。

您可以使用括號來限制選項的範圍，也就是確定它只用在 'Chapter' 和 'Section' 兩字。然而，括號也有很多陷阱，因為它們也用來建立稍後談到的子運算式。靠上述通用運算式並在適當的位置加上括號，您可以讓通用運算式比對 'Chapter 1' 或 'Section 3' 。

下面的通用運算式使用括號來組合'Chapter' 和 'Section' ，使運算式在Jscript中正確地執行：

/^(Chapter|Section) [1-9][0-9]{0,1}$/

在 VBScript中：

"^(Chapter|Section) [1-9][0-9]{0,1}$"

這些運算式可運作正確，除非出現引人感興趣的副產品。把'Chapter|Section' 用括號括起來可建立適當的群組，但它也會使這兩個比對文字被擷取以供將來使用。畢竟上述的運算式只有一組括號，也只有一個子比對被擷取。可用VBScript中 Submatches 集合物件或Jscript中 RegExp物件的 $1-$9 屬性來引用這個子比對。

有時擷取子比對是需要的，有時不是。上述的例子中，您真正想做的是使用括號來組成一個'Chapter' 或是 'Section' 文字的選項。您之後並不見得需要參考這比對。事實上，除非您真的需要擷取子比對，否則不要使用上述的方式。這樣您的通用運算式會變得更有效率，因它們不需花時間和記憶體來儲存這些子比對。

您可在括號中的通用運算式模式之前使用 '?:' ，以防止該比對在為了稍後的使用時，被儲存起來 。下面將上述通用運算式做了修改，提供了不儲存子比對，但具備一樣的能力。如 Jscript 中的：

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

如 VBScript 中的：

"^(?:Chapter|Section) [1-9][0-9]{0,1}$"

除了 '?:' 中繼字元，有兩個其他用在稱為預看比對的非擷取中繼字元。使用 ?= 的正預看會從在括號內的搜尋通用運算式模式開始的任何一點比對搜尋字串。使用 ?! 的反預看則會從搜尋字串與通用運算式模式不相符的任何一點開始比對。

例如， 假設您有一個引用Windows 3.1 ， Windows 95 ， Windows 98 和 Windows NT的參考文件。假設之後您需要搜尋Windows 95 ， Windows 98 和 Windows NT的所有引用，並更新為 Windows 2000。您可使用下面的JScript 通用運算式，它是正預看的一個範例，用來比對Windows 95 ， Windows 98 和 Windows NT：

/Windows(?=95 |98 |NT )/

想要在 VBScript使用相同的比對，請使用下面的方式：

"Windows(?=95 |98 |NT )"

一旦找到相符項目，下個比對的搜尋便緊接著從比對成功的文字後開始，但並不包括預看的字元。例如，如果上述的運算式比對 'Windows 98'，搜尋便從 'Windows' 之後開始而非 '98' 之後。


回溯值

通用運算式最重要的功能之一就是可以儲存比對模式部分，以供稍後使用。就像您所回顧的一樣，用括號把通用運算式或模式的一部分括起來，會將那一部份的運算式儲存在暫時緩衝區中。您可以使用非擷取的中繼字元 '?:' 、 '?=' 或 '?!' 來覆蓋通用運算式所儲存的那一部分。

每個擷取到的子比對是依通用運算式模式中，由左至右的方式儲存。儲存子比對的暫存區數目由 1 接連到最大 99 個子運算式。每個不同緩衝區可以用 '\n' 來存取，其 n 是1或 2 位數字以標示某一特定暫存區。

回溯值提供的其中一個最簡單實用的應用程式就是它提供了在一篇文章中定位兩個相同文字的能力。請參閱下面的句型：

Is is the cost of of gasoline going up up?

如同所寫的，上述句子清楚地有好幾個重複字的問題。較好的解決方式是發展出方法來修正這個句子，而不需查看每一個重複的單一文字。下面的 JScript 通用運算式使用了一個子運算式來達成這個工作。

/\b([a-z]+) \1\b/gi

相對的 VBScript 運算式是：

"\b([a-z]+) \1\b"

在這裡子運算式是括號中的任何東西。擷取的運算式包含了一至多個由 '[a-z]+' 所指定的英文字母字元。 通用運算式的第二個部分是引用先前擷取的子比對，也就是剛與括號中運算式比對符合而又出現第二次的字。'\1' 是用來指定第一個子比對。文字邊界的中繼字元確保只有分隔的字會被偵測。否則，運算式將無法正確地認出像是"is issued" 或this is" 的詞句。

JScript 運算式中，緊接於通用運算式後的全域旗標 ('g') 表示其運算式是用在所有輸入字串能找到的比對中。不區分大小寫的旗標 ('i') 出現在運算式的結尾。多行（multiline）旗標顯示可能的比對可以發生在換行字元的兩邊。對VBScript 而言，各種的旗標不能在運算式中設定，必須清楚地使用 RegExp 物件屬性來設定。

使用上述的通用運算式，下面的JScript 程式碼可以使用子比對的資訊把字串文字中兩個連續出現的相同文字置換成只出現一次的相同文字：

var ss = "Is is the cost of of gasoline going up up?.\n";
var re = /\b([a-z]+) \1\b/gim;       //建立通用運算式模式。
var rv = ss.replace(re,"$1");   //置換兩相同字為一個。

最接近的VBScript 對應程式碼如下：

Dim ss, re, rv
ss = "Is is the cost of of gasoline going up up?." & vbNewLine
Set re = New RegExp
re.Pattern = "\b([a-z]+) \1\b"
re.Global = True
re.IgnoreCase = True
re.MultiLine = True
rv = re.Replace(ss,"$1")

VBScript 程式碼中，注意全域、不區分大小寫和多行旗標已用適切命名的RegExp物件屬性來設定。

replace 方法中使用的$1 表示儲存的第一個子比對。如您有多於一個的子比對，您可引用 $2 、 $3 等等順序。

另一個回溯值的使用方式是可以用來把全球資源顯示器(URI) 拆成它的各個元件部分。假設您想要將下面的 URI 拆成各通訊協定(ftp ，http 等等)，網域位址和網頁 / 路徑：

http://msdn.microsoft.com:80/scripting/default.htm

下面的通用運算式提供了這方面的能力， 如 JScript：

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

如 VBScript中的：

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"

第一個括號的子運算式是用來擷取網頁位址的通訊協定部分。這個子運算式比對任何在一個冒號和兩個斜線之前的文字。第二個括號的子運算式擷取網址中網域位置部分。這個子運算式比對任何 '^' ， '/' 或 ':'之外的所有文字順序。第三個括號的子運算式擷取網站的埠號碼，如果其中之一被指定的話。這個子運算式比對冒號之後零到多位數的數字。最後，第四個括號的子運算式擷取網站位址指定的路徑和/或網頁資訊。這個子運算式比對1到多個除了 '#' 或空白字元之外的字元 。

在上述的URI 中使用通用運算式，子比對的內容如下：

RegExp.$1 含有 "http"

RegExp.$2含有"msdn.microsoft.com"

RegExp.$3含有":80"

RegExp.$4含有"/scripting/default.htm"


VBScript 語言參考

常數

錯誤

事件

函數

方法

其他

物件與集合

運算子

屬性

陳述式


版本訊息 (VBScript)

Visual Basic Scripting Edition

版本訊息

下表列出了Microsoft Visual Basic Scripting 各版本的主應用程式。

主應用程式 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5 | 5.6
Microsoft Internet Explorer 3.0 | x |  |  |  |  |  |
Microsoft Internet Information Server 3.0 |  | x |  |  |  |  |
Microsoft Internet Explorer 4.0 |  |  | x |  |  |  |
Microsoft Internet Information Server 4.0 |  |  | x |  |  |  |
Microsoft Windows Scripting Host 1.0 |  |  | x |  |  |  |
Microsoft Outlook 98 |  |  | x |  |  |  |
Microsoft Visual Studio 6.0 |  |  |  | x |  |  |
Microsoft Internet Explorer 5.0 |  |  |  |  | x |  |
Microsoft Internet Information Services 5.0 |  |  |  |  |  | x |
Microsoft Internet Explorer 5.5 |  |  |  |  |  | x |
Microsoft Visual Studio.NET |  |  |  |  |  |  | x

下表列出了VBScript 的語言功能與它們首次出現的版本。

語言項目 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5 | 5.6
Abs 函數 | x |  |  |  |  |  |
加號運算子 (+) | x |  |  |  |  |  |
And 運算子 | x |  |  |  |  |  |
Array 函數 |  | x |  |  |  |  |
Asc 函數 | x |  |  |  |  |  |
指定運算子 (=) | x |  |  |  |  |  |
Atn 函數 | x |  |  |  |  |  |
Call 陳述式 | x |  |  |  |  |  |
CBool 函數 | x |  |  |  |  |  |
CByte 函數 | x |  |  |  |  |  |
CCur 函數 | x |  |  |  |  |  |
CDate 函數 | x |  |  |  |  |  |
CDbl 函數 | x |  |  |  |  |  |
Chr 函數 | x |  |  |  |  |  |
CInt 函數 | x |  |  |  |  |  |
Class 物件 |  |  |  |  | x |  |
Class 陳述式 |  |  |  |  | x |  |
Clear 方法 | x |  |  |  |  |  |
CLng 函數 | x |  |  |  |  |  |
Color 常數 |  | x |  |  |  |  |
比較常數 |  | x |  |  |  |  |
串連運算子 (&) | x |  |  |  |  |  |
Const 陳述式 |  | x |  |  |  |  |
Cos 函數 | x |  |  |  |  |  |
CreateObject 函數 |  | x |  |  |  |  |
CSng 函數 | x |  |  |  |  |  |
CStr 函數 | x |  |  |  |  |  |
日期與時間常數 |  | x |  |  |  |  |
日期格式常數 |  | x |  |  |  |  |
Date 函數 | x |  |  |  |  |  |
DateAdd 函數 |  | x |  |  |  |  |
DateDiff 函數 |  | x |  |  |  |  |
DatePart 函數 |  | x |  |  |  |  |
DateSerial 函數 | x |  |  |  |  |  |
DateValue 函數 | x |  |  |  |  |  |
Day 函數 | x |  |  |  |  |  |
Description 屬性 | x |  |  |  |  |  |
Dim 陳述式 | x |  |  |  |  |  |
除號運算子 (/) | x |  |  |  |  |  |
Do...Loop 陳述式 | x |  |  |  |  |  |
Empty | x |  |  |  |  |  |
Eqv 運算子 | x |  |  |  |  |  |
Erase 陳述式 | x |  |  |  |  |  |
Err 物件 | x |  |  |  |  |  |
Eval 函數 |  |  |  |  | x |  |
Execute 方法 |  |  |  |  | x |  |
Execute 陳述式 |  |  |  |  | x |  |
ExecuteGlobal 陳述式 |  |  |  |  | x |  |
Exit 陳述式 | x |  |  |  |  |  |
Exp 函數 | x |  |  |  |  |  |
指數運算子 (^) | x |  |  |  |  |  |
False | x |  |  |  |  |  |
Filter 函數 |  | x |  |  |  |  |
FirstIndex 屬性 |  |  |  |  | x |  |
Fix 函數 | x |  |  |  |  |  |
For...Next 陳述式 | x |  |  |  |  |  |
For Each...Next 陳述式 |  | x |  |  |  |  |
FormatCurrency 函數 |  | x |  |  |  |  |
FormatDateTime 函數 |  | x |  |  |  |  |
FormatNumber 函數 |  | x |  |  |  |  |
FormatPercent 函數 |  | x |  |  |  |  |
Function 陳述式 | x |  |  |  |  |  |
GetLocale 函數 |  |  |  |  | x |  |
GetObject 函數 |  | x |  |  |  |  |
GetRef 函數 |  |  |  |  | x |  |
Global 屬性 |  |  |  |  | x |  |
Hex 函數 | x |  |  |  |  |  |
HelpContext 屬性 |  | x |  |  |  |  |
HelpFile 屬性 |  | x |  |  |  |  |
Hour 函數 | x |  |  |  |  |  |
If...Then...Else 陳述式 | x |  |  |  |  |  |
IgnoreCase 屬性 |  |  |  |  | x |  |
Imp 運算子 | x |  |  |  |  |  |
Initialize 事件 |  |  |  |  | x |  |
InputBox 函數 | x |  |  |  |  |  |
InStr 函數 | x |  |  |  |  |  |
InStrRev 函數 |  | x |  |  |  |  |
Int 函數 | x |  |  |  |  |  |
整數除號運算子 (\) | x |  |  |  |  |  |
Is 運算子 | x |  |  |  |  |  |
IsArray 函數 | x |  |  |  |  |  |
IsDate 函數 | x |  |  |  |  |  |
IsEmpty 函數 | x |  |  |  |  |  |
IsNull 函數 | x |  |  |  |  |  |
IsNumeric 函數 | x |  |  |  |  |  |
IsObject 函數 | x |  |  |  |  |  |
Join 函數 |  | x |  |  |  |  |
LBound 函數 | x |  |  |  |  |  |
LCase 函數 | x |  |  |  |  |  |
Left 函數 | x |  |  |  |  |  |
Len 函數 | x |  |  |  |  |  |
Length 屬性 |  |  |  |  | x |  |
LoadPicture 函數 |  | x |  |  |  |  |
Log 函數 | x |  |  |  |  |  |
LTrim 函數 | x |  |  |  |  |  |
Match 物件 |  |  |  |  | x |  |
Matches 集合物件 |  |  |  |  | x |  |
Mid 函數 | x |  |  |  |  |  |
Minute 函數 | x |  |  |  |  |  |
其他常數 |  | x |  |  |  |  |
Mod 運算子 | x |  |  |  |  |  |
Month 函數 | x |  |  |  |  |  |
MonthName 函數 |  | x |  |  |  |  |
MsgBox 常數 |  | x |  |  |  |  |
MsgBox 函數 | x |  |  |  |  |  |
乘號運算子 (*) | x |  |  |  |  |  |
負號運算子 (-) | x |  |  |  |  |  |
Not 運算子 | x |  |  |  |  |  |
Now 函數 | x |  |  |  |  |  |
Nothing | x |  |  |  |  |  |
Null | x |  |  |  |  |  |
Number 屬性 | x |  |  |  |  |  |
Oct 函數 | x |  |  |  |  |  |
On Error 陳述式 | x |  |  |  |  |  |
Option Explicit 陳述式 | x |  |  |  |  |  |
Or 運算子 | x |  |  |  |  |  |
Pattern 屬性 |  |  |  |  | x |  |
Private 陳述式 |  | x |  |  |  |  |
PropertyGet 陳述式 |  |  |  |  | x |  |
PropertyLet 陳述式 |  |  |  |  | x |  |
PropertySet 陳述式 |  |  |  |  | x |  |
Public 陳述式 |  | x |  |  |  |  |
Raise 方法 | x |  |  |  |  |  |
Randomize 陳述式 | x |  |  |  |  |  |
ReDim 陳述式 | x |  |  |  |  |  |
RegExp 物件 |  |  |  |  | x |  |
Rem 陳述式 | x |  |  |  |  |  |
Replace 函數 |  | x |  |  |  |  |
Replace 方法 |  |  |  |  | x |  |
RGB 函數 |  | x |  |  |  |  |
Right 函數 | x |  |  |  |  |  |
Rnd 函數 | x |  |  |  |  |  |
Round 函數 |  | x |  |  |  |  |
RTrim 函數 | x |  |  |  |  |  |
ScriptEngine 函數 |  | x |  |  |  |  |
ScriptEngineBuildVersion 函數 |  | x |  |  |  |  |
ScriptEngineMajorVersion 函數 |  | x |  |  |  |  |
ScriptEngineMinorVersion 函數 |  | x |  |  |  |  |
Second 函數 | x |  |  |  |  |  |
Select Case 陳述式 | x |  |  |  |  |  |
Set 陳述式 | x |  |  |  |  |  |
SetLocale 函數 |  |  |  |  | x |  |
Sgn 函數 | x |  |  |  |  |  |
Sin 函數 | x |  |  |  |  |  |
Source 屬性 | x |  |  |  |  |  |
Space 函數 | x |  |  |  |  |  |
Split 函數 |  | x |  |  |  |  |
Sqr 函數 | x |  |  |  |  |  |
StrComp 函數 | x |  |  |  |  |  |
字串常數 |  | x |  |  |  |  |
String 函數 | x |  |  |  |  |  |
StrReverse 函數 |  | x |  |  |  |  |
Sub 陳述式 | x |  |  |  |  |  |
減號運算子 (-) | x |  |  |  |  |  |
Tan 函數 | x |  |  |  |  |  |
Terminate 事件 |  |  |  |  | x |  |
Test 方法 |  |  |  |  | x |  |
Time 函數 | x |  |  |  |  |  |
Timer 函數 |  |  |  |  | x |  |
TimeSerial 函數 | x |  |  |  |  |  |
TimeValue 函數 | x |  |  |  |  |  |
Trim 函數 | x |  |  |  |  |  |
Tristate 常數 |  | x |  |  |  |  |
True | x |  |  |  |  |  |
TypeName 函數 |  | x |  |  |  |  |
UBound 函數 | x |  |  |  |  |  |
UCase 函數 | x |  |  |  |  |  |
Value 屬性 |  |  |  |  | x |  |
VarType 常數 |  | x |  |  |  |  |
VarType 函數 | x |  |  |  |  |  |
VBScript 常數 |  | x |  |  |  |  |
Weekday 函數 | x |  |  |  |  |  |
WeekdayName 函數 |  | x |  |  |  |  |
While...Wend 陳述式 | x |  |  |  |  |  |
With 陳述式 |  |  |  |  | x |  |
Xor 運算子 | x |  |  |  |  |  |
Year 函數 | x |  |  |  |  |  |


VBScript 常數

VBScript 中內建了一些您可以在程式碼中使用的有用常數。常數讓您以比較便利的方式使用特定的值，而不必真的記住值本身，而且萬一要變更任一個常數的值時，使用常數也會使您的程式碼比較容易維護。因為這些常數已經定義在 VBScript 中，所以您不必在程式碼中明確地宣告，而只要直接用這些常數來取代他們所代表的值即可。

以下為 VBScript 所提供的各種常數類別，以及簡要的說明：

  • 顏色常數 定義可以用在 scripting 中的八種基本色彩。
  • 日期與時間常數 定義用在各種不同日期與時間函數中的日期與時間常數。
  • 日期格式常數 定義用來設定日期與時間格式的常數。
  • 其他常數 定義不屬於任何其他類別的常數。
  • MsgBox 常數 定義用在 MsgBox 函數中的常數，他們將描述按鈕的顯示與否、標籤標示方式、作業方式和傳回值。
  • 字串常數 定義用來操作字串的各種不同非列印字元。
  • Tristate 常數 定義數字的格式化函數所用的常數。
  • VarType 常數 定義各種不同的 Variant 次型態。

基本條件

版本 2


顏色常數

這些是 VBScript 的內建常數，您在使用前不必先定義。可在程式碼中任意使用，其值分別顯示如下：

常數 | 值 | 說明
vbBlack | &h00 | 黑
vbRed | &hFF | 紅
vbGreen | &hFF00 | 綠
vbYellow | &hFFFF | 黃
vbBlue | &hFF0000 | 藍
vbMagenta | &hFF00FF | 深紅
vbCyan | &hFFFF00 | 淺藍
vbWhite | &hFFFFFF | 白

基本條件

版本 2

請參閱

比較常數 | 日期與時間常數 | 日期格式常數 | 其他常數 | MsgBox 常數 | 字串常數 | Tristate 常數 | VarType 常數


比較常數

這些為 VBScript 內建的常數，您在使用前不必先定義。可在程式碼中任意使用，其值顯示如下：

常數 | 值 | 說明
vbBinaryCompare | 0 | 執行二進位資料的比較。
vbTextCompare | 1 | 執行文字的比較。

基本條件

版本 2

請參閱

顏色常數 | 日期與時間常數 | 日期格式常數 | 其他常數 | MsgBox 常數 | 字串常數 | Tristate 常數 | VarType 常數


日期與時間常數

這些是 VBScript 的內建常數，您在使用前不必先定義。 可在程式碼中任意使用，其值分別顯示如下：

常數 | 值 | 說明
vbSunday | 1 | 星期日
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六
vbUseSystemDayOfWeek | 0 | 使用您系統設定的每星期的第一天。
vbFirstJan1 | 1 | 由 1 月 1 日所在的那個星期開始 (預設)。
vbFirstFourDays | 2 | 由新的一年中第一個至少有 4 天的星期開始。
vbFirstFullWeek | 3 | 由一年中第一個完整的星期開始。

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期格式常數 | 其他常數 | MsgBox 常數 | 字串常數 | Tristate 常數 | VarType 常數


日期格式常數

這些是 VBScript 的內建常數，您在使用前不必先定義。 可在程式碼中任意使用，其值分別顯示如下：

常數 | 值 | 說明
vbGeneralDate | 0 | 顯示日期和(或)時間。若是一實數值，則顯示日期和時間。如果沒有小數部份，則只顯示日期。如果沒有整數部份，則只顯示時間。日期和時間顯示的格式會依系統設定而定。
vbLongDate | 1 | 以您系統的完整日期格式顯示日期。
vbShortDate | 2 | 以您系統的簡短日期格式顯示日期。
vbLongTime | 3 | 以您系統的完整時間格式顯示時間。
vbShortTime | 4 | 以您系統的簡短時間格式顯示時間。

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期與時間常數 | 其他常數 | MsgBox 常數 | 字串常數 | Tristate 常數 | VarType 常數


其他常數

這些是 VBScript 的內建常數，您在使用前不必先定義。 可在程式碼中任意使用，其值分別顯示如下：

常數 值 說明
vbObjectError -2147221504 使用者定義數值應大於這個值，例如：
Err.Raise Number = vbObjectError + 1000

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期與時間常數 | 日期格式常數 | MsgBox 常數 | 字串常數 | Tristate 常數 | VarType 常數


MsgBox 常數

下列常數使用在 MsgBox 函數是用來確定哪些按鈕及圖示會出現在訊息方塊中，以及哪一個按鈕是預設值。另外，也可以指定 MsgBox 的強制回應。這些是 VBScript 的內建常數，您在使用前不必先定義。可在程式碼中任意使用，其值分別顯示如下：

常數 | 值 | 說明
vbOKOnly | 0 | 只顯示 [確定] 按鈕。
vbOKCancel | 1 | 顯示 [確定] 及 [取消] 按鈕。
vbAbortRetryIgnore | 2 | 顯示 [放棄]、[重試] 及 [忽略] 按鈕。
vbYesNoCancel | 3 | 顯示 [是]、[否] 及 [取消] 按鈕。
vbYesNo | 4 | 顯示 [是] 及 [否] 按鈕。
vbRetryCancel | 5 | 顯示 [重試] 及 [取消] 按鈕。
vbCritical | 16 | 顯示代表重要訊息的圖示。
vbQuestion | 32 | 顯示代表問號符號的圖示。
vbExclamation | 48 | 顯示代表警告符號的圖示。
vbInformation | 64 | 顯示代表資訊符號的圖示。
vbDefaultButton1 | 0 | 將第一個按鈕設為預設值。
vbDefaultButton2 | 256 | 將第二個按鈕設為預設值。
vbDefaultButton3 | 512 | 將第三個按鈕設為預設值。
vbDefaultButton4 | 768 | 將第四個按鈕設為預設值。
vbApplicationModal | 0 | 應用程式強制回應；使用者必須先回應此訊息方塊，才能在目前的應用程式中繼續工作。
vbSystemModal | 4096 | 系統強制回應；在 Win16 系統上，在使用者回覆訊息方塊前，所有的應用程式將會暫停。而在 Win32 系統上，該常數會一直在其他任何您正在執行的程式上方，顯示一個應用程式強制回應訊息方塊。

下列使用於 MsgBox 函數中的常數，是用來確認使用者選擇的按鈕。只有當您的專案有直接引用包含這些常數定義的適當型態程式庫時，才可以使用這些常數。在 VBScript 中，您必須要在程式碼中直接宣告這些常數。

常數 | 值 | 說明
vbOK | 1 | [確定] 按鈕被按下。
vbCancel | 2 | [取消] 按鈕被按下。
vbAbort | 3 | [放棄] 按鈕被按下。
vbRetry | 4 | [重試] 按鈕被按下。
vbIgnore | 5 | [忽略] 按鈕被按下。
vbYes | 6 | [是] 按鈕被按下。
vbNo | 7 | [否] 按鈕被按下。

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期與時間常數 | 日期格式常數 | 其他常數 | 字串常數 | Tristate 常數 | VarType 常數


String 常數

Visual Basic Scripting Edition

字串常數

這些是 VBScript 的內建常數，您在使用前不必先定義。可在程式碼中任意使用，其值分別顯示如下：

常數 | 值 | 說明
vbCr | Chr(13) | 指標歸位。
VbCrLf | Chr(13) & Chr(10) | 指標歸位及跳行；即 Return 鍵之功能。
vbFormFeed | Chr(12) | Form Feed 功能；在 Microsoft Windows 下沒有作用。
vbLf | Chr(10) | 跳行。
vbNewLine | Chr(13) & Chr(10) 或 Chr(10) | 可由系統指定適當的換新行之字元。
vbNullChar | Chr(0) | 含 0 值的字元。
vbNullString | 含 0 值的字串 | 與長度為 0 的字串 ("") 不同；可於呼叫外部程序時使用。
vbTab | Chr(9) | 水平移位之 Tab 鍵功能。
vbVerticalTab | Chr(11) | 垂直移位之 Tab 鍵功能；在 Microsoft Windows 下沒有作用。

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期與時間常數 | 日期格式常數 | 其他常數 | MsgBox 常數 | Tristate 常數 | VarType 常數


Tristate 常數

這些是 VBScript 的內建常數，您在使用前不必先定義。可在程式碼中任意使用，其值分別顯示如下：

常數 | 值 | 說明
vbUseDefault | -2 | 使用電腦區域設定的預設值。
vbTrue | -1 | True
vbFalse | 0 | False

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期與時間常數 | 日期格式常數 | 其他常數 | MsgBox 常數 | 字串常數 | VarType 常數


VarType 常數

只有當您的專案有直接引用包含這些常數定義的適當型態程式庫時，才可以使用這些常數。在 VBScript 中，您必須要在程式碼中直接宣告這些常數。

常數 | 值 | 說明
vbEmpty | 0 | 未初始化 (預設值)
vbNull | 1 | 不含任何有效資料
vbInteger | 2 | 為整數的子資料型態
vbLong | 3 | 為長整數的子資料型態
vbSingle | 4 | 為單精度浮點數的子資料型態
vbSingle | 5 | 為倍精度浮點數的子資料型態
vbCurrency | 6 | 為貨幣的子資料型態
VbDate | 7 | 為日期的子資料型態
VbString | 8 | 為字串的子資料型態
vbObject | 9 | 物件
vbError | 10 | 為錯誤的子資料型態
vbBoolean | 11 | 為布林值的子資料型態
vbVariant | 12 | Variant 型態 (只能使用於為 Variant 的陣列型態)
vbDataObject | 13 | 資料存取物件
vbDecimal | 14 | 為 Decimal 的子資料型態
vbByte | 17 | 為 Byte 的子資料型態
vbArray | 8192 | 陣列

基本條件

版本 2

請參閱

顏色常數 | 比較常數 | 日期與時間常數 | 日期格式常數 | 其他常數 | MsgBox 常數 | 字串常數 | Tristate 常數


錯誤

本節內容

VBScript 執行階段錯誤

VBScript 語法錯誤

相關章節

© 2001 Microsoft Corporation. All rights reserved.


VBScript 執行階段錯誤

VBScript 執行階段的錯誤發生在當 VBScript 的指令碼想要執行系統無法執行的工作。只要指令碼一執行，就會發生 Script 執行階段的錯誤; 此時系統評估變數運算式，並且機動性的分配記憶體。

錯誤代碼 | 說明
429 | ActiveX 元件無法產生物件
507 | 發生例外情況
449 | 引數不為選擇性
17 | 無法執行所要求的動作
430 | 該物件類別不支援 Automation
506 | 尚未定義物件類別
11 | 除以零
48 | 載入 DLL 時發生錯誤
5020 | 通用（regular）運算式中，必須要有 ')'
5019 | 通用（regular）運算式中，必須要有 ']'
432 | 在 Automation 的運作過程中找不到檔案名稱或物件類別
92 | 沒有設定 For 迴圈的初始值
5008 | 指定不合法
51 | 內部錯誤
505 | 不正確或不合格的引用
481 | 不正確的圖片
5 | 程序呼叫或引數不正確
5021 | 不正確的字元集範圍
94 | Null 的使用不正確
448 | 找不到指名引數（Named Argument）
447 | 物件不支援目前的地區設定
445 | 物件不支援此動作
438 | 物件不支援此屬性或方法
451 | 此物件並非集合物件
504 | 物件無法安全地建立
503 | 物件無法安全地初始化
502 | 物件無法安全地於 Script 中使用
424 | 此處需要物件
91 | 物件變數未設定
7 | 記憶體不足
28 | 堆疊空間不足
14 | 字串空間不足
6 | 溢位
35 | Sub 或 function 未定義
9 | 陣列索引超出範圍
5017 | 在通用運算式（Regular Expression）中有語法錯誤
462 | 遠端伺服器不存在或無法使用
10 | 此陣列的長度是固定的或暫時被鎖住
13 | 型態不符合
5018 | 未預期的次數符號
500 | 沒有定義變數
458 | 此變數使用了 VBScript 不支援的 Automation 型態
450 | 引數的個數錯誤或指定了不正確的屬性

請參閱

VBScript 語法錯誤


VBScript 語法錯誤

VBScript 語法錯誤是發生在當某一個 VBScript 陳述式的結構，違反了一或多個 VBScript 指令碼語言的文法規則。VBScript 語法錯誤發生在程式編譯階段，程式還未開始執行的時候。

錯誤代碼 | 說明
1052 | 在物件類別中不能有多個預設（Default）屬性或方法
1044 | 呼叫副程式 (sub) 時，不能使用括弧
1053 | 物件類別的初始與終結沒有引數
1058 | 'Default' 設定只能用在 Property Get
1057 | 'Default' 設定必須也要指定'Public'
1005 | 必須要有 '('
1006 | 必須要有 ')'
1011 | 必須要有 '='
1021 | 必須要有 'Case'
1047 | 必須要有 'Class'
1025 | 必須是陳述式的結尾
1014 | 必須要有 'End'
1023 | 必須要有運算式
1015 | 必須要有 'Function'
1010 | 必須要有識別項
1012 | 必須要有 'If'
1046 | 必須要有 'In'
1026 | 必須要有整數常數
1049 | 屬性宣告必須要有 Let 或 Set 或 Get
1045 | 必須要有字母 (literal) 常數
1019 | 必須要有 'Loop'
1020 | 必須要有 'Next'
1050 | 必須要有 'Property'
1022 | 必須要有 'Select'
1024 | 必須要有陳述式
1016 | 必須要有 'Sub'
1017 | 必須要有 'Then'
1013 | 必須要有 'To'
1018 | 必須要有 'Wend'
1027 | 必須要有 'While' 或 'Until'
1028 | 必須要有 'While'、'Until' 或是陳述式結尾
1029 | 必須要有 'With'
1030 | 識別項太長
1014 | 不正確的字元
1039 | 'exit' 陳述式不正確
1040 | 'for' 迴圈控制變數不正確
1013 | 不正確的數字
1037 | 'Me' 關鍵字的用法不正確
1038 | 有 'loop'，但沒有 'do'
1048 | 必須定義在類別中
1042 | 必須是此行的第一個陳述式
1041 | 重新定義名稱
1051 | 引數的個數必須在各個屬性規格中一致
1001 | 記憶體不足
1054 | Property Set 或 Let 必須至少有一個引數
1002 | 語法錯誤
1055 | 未預期的 'Next'
1015 | 無法判定字串常數的結尾

請參閱

VBScript 執行階段錯誤


事件 (VBScript)

Visual Basic Scripting Edition

事件

本節內容

Initialize 事件

Terminate 事件

相關章節

VBScript 語言參考


Initialize 事件

在建立相關物件類別的執行個體時發生的事件。

Private Sub Class_Initialize()
   statements
End Sub

statement 部分包括在類別初始化時要執行的零或多個程式碼陳述式。

附註

下列範例將說明 Initialize 事件的使用方式。

Class TestClass
   Private Sub Class_Initialize   ' 建立Initialize事件。
      MsgBox("TestClass started")
   End Sub
   Private Sub Class_Terminate   ' 建立Terminate事件。
      MsgBox("TestClass terminated")
   End Sub
End Class

Set X = New TestClass   ' 建立一個TestClass的執行個體。
Set X = Nothing   ' 違反這個執行個體。

基本條件

版本 5

請參閱

Class 物件 | Class 陳述式 | Terminate 事件

適用於：Class 物件


Terminate 事件

在終止相關物件類別的執行個體時發生的事件。

Private Sub Class_Terminate()
   statements
End Sub

statement 部分包括在類別初始化時要執行的零或多個程式碼陳述式

附註

下列範例將說明 Terminate 事件的使用方式。

Class TestClass
   Private Sub Class_Initialize   '建立Initialize事件。
      MsgBox("TestClass started")
   End Sub
    Private Sub Class_Terminate   ' 建立Terminate事件。
      MsgBox("TestClass terminated")
   End Sub
End Class
Set X = New TestClass   '建立一個TestClass的執行個體。
Set X = Nothing   ' 違反這個執行個體。

基本條件

版本 5

請參閱

Class 物件 | Class 陳述式 | Initialize 事件

適用於：Class 物件


函數

下列表格包含 VBScript 函數。

Abs | Array | Asc | Atn
CBool | CByte | CCur | CDate
CDbl | Chr | CInt | CLng
Conversions | Cos | CreateObject | CSng
Date | DateAdd | DateDiff | DatePart
DateSerial | DateValue | Day | Derived Maths
Eval | Exp | Filter | FormatCurrency
FormatDateTime | FormatNumber | FormatPercent | GetLocale
GetObject | GetRef | Hex | Hour
InputBox | InStr | InStrRev | Int, Fixs
IsArray | IsDate | IsEmpty | IsNull
IsNumeric | IsObject | Join | LBound
LCase | Left | Len | LoadPicture
Log | LTrim; RTrim; and Trims | Maths | Mid
Minute | Month | MonthName | MsgBox
Now | Oct | Replace | RGB
Right | Rnd | Round | ScriptEngine
ScriptEngineBuildVersion | ScriptEngineMajorVersion | ScriptEngineMinorVersion | Second
SetLocale | Sgn | Sin | Space
Split | Sqr | StrComp | String
Tan | Time | Timer | TimeSerial
TimeValue | TypeName | UBound | UCase
VarType | Weekday | WeekdayName | Year

相關章節

VBScript 語言參考


Abs 函數

傳回一個數值的絕對值。

Abs(number)

這個引數 number 可以是任何數值運算式。如果 number 的值為 Null，則傳回Null；如果其引數是沒有初始值的變數，則傳回 0。

附註

一個數值的絕對值就是將正負號去掉以後的值。例如 Abs(-1) 和 Abs(1) 的傳回值都是 1。

以下範例即使用 Abs 函數來計算一數值的絕對值；

Dim MyNumber
MyNumber = Abs(50.3)  ' 傳回 50.3。
MyNumber = Abs(-50.3) ' 傳回 50.3。

基本條件

版本 1

請參閱

Sgn 函數


Array 函數

傳回一個包含了一個陣列的 Variant。

Array(arglist)

引數arglist是必要的，是以逗號隔開的值。這些值是被指定為 Variant 中陣列的元素。如果沒有指定引數，則會建立零長度的陣列。

附註

當要引用陣列元素時，使用的表示法為變數名稱後加上以括號括起來的索引數字。在下列範例中，第一個陳述式建立一個名為 A 的 Variant 變數。第二個陳述式指定一個陣列給變數 A。最後一個陳述式將陣列中第二個元素的值指定給另一個變數。

Dim A
A = Array(10,20,30)
B = A(2)   ' B 現在是 30。
備註 不是宣告為陣列的變數仍然可以含有陣列資料。在觀念上，含有陣列的 Variant 變數和含有 Variant 元素的陣列變數是不同的。但是在陣列元素的存取方法上，並沒有什麼不同。

基本條件

版本 2

請參閱

Dim 陳述式


Asc 函數

傳回字串中第一個字母的 ANSI 字元碼 。

Asc(string)

引數 string 是任何可用的字串運算式。若是 string 中沒有包含任何字元，則會產生執行階段錯誤。

附註

在下面範例中，Asc 傳回每個字串的第一個字母的 ANSI 字元碼：

Dim MyNumber
MyNumber = Asc("A")       ' 傳回65。
MyNumber = Asc("a")       ' 傳回 97。
MyNumber = Asc("Apple")   ' 傳回 65。
備註 AscB 函數是用來處理包含位元組資料的字串，AscB 函數會傳回第一個位元組，而非第一個字元的字元碼。AscW 函數則是為了使用 Unicode 字元碼的 32 位元作業平台而設計的。此函數會傳回 Unicode 字元碼，而避免將 ANSI 碼轉換為 Unicode 碼處理。

基本條件

版本 1

請參閱

Chr 函數


Atn 函數

傳回引數的「反正切」(arctangent) 值。

Atn(number)

引數 number 可以是任何有效的數值運算式。

附註

Atn 函數的引數 (number) 是直角三角形中構成直角兩邊的比值 (正切函數值)，其傳回值則為相對應之底角的度數，以「弧度」為單位。正切函數值 (number) 的算法為「對邊除以鄰邊」。 傳回值的範圍落在 pi /2 到 pi/2 的「弧度」之間。

要將度數轉換成弧度，將度數乘以 pi/180。要將弧度轉換成度數將弧度乘以 180/pi。

以下範例即使用 Atn 來計算 pi 的值：

Dim pi
pi = 4 * Atn(1)   ' 計算 pi 的值。
備註 Atn (反正切函數) 是 Tan，(正切函數) 的反三角函數，正切函數的引數值為角度，傳回值為該角度之對邊除以鄰邊的比值。請勿將 Atn 和 cotangent (餘切函數) 搞混，餘切函數值是正切函數值的倒數，即 cotangent = (1/tangent)。

基本條件

版本 1

請參閱

Cos 函數 | 可導出的數學函數 | Sin 函數 | Tan 函數


CBool 函數

傳回一個轉換為 Boolean 子型態變數的運算式。

CBool(expression)

引數 expression 可以是任何有效的運算式。

附註

如果 expression 的結果為 0，則傳回 False；否則將傳回 True。如果 expression 無法被計算成數值，將會產生執行階段錯誤。

下面範例即使用 CBool 函數將運算式轉換成 Boolean。如果運算式的值為非零 的數值，CBool 將傳回 True；反之將傳回 False。

Dim A, B, Check
A = 5: B = 5           ' 定變數的初始值。
Check = CBool(A = B)   ' Check 為 True。
A = 0                  ' 為變數定義。
Check = CBool(A)       ' Check 為 False。

基本條件

版本 1

請參閱

CByte 函數 | CCur 函數 | CDate 函數 | CDbl 函數 | CInt 函數 | CLng 函數 | CSng 函數 | CStr 函數


CByte 函數

傳回一個轉換為 Byte 子型態變數的運算式。

CByte(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態運算結果。例如，使用 CByte 來強制執行 Byte 運算，不管它是貨幣、單精數、倍精數、或是整數，都可以正常執行。

使用 CByte 函數可以在任何語言的版本中，讓任何一個資料型態轉換至 Byte 資料型態。例如，不同的小數點分隔符號，會依據您系統的國別設定來做適當的確認。而千分位分隔符號也一樣。

若 expression 超出位元組子型態資料型態允許的範圍，則將會顯示錯誤。以下範例即使用 CByte 函數將運算式轉換成 byte：

Dim MyDouble, MyByte
MyDouble = 125.5678        ' MyDouble 是一個 Double。
MyByte = CByte(MyDouble)   ' MyByte 為 126。

基本條件

版本 1

請參閱

CBool 函數 | CCur 函數 | CDate 函數 | CDbl 函數 | CInt 函數 | CLng 函數 | CSng 函數 | CStr 函數


CCur 函數

傳回一個轉換為 Currency 子型態變數的運算式。

CCur(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態運算結果。例如，使用 CCur 來強制執行 Currency 運算，以免被當作整數運算。

您可以使用 CCur 函數以在任何語言的版本中，讓任何一個資料型態轉換至 Currency 資料型態。例如，當您使用 CCur，不同的小數點分隔符號、千分位分隔符號，和不同的貨幣選項，會依據您系統的國別設定來做適當的確認。

以下範例即使用 CCur 函數將運算式轉換成 Currency：

Dim MyDouble, MyCurr
MyDouble = 543.214588         ' MyDouble 是一個 Double。
MyCurr = CCur(MyDouble * 2)   ' 把MyDouble * 2 (1086.429176) 的結果轉換為Currency (1086.4292)。

基本條件

版本 1

請參閱

CBool 函數 | CByte 函數 | CDate 函數 | CDbl 函數 | CInt 函數 | CLng 函數 | CSng 函數 | CStr 函數


CDate 函數

傳回一個轉換為 Date 子型態變數的運算式。

CDate(date)

引數 date 是任何有效的日期運算式。

附註

您可以使用 IsDate 函數來檢查 date 是否可以被轉換成日期或時間。而 CDate 接受短式日期和時間文字以及日期/時間有效範圍內的適當數值。當轉換一個數字成為日期時，是將整數部分轉換成日期；任何數字中的小數部分，將轉換為從午夜起算的時間。

CDate 是依據您系統上的國別設定來決定日期的格式。若提供的格式為不可辨識的日期設定，則無法判斷日、月、年的順序。另外，它若包含有星期的字串，對於這樣的完整日期格式也無法辨識。

以下範例即使用 CDate 函數來將字串轉換成日期。一般而言， 並不建議以固定式的字串來撰寫日期與時間 (如本例所示)。 請使用短式日期和時間。

MyDate = "October 19, 1962"   ' 定義日期。
MyShortDate = CDate(MyDate)   ' 轉換為Date 資料類型。
MyTime = "4:35:47 PM"         ' 定義時間。
MyShortTime = CDate(MyTime)   ' 轉換為Date 資料類型。

基本條件

版本 1

請參閱

IsDate 函數


CDbl 函數

傳回一個轉換為 Double 子型態變數的運算式。

CDbl(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態運算結果。例如，使用 CDbl 或 CSng 來強制執行雙精度或單精度運算以防止被當作貨幣或整數運算。

您可以使用 CDbl 函數以在任何語言的版本中，讓任何一個資料型態轉換至 Double 資料型態。例如，當您使用 CDbl，不同的小數點分隔符號和千分位分隔符號，會依據您系統的國別設定來做適當的確認。

本範例即使用 CDbl 函數將運算式轉換成 Double。

Dim MyCurr, MyDouble
MyCurr = CCur(234.456784)              ' MyCurr 是一個Currency (234.4567)。
MyDouble = CDbl(MyCurr * 8.2 * 0.01)   ' 將結果轉換為Double (19.2254576)。

基本條件

版本 1

請參閱

CBool 函數 | CByte 函數 | CCur 函數 | CDate 函數 | CInt 函數 | CLng 函數 | CSng 函數 | CStr 函數


Chr 函數

傳回指定 ANSI 字元碼所代表的字元。

Chr(charcode)

引數 charcode 是一個數值，用來識別字元。

附註

0 到 31 之間的數字與一般、非列印的 ASCII 碼相同。例如，Chr(10) 會傳回換行 (linefeed) 字元。

下面範例即使用 Chr 函數傳回與指定字元碼相關的字元：

Dim MyChar
MyChar = Chr(65)   ' 傳回 A。
MyChar = Chr(97)   ' 傳回 a。
MyChar = Chr(62)   ' 傳回 >。
MyChar = Chr(37)   ' 傳回 %。
備註 ChrB 函數是使用於含有位元組資料的字串，而非傳回一個字元，其有可能是一或兩個位元組，而 ChrB 都是傳回一個位元組。ChrW 函數則是為使用 Unicode 字元碼的 32 位元作業平臺而設計的。ChrW 函數的引數必須是 Unicode 字元碼，以避免將 ANSI 碼轉為 Unicode 碼處理。

基本條件

版本 1

請參閱

Asc 函數


CInt 函數

傳回一個轉換為 Integer 子型態變數的運算式。

CInt(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態運算結果。例如，使用 CInt 或 CLng 函數來強制執行整數運算，以免被當作貨幣、單精度、或雙精度運算。

您可以使用 CInt 函數以在任何語言的版本中，將任何一個資料型態轉換為 Integer 資料型態。例如，當您使用 CInt函數時，不同的小數點分隔符號和千分位分隔符號，會依據您系統的國別設定來做適當的確認。

如果 expression 超出Integer子型態允許的範圍，則會發生錯誤。

下面範例即使用 CInt 函數將值轉換成 Integer：

Dim MyDouble, MyInt
MyDouble = 2345.5678     ' MyDouble 是一個 Double。
MyInt = CInt(MyDouble)   ' MyInt 為 2346。
備註 CInt 函數與 Fix 及 Int 函數不同，Fix 和 Int 函數會將小數部分去除，然後傳回整數值。當小數部分恰好為 0.5 時， CInt 函數會將它轉換成最接近的偶數值。例如，0.5 轉換成 0，而 1.5 轉換成 2。

基本條件

版本 1

請參閱

CBool 函數 | CByte 函數 | CCur 函數 | CDate 函數 | CDbl 函數 | CLng 函數 | CSng 函數 | CStr 函數 | Int 與 Fix 函數


CLng 函數

傳回一個轉換為 Long 子型態變數的運算式。

CLng(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態運算結果。例如，使用 CInt 或 CLng 來強制執行整數運算，以免被當作貨幣、單精度、或雙精度運算。

您可以使用 CLng 函數以在任何語言的版本中，讓任何一個資料型態轉換至 Long 資料型態。例如，不同的小數點分隔符號，會依據您系統的國別設定來做適當的確認。而千分位分隔符號也一樣。

如果 expression 超出Long子型態允許的範圍，則會發生錯誤。

下面範例即使用 CLng 函數將值轉換成 Long：

Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45: MyVal2 = 25427.55   ' MyVal1, MyVal2 是 Doubles。
MyLong1 = CLng(MyVal1)   ' MyLong1 為 25427。
MyLong2 = CLng(MyVal2)   ' MyLong2 為 25428。
備註 CLng 函數與 Fix 及 Int 函數不同，Fix 和 Int 函數會將小數部分去除，然後傳回整數值。當小數部分恰好為 0.5 時， CLng 函數會將它轉換成最接近的偶數值。例如，0.5 轉換成 0，1.5 轉換成 2。

基本條件

版本 1

請參閱

CBool 函數 | CByte 函數 | CCur 函數 | CDate 函數 | CDbl 函數 | CInt 函數 | CSng 函數 | CStr 函數 | Int 與 Fix 函數


轉換函數

Asc 函數

CBool 函數

CByte 函數

CCur 函數

CDate 函數

CDbl 函數

Chr 函數

CInt 函數

CLng 函數

CSng 函數

CStr 函數

Hex 函數

Oct 函數


Cos 函數

傳回一角度的 cosine (餘弦函數) 值。

Cos(number)

引數 number 可以是任何有效的數值運算式，其值代表一個角度，以「弧度」為單位。

附註

Cos 函數的引數表示角度，傳回值為該角度兩鄰邊的比值。其比值的定義為「連接另一銳角的鄰邊除以連接直角的鄰邊」。 傳回值的範圍在 -1 到 1 之間。

要轉換度數為弧度，將度數乘以 pi /180。要轉換弧度為度數，將弧度乘以 180/pi。

下面範例即使用 Cos 函數傳回一角度的餘弦函數：

Dim MyAngle, MySecant
MyAngle = 1.3                 '以弧度定義角度。
MySecant = 1 / Cos(MyAngle)   ' 計算正割值。

基本條件

版本 1

請參閱

Atn 函數 | 可導出的數學函數 | Sin 函數 | Tan 函數


CreateObject 函數

建立並傳回一個Automation 物件的引用。

CreateObject(servername.typename [, location])

引數

servername
必要的。提供該物件之應用程式的名稱。
typename
必要的。所要建立物件的型態或物件類別。
location
選擇性的。該物件所在的網路伺服器的名稱。

附註

Automation 伺服器會至少提供一種物件型態。舉例來說，文書處理應用程式可以提供應用程式物件、文件物件或工具列物件。

若要建立 Automation 物件，請將 CreateObject 所傳回的物件指定給物件變數：

Dim ExcelSheet
Set ExcelSheet = CreateObject("Excel.Sheet")

以上這個例子，在應用程式一開始就建立 Microsoft Excel 試算表。只要物件被建立了，當您在程式裏要引用物件的時候，就可以使用您自訂的物件變數。在接下來的範例中，使用物件變數來運用新物件的屬性和方法：ExcelSheet，和其它 Microsoft Excel 物件，包括 Application 物件和及 ActiveSheet Cells 集合物件。例如：

'透過 Application 物件來顯現 Excel。
ExcelSheet.Application.Visible = True
' 寫幾個字到第一格內。
ExcelSheet. ActiveSheet.Cells(1,1).Value = "This is column A, row 1"
' 將這個 sheet 存檔。
ExcelSheet.SaveAs "C:\DOCS\TEST.XLS"
' 使用 Application 物件的 Quit 方法來關閉 Excel。
ExcelSheet.Application.Quit
' 釋放物件變數。
Set ExcelSheet = Nothing

只有當 Internet 的安全性選項不被核選，才能在遠端伺服器上建立物件。您可以將電腦名稱傳遞給 CreateObject 的 servername 參數，在遠端網路電腦上建立物件。該名稱與名稱共享的電腦名稱部份相同。對於名為「\\myserver\public」的網路共享， 其 servername 為「myserver」。此外，您可以使用 DNS 格式或 IP 位址來指定 servername。

以下程式碼傳回在名為「myserver」的遠端電腦所執行的 Excel 案例的版本編號：

Function GetVersion
   Dim XLApp
   Set XLApp = CreateObject("Excel.Application", "MyServer")
   GetVersion = XLApp.Version
End Function

如果遠端伺服器不存在或者找不到，即產生錯誤。

基本條件

版本 2

請參閱

GetObject 函數


CSng 函數

傳回一個轉換為 Single 子型態變數的運算式。

CSng(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態來進行運算。例如，使用 CDbl 或 CSng 來強制執行雙精度或單精度運算，以防止被當作貨幣或整數運算。

使用 CSng 函數可以在任何語言的版本中，讓任何一個資料型態轉換至 Single 資料型態。例如，不同的小數點分隔符號，會依據您系統的國別設定來做適當的確認。而千分位分隔符號也一樣。

如果 expression 超出Single子型態允許的範圍，則會發生錯誤。

下面範例即使用 CSng 函數將值轉換為 Single：

Dim MyDouble1, MyDouble2, MySingle1, MySingle2   ' MyDouble1, MyDouble2 是Doubles。
MyDouble1 = 75.3421115: MyDouble2 = 75.3421555
MySingle1 = CSng(MyDouble1)   ' MySingle1 為 75.34211。
MySingle2 = CSng(MyDouble2)   ' MySingle2 為 75.34216。

基本條件

版本 1

請參閱

CBool 函數 | CByte 函數 | CCur 函數 | CDate 函數 | CDbl 函數 | CInt 函數 | CLng 函數 | CStr 函數


CStr 函數

傳回一個轉換為 String 子型態變數的運算式。

CStr(expression)

引數 expression 可以是任何有效的運算式。

附註

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態來進行運算。例如，使用 CStr 來強制將執行結果以 String 資料型態表示。

您可以使用 CStr 函數而非 Str 函數，在任何語言的版本中，讓任何一個資料型態轉換至 String 資料型態。例如，不同的小數點分隔符號，會依據您系統的國別設定來做適當的確認。

引數 expression 將決定函數傳回值為何，請參考下表：

若 expression 內容為 | CStr 傳回
Boolean | 包含「True」或「False」的字串。
Date | 包含一個日期的字串，其格式為您系統的簡短日期格式。
Null | 產生執行時期錯誤。
Empty | 一個長度為 0 的 字串 ("")。
Error | 包含一個英文字「Error」以及一個錯誤代碼的字串。
其他數值 | 包含這個數值的字串。

下面範例即使用 CStr 函數將數值轉換為 String：

Dim MyDouble, MyString
MyDouble = 437.324         ' MyDouble 是一個 Double。
MyString = CStr(MyDouble)   ' MyString 為"437.324"。

基本條件

版本 1

請參閱

CBool 函數 | CByte 函數 | CCur 函數 | CDate 函數 | CDbl 函數 | CInt 函數 | CLng 函數 | CSng 函數


Date 函數

傳回目前系統日期。

Date

附註

下面範例即使用 Date 函數傳回目前系統的日期：

Dim MyDate
MyDate = Date   ' MyDate 為目前系統的日期。

基本條件

版本 1

請參閱

CDate 函數 | Now 函數 | Time 函數


DateAdd 函數

傳回內容為某個基準日期加上數個時間間隔單位後的日期。

DateAdd(interval, number, date)

引數

interval
必要項。字串運算式，表示所要加上去之時間間隔單位。其值請參考設定部份。
number
必要項。數值運算式，表示要加上之時間間隔單位的次數。其數值可以為正數(可得未來日期)，亦可以為負數(可得過去的日期)。
date
必要項。可為型態為 Variant (Date) 之變數或正確表示出日期之字串，代表基準日期，將此基準日期加上 number 次的 interval 後，即為傳回值之日期。

設定值

引數 interval 的設定值如下：

設定值 | 說明
yyyy | 西元年
q | 季
m | 月
y | 一年的日數
d | 日
w | 一週的日數
ww | 週
h | 時
n | 分
s | 秒

附註

您可以使用 DateAdd 函數計算基準日期加上或減去您所指定的時間間隔後的結果。例如，您可以用 DateAdd 來計算從今天起三十天後或三十天前的日期是那一天；或者計算距離現在 45 分鐘前或 45 分鐘後的時間。如果時間間隔是以 [天] 來計算，interval 引數可以是 [一年的日數] ("y")，[日] ("d")，或 [一週的日數] ("w")。

DateAdd 函數所傳回的日期一定是有效且正確的。下面的範例以一月三十一日為基準日，計算加上一個月後的結果。

NewDate = DateAdd("m", 1, "31-Jan-95")

上例中，DateAdd 傳回 28-Feb-95，而不是 31-Feb-95。如果基準日 date 是 31-Jan-96，傳回值則是 29-Feb-96，因為 DateAdd 函數知道 1996 年是閏年。

如果計算出來的年度超過 100，就會產生程式錯誤。

如果 number 引數不是一個 Long 值，計算時會取最接近的整數值來計算。

基本條件

版本 2

請參閱

DateDiff 函數 | DatePart 函數


DateDiff 函數

傳回兩個日期間相差的時間間隔單位數目。

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

DateDiff 函數語法包含三個部分：

引數

interval
必要項。字串運算式，用來計算 date1 及 date2 之時間差的時間間隔單位。請參閱設定部份。
date1, date2
必要項。日期運算式。您要用來計算的兩個日期。
firstdayofweek
選擇項。常數，表示一星期的第一天。如果省略此引數，則以星期日為第一天。請參閱設定部分。
firstweekofyear
選擇項。常數，表示一年的第一週。如果省略此引數，則以包含一月一日的星期為第一週。請參閱設定部份。

設定值

引數 interval 的設定值如下：

設定值 | 說明
yyyy | 年
q | 季
m | 月
y | 一年的日數
d | 日
w | 一週的日數
ww | 週
h | 時
m | 分
s | 秒

引數 firstdayofweek 的設定值如下：

常數 | 值 | 說明
vbUseSystemDayOfWeek | 0 | 使用NLS API 設定。
vbSunday | 1 | 星期日 (預設值)。
vbMonday | 2 | 星期一。
vbTuesday | 3 | 星期二。
vbWednesday | 4 | 星期三。
vbThursday | 5 | 星期四。
vbFriday | 6 | 星期五。
vbSaturday | 7 | 星期六。

引數 firstweekofyear 的設定值如下：

常數 | 值 | 說明
vbUseSystem | 0 | 使用 NLS API 設定。
vbFirstJan1 | 1 | 包含一月一日的星期 (預設值)。
vbFirstFourDays | 2 | 第一個至少包含此年度四天的星期。
vbFirstFullWeek | 3 | 第一個完整的星期。

附註

您可以使用 DateDiff 函數來決定兩個日期之間的時間間隔單位數目。例如，您可以使用 DateDiff 來計算某兩個日期之間相隔幾日，或計算從今天起到年底還有多少個星期。

如果想知道 date1 與 date2 相差的 [日] 數，interval 可以是 [一年的日數] ("y") 或 [日] ("d")。如果 interval 是 [一週的日數] ("w")，DateDiff 會傳回兩日期間相差的週數。如果 date1 是星期一，DateDiff 會計算到 date2 為止之星期一的個數，包含 date2 但不包含 date1。不過，如果 interval 是 [週] ("ww")，DateDiff 函數會藉由計算 date1 與 date2 之間星期天的個數，會傳回兩日期間的 [日歷週] 數。如果 date2 剛好是星期天，則 date2 也會被加進計數結果中；但不論 date1 是否為星期天，它都不會被算進去。

如果 date1 比 date2 來得晚，DateDiff 函數傳回值為負數。

如果 interval 引數為 [w] 或 [ww]，firstdayofweek 引數會影響其計算結果。

如果 date1 或 date2 以短式日期的格式傳入日期引數，引數內所的年份資料若有給定，則該日期便是固定的。但是，若 date1 或 date2 以雙引號括起來，且年份資料並未給定，則現在的年份便會自動加入 date1 或 date2 引數中。如此程式便可適用於不同年份而無須更改程式碼。

但若計算十二月三十一日和來年的一月一日的年份差，DateDiff 會傳回 1 表示相差一個年份，雖然實際上只相差一天而已。

下面範例即使用 DateDiff 函數顯示給定日期與今天之間的日數：

Function DiffADate(theDate)
   DiffADate = "Days from today: " & DateDiff("d", Now, theDate)
End Function

基本條件

版本 2

請參閱

DateAdd 函數 | DatePart 函數


DatePart Function

Visual Basic Scripting Edition

DatePart 函數

傳回指定日期的某個時間部份。

DatePart(interval, date[, firstdayofweek[, firstweekofyear]])

引數

interval
必要項。字串運算式，指定的時間間隔單位。請參閱設定部份。
date
必要項。日期運算式，所要指定的日期。
firstdayof week
選擇項。常數，表示一星期的第一天。如果省略此引數，則以星期日為第一天。請參閱設定部份。
firstweekofyear
選擇項。常數，表示一年的第一週。如果省略此引數，則以包含一月一日的星期為第一週。請參閱設定部份。

設定值

引數 interval 的設定值如下：

設定值 | 說明
yyyy | 年
q | 季
m | 月
y | 一年的日數
d | 日
w | 一週的日數
ww | 週
h | 時
m | 分
s | 秒

引數 firstdayofweek 的設定值如下：

常數 | 值 | 說明
vbUseSystemDayOfWeek | 0 | 使用 NLS API 設定。
vbSunday | 1 | 星期日 (預設值)。
vbMonday | 2 | 星期一。
vbTuesday | 3 | 星期二。
vbWednesday | 4 | 星期三。
vbThursday | 5 | 星期四。
vbFriday | 6 | 星期五。
vbSaturday | 7 | 星期六。

引數 firstweekofyear 的設定值如下：

常數 | 值 | 說明
vbUseSystem | 0 | 使用 NLS API 設定。
vbFirstJan1 | 1 | 包含一月一日的星期 (預設值)。
vbFirstFourDays | 2 | 第一個至少包含此年度四天的星期。
vbFirstFullWeek | 3 | 第一個完整的星期。

附註

您可以使用 DatePart 函數來得知某個日期的特定時間單位。例如，您可以使用 DatePart 來得知某個日期資料是星期幾，或是幾點鐘。

如果 interval 引數為 [w] 或 [ww]，firstdayofweek 引數會影響其計算結果。

如果 date 以短式日期的格式傳入日期引數，引數內的年份資料若有給定，則該日期便是固定的。但是，若 date 以雙引號括起來，且年份資料並未給定，則現在的年份便會自動加入 date 引數中。如此程式便可適用於不同年份而無須更改程式碼。

下面範例使用 DatePart 函數顯示某日期為一年當中的某一季。

Function GetQuarter(TheDate)
   GetQuarter = DatePart("q", TheDate)
End Function

基本條件

版本 2

請參閱

DateAdd 函數 | DateDiff 函數


DateSerial 函數

傳回子型態 Date 的 Variant，內容為指定的年、月、日之日期表示式。

DateSerial(year, month, day)

引數

year
介於 100 到 9999 之間的整數，或為一數值運算式。
month
任何數值運算式。
day
任何數值運算式。

附註

要表示某個日期，如 1991 年 12 月 31 日，DateSerial 函數中的每個引數值必須落在合理的範圍內；即，1-31 為合理之 [日]，而 1-12 為合理之 [月]。不過，您也可以計算和某個基準日相差某年某月某日的日期。此時所傳入的引數可以是任何數值運算式，表示相差的年、月、或日數。

下面的範例就是用數值運算式來計算和某個基準日相差某個時間的日期，而不是求某個日期的日期表示式。範例中，DateSerial 函數計算 1990 年 8 月 1 日之前 10 年 (1990 - 10) 兩個月 (8 - 2) 又 1 天 (1 - 1) 的日期；換句話說，即 1980 年 5 月 31 日。

Dim MyDate1, MyDate2
MyDate1 = DateSerial(1970, 1, 1)   ' 傳回 January 1, 1970.
MyDate2 = DateSerial(1990 - 10, 8 - 2, 1 - 1)   ' 傳回 May 31, 1980.

引數 year 的數值若介於 0 到 99，則當成是 1900-1999。如要指定其它 year 引數，請用四位數字表示 (例如，1800)。

當某個引數超過其合理範為時，會自動進位到下一個較大的時間單位。例如，如果您指定 35 天在 day 引數中，則這個引數值會被解釋成一個月加上多出來的日數，多出的日數將會由其年份與月份引數來決定。 如果任何一個引數值超出 -32,768 到 32,767 的範圍，會產生程式錯誤。如果計算結果的日期超出作業系統接受的範圍，也會產生程式錯誤。

基本條件

版本 1

請參閱

Date 函數 | DateValue 函數 | Day 函數 | Month 函數 | Now 函數 | TimeSerial 函數 | TimeValue 函數 | Weekday 函數 | Year 函數


DateValue 函數

傳回一個 Variant (Date) 型態的日期表示式。

DateValue(date)

引數 date 通常是字串運算式，表示從西元 100 年 1 月 1 日到西元 9999 年 12 月 31 日間的某個日期。然而，date 也可以是其它型態的運算式，只要其所代表的日期或時間是落在上述範圍內即可。

附註

如果引數 date 包含時刻的資料，DateValue 會把時刻部份捨去。但若 date 只含時刻而無日期資料 (例如 "89:98")，會產生程式錯誤。

如果 date 是個字串，且日期內容只有數字及日期分隔符號，DateValue 會依照您的作業系統所選定的短式日期格式來決定月、日、年在字串中的順序。DateValue 也接受以正確無誤的英文月份名稱代替月份數字所表示的日期，全名或縮寫均可。例如，除了可用 12/30/1991 和 12/30/91 外，DateValue 也接受 December 30, 1991 和 Dec 30, 1991 來表示同一日期。

如果 date 中的年份省略，DateValue 會使用目前系統時間裏的年份。

下面範例即使用 DateValue 函數將字串轉換為日期。您可以使用短式日期直接指定日期給 Variant 變數，例如 MyDate = #9/11/63#。

Dim MyDate
MyDate = DateValue("September 11, 1963")   ' 傳回日期。

基本條件

版本 1

請參閱

CDate 函數 | DateSerial 函數 | Day 函數 | Month 函數 | Now 函數 | TimeSerial 函數 | TimeValue 函數 | Weekday 函數 | Year 函數


Day 函數

傳回一值，從 1 到 31（包含1與31），表示一個月中的某一日。

Day(date)

引數 date 可以是任何運算式，只要能夠表示一個合理的日期即可。如果 date 是 Null，則傳回 Null。

下面範例即使用 Day 函數取得從指定日起的一個月中的某一日：

Dim MyDay
MyDay = Day("October 19, 1962")   ' MyDay 為 19.

基本條件

版本 1

請參閱

Date 函數 | Hour 函數 | Minute 函數 | Month 函數 | Now 函數 | Second 函數 | Weekday 函數 | Year 函數


可導出的數學函數

下表為非基本數學函數，所有列出的非基本數學函數，皆可由基本數學函數導出：

函數 | 由「基本」函數導出之公式
Secant (正割) | Sec(X) = 1 / Cos(X)
Cosecant (餘割) | Cosec(X) = 1 / Sin(X)
Cotangent (餘切) | Cotan(X) = 1 / Tan(X)
Inverse Sine (反正弦) | Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine (反餘弦) | Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant (反正割) | Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))
Inverse Cosecant (反餘割) | Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Inverse Cotangent (反餘切) | Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine (超正弦) | HSin(X) = (Exp(X) - Exp(-X)) / 2
Hyperbolic Cosine (超餘弦) | HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent (超正切) | HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant (超正割) | HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant (超餘割) | HCosec(X) = 2 / (Exp(X) - Exp(-X))
Hyperbolic Cotangent (超餘切) | HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Inverse Hyperbolic Sine (反超正弦) | HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine (反超餘弦) | HArccos(X) = Log(X + Sqr(X * X - 1))
Inverse Hyperbolic Tangent (反超正切) | HArctan(X) = Log((1 + X) / (1 - X)) / 2
Inverse Hyperbolic Secant (反超正割) | HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant (反超餘割) | HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)
Inverse Hyperbolic Cotangent (反超餘切) | HArccotan(X) = Log((X + 1) / (X - 1)) / 2
以 N 為底的對數值 | LogN(X) = Log(X) / Log(N)

請參閱

Atn 函數 | Cos 函數 | Exp 函數 | Log 函數 | Sin 函數 | Sqr 函數 | Tan 函數


Eval 函數

求出運算式的值，並傳回結果。

 [result = ]Eval(expression)

引數

result
選擇性的。這是指定傳回值的變數。如果未指定 result 的話，請考慮換成使用 Execute 陳述式。
expression
必要的。這可以是包含任何合法的 VBScript 運算式的字串。

附註

在 VBScript 中，x = y 有兩種不同的解釋方式。第一種是當成指定陳述式，也就是把 y 的值指定給 x。第二種解釋方式是當成檢驗 x 和 y 所包含的值是否相等的運算式。如果相等的話，result 為 True；如果不相等的話，則 result 為 False。Eval 方法一定會使用第二種解釋方式，而 Execute 陳述式則一定使用第一種解釋方式。

備註 Microsoft® JScript™ 不會分不清是指定還是比較，因為它的指定運算子 (=) 與比較運算子 (==) 不一樣。

下面的範例說明 Eval 函數的用法：

Sub GuessANumber
   Dim Guess, RndNum
   RndNum = Int((100) * Rnd(1) + 1)
   Guess = CInt(InputBox("Enter your guess:",,0))
   Do
      If Eval("Guess = RndNum") Then
         MsgBox "Congratulations! You guessed it!"
         Exit Sub
      Else
         Guess = CInt(InputBox("Sorry! Try again.",,0))
      End If
   Loop Until Guess = 0
End Sub

基本條件

版本 5

請參閱

Execute 陳述式


Exp 函數

傳回 e (自然對數之底數) 的某次方。

Exp(number)

引數 number 可以是任何的數值運算式。

附註

如果 number 的值超過 709.782712893，會產生程式錯誤。常數 e 的值大約是 2.718282。

備註 Exp 函數的作用和 Log 函數成互補關係，所以有時也稱做「反對數」。

下面範例即使用 Exp 函數傳回乘冪數：

Dim MyAngle, MyHSin   '以弧度定義角度。
MyAngle = 1.3   '計算雙曲線正弦值。

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2

基本條件

版本 1

請參閱

可導出的數學函數 | Log 函數


Filter 函數

傳回一個以零為基底的陣列，其內容為符合篩選條件的字串陣列子集合。

Filter(InputStrings, Value[, Include[, Compare]])

引數

InputStrings
必要項。被搜尋的一維字串陣列。
Value
必要項。所要尋找的字串。
Include
選擇項。以布林值表示是否傳回包含或不包含 Value 的子字串。若 Include 值為 True，Filter 所傳回的陣列子集合，將包含 Value 所指定的子字串。若 Include 為 False，Filter 所傳回的陣列子集合，並不包含 Value 所指定的子字串。
Compare
選擇項。以數值指定字串比較的方式，請參閱「設定值」部分。

設定值

在 Compare 引數中，允許使用下列值：

常數 | 值 | 說明
vbBinaryCompare | 0 | 進行二進位資料比對。
vbTextCompare | 1 | 進行純文字比對。

附註

如果沒有任何 Value 在 InputStrings 中比對成功，Filter 將傳回一個空陣列。若 InputStrings 為 Null 或不是一維陣列，則發生錯誤。

由 Filter 函數所傳回的陣列，只包含了足夠放置比對正確項目的成員。

下面範例即使用 Filter 函數傳回包含尋找標準 "Mon" 的陣列：

Dim MyIndex
Dim MyArray (3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyIndex = Filter(MyArray, "Mon") ' MyIndex(0) 為 "Monday"。

基本條件

版本 2

請參閱

Replace 函數


FormatCurrency 函數

傳回一個以系統控制台中所設定的貨幣符號格式化的貨幣值運算式。

FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

引數

Expression
必要項。欲被格式化的運算式。
NumDigitsAfterDecimal
選擇項。此數值表示有多少小數位數。預設值為 -1，表示使用系統地區設定值。
IncludeLeadingDigit
選擇項。以 Tristate 常數表示小數點前是否顯示前導零。請參閱「設定值」部分。
UseParensForNegativeNumbers
Optional. Tristate constant that indicates whether or not to place negative values within parentheses. See Settings section for values.
GroupDigits
選擇項。以 Tristate 常數表示數字是否以數位群組符號來分隔，其視系統地區設定而有不同。請參閱「設定值」部分。

設定值

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 引數有下列的設定值：

常數 | 值 | 說明
TristateTrue | -1 | True
TristateFalse | 0 | False
TristateUseDefault | -2 | 使用系統地區設定值。

附註

當某一或多個選項引數被省略了，那麼將會使用系統地區設定值。貨幣符號的位置是由系統地區設定值決定。

備註 除了 "前導零" 是由 [數字] 頁籤中取得外，所有設定值的資訊皆由 [控制台] - [國別設定] - [貨幣] 頁籤中取得 (即系統地區設定值)。

下面範例即使用 FormatCurrency 函數將運算式的格式製作為貨幣格式並將之指定給 MyCurrency：

Dim MyCurrency
MyCurrency = FormatCurrency(1000)   ' MyCurrency 為 $1000.00。

基本條件

版本 2

請參閱

FormatDateTime 函數 | FormatNumber 函數 | FormatPercent 函數


FormatDateTime 函數

傳回日期或時間格式的運算式。

FormatDateTime(Date[, NamedFormat])

引數

Date
必要項。欲格式化的日期運算式。
NamedFormat
選擇項。以數值表示所使用的日期/時間格式。若省略此引數，則使用 vbGeneralDate。

設定值

NamedFormat 引數有下列的設定值：

常數 | 值 | 說明
vbGeneralDate | 0 | 顯示日期和 (或) 時間。將以簡短日期格式顯示日期，以完整時間顯示時間。可以兩者皆顯示。
vbLongDate | 1 | 以系統地區的完整日期格式設定值顯示日期。
vbShortDate | 2 | 以系統地區的簡短日期格式設定值顯示日期。
vbLongTime | 3 | 以系統地區的時間格式設定值顯示時間。
vbShortTime | 4 | 以 24 小時制格式 (hh:mm) 顯示時間。

附註

下面範例即使用 FormatDateTime 函數將運算式製作格式為完整日期並將之指定給 MyDateTime：

Function GetCurrentDate
   ' FormatDateTime 將 Date 格式製作為完整日期格式。
   GetCurrentDate = FormatDateTime(Date, 1)
End Function

基本條件

版本 2

請參閱

FormatCurrency 函數 | FormatNumber 函數 | FormatPercent 函數


FormatNumber 函數

傳回一格式化的數字。

FormatNumber(Expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

引數

Expression
必要項。欲被格式化的運算式。
NumDigitsAfterDecimal
選擇項。此數值表示有多少小數位數。預設值為 -1，表示使用系統地區設定值。
IncludeLeadingDigit
選擇項。以 Tristate 常數表示小數點前是否顯示前導零。請參閱「設定值」部分。
UseParensForNegativeNumbers
選擇項。以 Tristate 常數表示負數值是否帶有括號。請參閱「設定值」部分。
GroupDigits
選擇項。以 Tristate 常數表示數字是否以數位群組符號來分隔，其視 [控制台] 內之設定而定。請參閱「設定值」部分。

設定值

IncludeLeadingDigit、UseParensForNegativeNumbers 及 GroupDigits 引數有下列的設定值：

常數 | 值 | 說明
TristateTrue | -1 | True
TristateFalse | 0 | False
TristateUseDefault | -2 | 使用系統地區設定值。

附註

若省略了某一或多個選項引數，那麼將會使用系統地區設定值。

備註 所有設定值的資訊皆由 [控制台] - [國別設定] - [數字] 頁籤中取得。

下面範例即使用 FormatNumber 函數製作一數字的格式到小數點後四個位置：

Function FormatNumberDemo
   Dim MyAngle, MySecant, MyNumber
   MyAngle = 1.3   '以弧度定義角度。
   MySecant = 1 / Cos(MyAngle)   '計算正割。
   FormatNumberDemo = FormatNumber(MySecant,4) '格式化 MySecant 至小數點之後四個位置。
End Function

基本條件

版本 2

請參閱

FormatCurrency 函數 | FormatDateTime 函數 | FormatPercent 函數


FormatPercent 函數

傳回帶有 % 符號的格式化百分比運算式 (以 100 為基底)。

FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

引數

Expression
必要項。欲被格式化的運算式。
NumDigitsAfterDecimal
選擇項。此數值表示有多少小數位數。預設值為 -1，表示使用系統地區設定值。
IncludeLeadingDigit
選擇項。以 Tristate 常數表示小數點前是否顯示前導零。請參閱「設定值」部分。
UseParensForNegativeNumbers
選擇項。以 Tristate 常數表示負數值是否帶有括號。請參閱「設定值」部分。
GroupDigits
選擇項。以 Tristate 常數表示數字是否以數位群組符號來分隔，其視 [控制台] 內之設定而定。請參閱「設定值」部分。

設定值

IncludeLeadingDigit、UseParensForNegativeNumbers 及 GroupDigits 引數有下列的設定值：

常數 | 值 | 說明
TristateTrue | -1 | True
TristateFalse | 0 | False
TristateUseDefault | -2 | 使用系統地區設定值。

附註

若省略了某一或多個選項引數，那麼將會使用系統地區設定值。

備註 所有設定值的資訊皆由 [控制台] - [國別設定] - [數字] 頁籤中取得

下面範例即使用 FormatPercent 函數將運算式格式化為百分比：

Dim MyPercent
MyPercent = FormatPercent(2/32) ' MyPercent 為 6.25%。

基本條件

版本 2

請參閱

FormatCurrency 函數 | FormatDateTime 函數 | FormatNumber 函數


GetLocale 函數

傳回目前國別語系的ID 值。

GetLocale()

附註

國別語系（locale）是一種根據使用者喜好，反映使用者本身使用的語言、國家/地區和文化習慣的設定。國別語系決定了像是鍵盤的配置、字母分門別類的順序，以及日期、時間、數字和貨幣格式。

傳回值可以是出現在語系識別碼圖表中的任意32位元值：

以下範例說明了GetLocale 函數的用法。要使用這個程式碼，請貼上標準的HTML 網頁中位於<BODY>標記之間的整個範例。

Enter Date in UK format: <input type="text" id="UKDate" size="20"><p>
Here's the US equivalent: <input type="text" id="USdate" size="20"><p>
<input type="button" value="Convert" id="button1"><p>
Enter a price in German: &nbsp; <input type="text" id="GermanNumber" size="20">
<p>
Here's the UK equivalent: <input type="text" id="USNumber" size="20"><p>
<input type="button" value="Convert" id="button2"><p>

<script language="vbscript">
Dim currentLocale
' 取得目前的國別語系
currentLocale = GetLocale

Sub Button1_onclick
  Dim original
  original = SetLocale("en-gb")
  mydate = CDate(UKDate.value)
  ' IE 一律將國別語系設定為US 英語，所以請使用
  ' currentLocale 變數以設定國別語系為US 英語
  original = SetLocale(currentLocale)
  USDate.value = FormatDateTime(mydate,vbShortDate)
End Sub

Sub button2_onclick
  Dim original
  original = SetLocale("de")
  myvalue = CCur(GermanNumber.value)
  original = SetLocale("en-gb")
  USNumber.value = FormatCurrency(myvalue)
End Sub

</script>

請參閱

SetLocale 函數 | Locale ID (LCID) 圖表


GetObject 函數 (VBScript)

Visual Basic Scripting Edition

GetObject 函數

從檔案中傳回一份 Automation 物件的引用。

GetObject([pathname] [, class])

引數

pathname
選擇項。這必須是一個字串，含有所要擷取的物件檔案的完整路徑和名稱。如果省略了 pathname，class 就是必要項。
class
選擇項。表示物件之物件類別的字串。

class 引數使用 appname.objectype 語法，並且具有下列幾個部分：

引數

appname
必要項。為一字串，提供此物件的應用程式名稱。
objectype
必要項。Variant (String)，要建立的物件之型態或物件類別。

附註

您可以使用 GetObject 函數來運用檔案的 Automation 物件，並指定此物件給物件變數。使用 Set 陳述式來指定 GetObject 傳回的物件給物件變數。例如：

Dim CADObject
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

執行此段程式碼時，pathname 所指定的應用程式就開始執行，在指定檔案中的物件也會被啟動。如果 pathname 是零長度字串 ("")，GetObject 會傳回指定型態新物件的執行個體。如果省略 pathname 引數，GetObject 傳回目前使用中指定型態的物件。如果指定型態的物件不存在，會發生錯誤。

有些應用程式允許只啟動檔案的部份。請在此檔名後面加上驚嘆號 (!)，並在其後加上所要啟動檔案部份的識別字串。若想知道關於建立此類字串的資料，請參閱建立此物件的應用程式之說明文件。

例如，在繪圖應用程式裏，繪圖檔案可能儲存多層次功能介面。您可以使用下列程式碼來啟動功能介面，假設繪圖檔案的名稱是 SCHEMA.CAD ：

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

如果不指定物件的物件類別，自動伺服功能會根據您所提供的檔案名稱來決定要開始的應用程式，以及啟動的物件。然而，有些檔案支援一項以上的物件類別。 舉例來說，在繪圖時要支援三種物件型態：Application 物件、Drawing 物件，以及 Toolbar 物件，這些都是同一個檔案的部份。若想指定您要啟動檔案中的那個物件，請使用選擇性的 class 引數。舉例來說：

Dim MyObject
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

在上面的例子裏，FIGMENT 是此繪圖應用程式的名稱，而 DRAWING 是它所支援之物件型態裏的其中一項。只要物件已經被啟動，就必須引用程式碼中已定義的物件變數。在先前的例子裏，使用物件變數 MyObject 來存取新物件的屬性和方法，舉例來說：

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
備註 使用 GetObject 函數的時機是：當物件已經有了一個目前執行個體，或是想用已經載入的檔案來建立物件。如果目前沒有執行個體，而且您不希望物件由一個已載入的檔案開始，請使用 CreateObject 函數。

如果一個物件已登錄為單一執行個體物件，無論 CreateObject 執行幾次，該物件也只能建立一個執行個體。使用單一執行個體物件時，若以零長度字串 ("") 語法來呼叫，則 GetObject 只能傳回相同的執行個體，這種情況下省略 pathname 將會造成錯誤。

基本條件

版本 5

請參閱

CreateObject 函數


GetRef 函數

傳回指向一程序的引用，而且這個程序必須可以與某個事件結合。

Set object.eventname = GetRef(procname)

引數

object
必要項。與 event 相關的物件名稱。
event
必要項。將與函數結合的事件名稱。
procname
必要項。內含與 event 有關之 Sub 或 Function 程序名稱的字串。

附註

GetRef 函數讓您可以將一 VBScript 程序 (Function 或 Sub) 與您的 DHTML (Dynamic HTML) 網頁上任何可用的事件相連接。DHTML 物件模型會提供有關其各種不同物件可用事件的資訊。

在其他指令執行和程式語言中，把由 GetRef 提供的這類功能稱為函數指標，也就是它指向一個在指定的事件發生時會執行的程序位址。

下面的範例說明 GetRef 函數的用法。

<SCRIPT LANGUAGE="VBScript">

Function GetRefTest()
   Dim Splash
   Splash = "GetRefTest Version 1.0"   & vbCrLf
   Splash = Splash & Chr(169) & " YourCompany 1999 "
   MsgBox Splash
End Function

Set Window.Onload = GetRef("GetRefTest")
</SCRIPT>

基本條件

版本 5

請參閱

Function 陳述式 | Set 陳述式 | Sub 陳述式


Hex 函數

將數字以十六進位表示法，用 String 傳回。

Hex(number)

引數 number 可以是任何的運算式。

附註

如果 number 不是一個整數，那麼在執行前會先四捨五入成最接近的整數。

如果 number 為... | 傳回值
Null | Null
Empty | 零 (0)
任何其他的數字 | 最多可到八個十六進位字元。

您可以將十六進位數字直接以 &H 開頭來表示。例如，&H10 代表十進位的 16。

下面範例即使用 Hex 函數傳回一數值的十六進位值：

Dim MyHex
MyHex = Hex(5)   ' 傳回5。
MyHex = Hex(10)   ' 傳回A。
MyHex = Hex(459)   ' 傳回1CB。

基本條件

版本 1

請參閱

Oct 函數


Hour 函數

傳回一個在 0 及 23 之間的值（包含0與23），表示一天之中的某個「時」。

Hour(time)

引數 time 可以是任何表示合理時刻的運算式。如果 time 是 Null，則傳回 Null。

下面範例即使用 Hour 函數獲得目前時間的小時數：

Dim MyTime, MyHour
MyTime = Now
MyHour = Hour(MyTime) ' MyHour 的數字即為
                      ' 目前的小時數。

基本條件

版本 1

請參閱

Day 函數 | Minute 函數 | Now 函數 | Second 函數 | Time 函數


InputBox 函數

顯示一對話方塊來做為提示，等使用者輸入文字或按下按鈕，則傳回文字方塊的內容。

InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context])

引數

prompt
字串運算式。用來做為對話方塊訊息的字串運算式。prompt 的最大長度大約是 1024 個字元，由使用字元的寬度來決定。如果 prompt 超過一行，您可以在各行之間用復位字元 (Chr(13))、換行字元 (Chr(10))、或是復位字元與換行字元的組合 (Chr(13) & Chr(10)) 來做區隔。
title
顯示在對話方塊標題列的字串運算式。如果沒有 title，則以應用程式的名稱做為標題。
default
顯示在文字方塊中的字串運算式，在沒有提供其他輸入時做為預設值。如果沒有 default，則文字方塊就是空白的。
xpos
數值運算式。成對指定的數值運算式，用來指定對話方塊的左緣與螢幕左緣的水平距離。如果沒有 xpos，則對話方塊會出現在水平方向的中間。
ypos
成對指定的數值運算式，用來指定對話方塊的上緣與螢幕的上緣的距離。如果沒有 ypos，對話方塊會放置於螢幕垂直方向三分之一的位置。
helpfile
字串運算式，用來指定對話方塊文字感應說明的說明檔案。如果指定了 helpfile，則您也必須指定 context。
context
數值運算式，由說明檔案的作者指定給某個說明主題的說明主題代碼。如果指定了 context，則也必須指定 helpfile。

附註

如果同時提供 helpfile 與 context，對話方塊中會自動加上一個 Help 按鈕。

如果使用者按了一下 [確定] 或是按了 ENTER，則 InputBox 函數會傳回文字方塊中的內容；如果使用者按了一下 [取消]，則此函數會傳回一個長度為零的字串 ("")。

下面範例即使用 InputBox 函數顯示輸入方塊並指定字串給 Input 變數：

Dim Input
Input = InputBox("Enter your name")
MsgBox ("You entered: " & Input)

基本條件

版本 1

請參閱

MsgBox 函數


InStr 函數

傳回在某字串中一字串的最先出現位置。

InStr([start, ]string1, string2[, compare])

引數

start
選擇項。為一數值運算式，用來設定每次搜尋的起點。如果省略，將從第一個字元開始。如果 start 所含為 Null，將發生錯誤。如果指定 compare，則一定要有 start 引數。
string1
必要項。欲進行搜尋的字串運算式。
string2
必要項。欲搜尋的字串運算式。
compare
選擇項。設定字串比較種類。設定值請參考設定部份。如果省略 compare，將進行二進位資料比對。

設定值

引數 compare 的設定值如下：

常數 | 值 | 說明
vbBinaryCompare | 0 | 進行二進位資料比對。
vbTextCompare | 1 | 進行文字資料比對。

傳回值

Instr 函數的傳回值如下：

如果 | InStr 傳回
string1 長度為零 | 0
string1 為 Null | Null
string2 長度為零 | start
string2 為 Null | Null
string2 找不到 | 0
在 string1 中找到 string2 | 找到的位置
start > Len(string2) | 0

附註

下面範例即使用 InStr 尋找字串：

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"   '欲尋找的字串。
SearchChar = "P"   '搜尋 "P"。
MyPos = Instr(4, SearchString, SearchChar, 1)   '在位置 4 開始文字比較。傳回 6。
MyPos = Instr(1, SearchString, SearchChar, 0)   '在位置 1 開始二元比較。傳回 9。
MyPos = Instr(SearchString, SearchChar)   '預設為二元比較。(最後引數已省略)。傳回 9。
MyPos = Instr(1, SearchString, "W")   '二元比較開始於位置 1。傳回 0 (找不到 "W")
注意 InStrB 函數是使用在位元組資料字串上。所以 InStrB 傳回的是位元組位置，而非字元位置。

基本條件

版本 1

請參閱

InstrRev 函數


InStrRev 函數

傳回在某字串中一字串的最先出現位置，從尾端開始搜尋。

InStrRev(string1, string2[, start[, compare]])

引數

string1
必要項。欲進行搜尋的字串運算式。
string2
必要項。欲搜尋的字串運算式。
start
選擇項。為一數值運算式，用來設定每次搜尋的起點。如果省略，則為 -1，代表將從最後一個字元開始。如果 start 所含為 Null，將發生錯誤。
compare
選擇項。設定字串比較種類。如果省略 compare，則進行二進位資料比對。設定值請參考設定部份。

設定值

引數 compare 的設定值如下：

常數 | 值 | 說明
vbBinaryCompare | 0 | 進行二進位資料比對。
vbTextCompare | 1 | 進行文字資料比對。

傳回值

InStrRev 函數的傳回值如下：

如果 | InStrRev 傳回
string1 長度為零 | 0
string1 為 Null | Null
string2 長度為零 | start
string2 為 Null | Null
string2 找不到 | 0
在 string1 中找到 string2 | 找到的位置
start > Len(string2) | 0

附註

下面範例即使用 InStrRev 函數尋找字串：

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"   '要搜尋的字串。
SearchChar = "P"   '搜尋 "P"。
MyPos = InstrRev(SearchString, SearchChar, 10, 0)   '在位置 10 開始二進位比較。傳回 9。
MyPos = InstrRev(SearchString, SearchChar, -1, 1)   '在最後位置開始文字比較。傳回 12。
MyPos = InstrRev(SearchString, SearchChar, 8)   '預設為二元比較。(最後引數已省略)。傳回 0。
備註 InStrRev 函數的語法與 InStr 函數的語法不同。

基本條件

版本 2

請參閱

InStr 函數


Int, Fix 函數

Visual Basic Scripting Edition

Int、Fix 函數

傳回引數的整數部份。

Int(number)
Fix(number)

引數 number 可以是任何的數值運算式。如果 number 的值為Null，則傳回 Null。

附註

Int 與 Fix 都會去掉 number 的小數部份而傳回剩下的整數。

兩個函數的不同之處在於，當 number 為負數時，Int 會傳回小於或等於 number 的第一個負整數，而 Fix 則會傳回大於或等於 number 的第一個負整數。例如，Int 將 -8.4 轉成 -9，而 Fix 則將 -8.4 轉成 -8。

Fix(number) 和下列式子的結果是一樣的：

Sgn(number) * Int(Abs(number))

下面範例即示範 Int 和 Fix 函數傳回數字的整數部份：

MyNumber = Int(99.8)    ' 傳回 99。
MyNumber = Fix(99.2)   ' 傳回 99。
MyNumber = Int(-99.8)   ' 傳回 -100。
MyNumber = Fix(-99.8)   ' 傳回 -99。
MyNumber = Int(-99.2)   ' 傳回 -100。
MyNumber = Fix(-99.2)   ' 傳回 -99。

基本條件

版本 1

請參閱

CInt 函數 | Round 函數


IsArray 函數

傳回 Boolean 值，用來指出變數是否為一個陣列。

IsArray(varname)

引數 varname 可以是任何變數。

附註

如果變數是一個陣列的話，IsArray 就會傳回 True；否則，則傳回 False。用 IsArray 函數來判斷一個 Variant 是否為陣列型態是非常有效的。

下面範例即使用 IsArray 函數測試 MyVariable 是否為一陣列：

Dim MyVariable
Dim MyArray(3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyVariable = IsArray(MyArray) ' MyVariable 包含 "True"。

基本條件

版本 1

請參閱

IsDate 函數 | IsEmpty 函數 | IsNull 函數 | IsNumeric 函數 | IsObject 函數 | VarType 函數


IsDate 函數

傳回 Boolean 值，用來指出運算式是否可以轉換成日期。

IsDate(expression)

引數 expression 可以是任何日期運算式或是可以被辨別為日期或時間的字串運算式。

附註

如果運算式是一個日期或是可以被轉換成有效日期，IsDate 會傳回 True；否則它會傳回 False。在 Microsoft Windows 中，有效日期的範圍是介於西元 100 年 1 月 1 日與西元 9999 年 12 月 31 日之間；其有效範圍會因作業系統而有所差異。

下面範例即使用 IsDate 函數決定是否將運算式轉換成日期：

Dim MyDate, YourDate, NoDate, MyCheck
MyDate = "October 19, 1962": YourDate = #10/19/62#: NoDate = "Hello"
MyCheck = IsDate(MyDate)   ' 傳回 True。
MyCheck = IsDate(YourDate)   ' 傳回 True。
MyCheck = IsDate(NoDate)   ' 傳回 False。

基本條件

版本 1

請參閱

CDate 函數 | IsArray 函數 | IsEmpty 函數 | IsNull 函數 | IsNumeric 函數 | IsObject 函數 | VarType 函數


IsEmpty 函數

傳回 Boolean 值，用來指出變數是否已經初始化。

IsEmpty(expression)

引數 expression 可以是任何運算式。然而，因為 IsEmpty 是用來決定個別變數是否已初始化，所以引數 expression 通常是單一變數名稱。

附註

如果變數未初始化，或已明確設定為 Empty；則 IsEmpty 會傳回 True；否則，則傳回 False。如果 expression 含有一個以上的變數，則一定傳回 False。

下面範例即使用 IsEmpty 函數決定是否將變數初始化：

Dim MyVar, MyCheck
MyCheck = IsEmpty(MyVar)   ' 傳回True。
MyVar = Null   ' 指定 Null。
MyCheck = IsEmpty(MyVar)   ' 傳回False。
MyVar = Empty   ' 指定Empty。
MyCheck = IsEmpty(MyVar)   ' 傳回True。

基本條件

版本 1

請參閱

IsArray 函數 | IsDate 函數 | IsNull 函數 | IsNumeric 函數 | IsObject 函數 | VarType 函數


IsNull 函數

傳回 Boolean 值，用來指出運算式是否未含任何有效的資料(Null)。

IsNull(expression)

引數 expression 可以是任何運算式。

附註

如果 expression 為 Null，則 IsNull 傳回 True；否則 IsNull 會傳回 False。如果 expression 中存在不只一個變數，若其中任一變數為 Null，則會使得整個運算式傳回 True。

Null 值是用來指出變數不包含有效的資料。Null 和 Empty 的不同點在於，後者是指尚未初始化的變數，Null 和長度為零的字串 ("") 也不同，因為長度為零的字串指的是空字串。

注意 使用IsNull 函數來決定運算式是否包含 Null 值。在某些情況下您希望其值為 True 的運算式，就像 Var = Null 和 Var <> Null，其值永遠為 False。這是因為任何包含 Null 的運算式其值為 Null，也就因此為 False。

下面範例即使用 IsNull 函數決定變數是否含有 Null：

Dim MyVar, MyCheck
MyCheck = IsNull(MyVar)   ' 傳回False。
MyVar = Null   ' 指定Null。
MyCheck = IsNull(MyVar)   ' 傳回 True。
MyVar = Empty   ' 指定Empty。
MyCheck = IsNull(MyVar)   ' 傳回False。

基本條件

版本 1

請參閱

IsArray 函數 | IsDate 函數 | IsEmpty 函數 | IsNumeric 函數 | IsObject 函數 | VarType 函數


IsNumeric 函數

傳回 Boolean 值，用來指出運算式的運算結果是否為數字。

IsNumeric(expression)

引數 expression 可以是任何運算式。

附註

如果整個 expression 的運算結果為數字，則 IsNumeric 會傳回 True；否則，它會傳回 False。如果 expression 是個日期運算式，則 IsNumeric 會傳回 False。

下面範例即使用 IsNumeric 函數決定變數是否可以變成數字：

Dim MyVar, MyCheck
MyVar = 53   ' 指定一個值。
MyCheck = IsNumeric(MyVar)   ' 傳回True。
MyVar = "459.95"   ' 指定一個值。
MyCheck = IsNumeric(MyVar)   ' 傳回True。
MyVar = "45 Help"   ' 指定一個值。
MyCheck = IsNumeric(MyVar)   ' 傳回False。

基本條件

版本 1

請參閱

IsArray 函數 | IsDate 函數 | IsEmpty 函數 | IsNull 函數 | IsObject 函數 | VarType 函數


IsObject 函數

傳回 Boolean 值，用來指出運算式引用是否為正確的 Automation 物件。

IsObject(expression)

引數 expression 可以是任何運算式。

附註

如果 expression 是物件 (Object) 的次型態變數，或是使用者自訂的物件，IsObject 都會傳回 True；否則它會傳回 False。

下面範例即使用 IsObject 函數決定識別項是否即代表物件變數：

Dim MyInt, MyCheck, MyObject
Set MyObject = Me
MyCheck = IsObject(MyObject)   ' 傳回True。
MyCheck = IsObject(MyInt)   ' 傳回False。

基本條件

版本 1

請參閱

IsArray 函數 | IsDate 函數 | IsEmpty 函數 | IsNull 函數 | IsNumeric 函數 | Set 陳述式 | VarType 函數


Join 函數

傳回一字串，該字串是由陣列中一些子字串的連結而來的。

Join(list[, delimiter])

引數

list
必要項。包含欲連結之子字串的一維陣列。
delimiter
選擇項。使用於傳回字串中分隔子字串的字元。若省略，則使用空白字元(" ")。若 delimiter 為空字串，所有的連結將無分隔字元。

附註

下列範例即使用 Join 函數來加入 MyArray的子字串：

Dim MyString
Dim MyArray(3)
MyArray(0) = "Mr."
MyArray(1) = "John "
MyArray(2) = "Doe "
MyArray(3) = "III"
MyString = Join(MyArray) ' MyString 包含 "Mr. John Doe III"。

基本條件

版本 2

請參閱

Split 函數


LBound 函數

傳回指定陣列某維最小可使用的陣列索引。

LBound(arrayname[, dimension])

引數

arrayname
陣列變數的名稱，遵循標準變數命名規格。
dimension
表示傳回的是那一維的下限。1 表示第一維，2 表示第二維，依此類推。如果省略 dimension，其預設值為 1。

附註

同時使用 LBound 函數和 UBound 函數來決定陣列的大小。使用 UBound 函數來找出陣列每一維的上限。

任何維數的下限永遠是 0。

基本條件

版本 1

請參閱

Dim 陳述式 | ReDim 陳述式 | UBound 函數


LCase 函數

傳回已經轉變為小寫的字串。

LCase(string)

引數 string 可以是任何字串運算式。如果 string 所含為 Null，將傳回 Null。

附註

只有大寫的字母會轉成小寫；所有小寫字母和非字母字元保持不變。

以下範例即使用 LCase 函數將小寫字母轉換成大寫：

Dim MyString
Dim LCaseString
MyString = "VBSCript"
LCaseString = LCase(MyString)   ' LCaseString為"vbscript"。

基本條件

版本 1

請參閱

UCase 函數


Left 函數

傳回一字串由左算起特定數量的字元。

Left(string, length)

引數

string
字串運算式，為函數欲執行的字串運算式。如果 string 所含為Null，將傳回 Null。
length
數值運算式，指出欲傳回左方多少字元。如果為 0，傳回零長度 ("")。如果大於或等於 string 的字元數，則傳回整個字串。

附註

要知道 string 的字元數，請用 Len 函數。

下面範例即使用 Left 函數傳回 MyString 的前三個字元：

Dim MyString, LeftString
MyString = "VBSCript"
LeftString = Left(MyString, 3) ' LeftString 包含 "VBS"。
備註 LeftB 函數是使用在位元組資料字串上。所以此時 length 代表的是位元組數，而非字元數。

基本條件

版本 1

請參閱

Len 函數 | Mid 函數 | Right 函數


Len 函數

傳回字串內字元的數目，或是傳回儲存一變數所需的位元組數。

Len(string | varname)

引數

string
為任何正確的字串運算式。如果 string 所含為Null，則傳回 Null。
varname
為任何正確的變數名稱。如果 varname 所含為 Null，則傳回 Null。

附註

下面範例即使用 Len 函數傳回一字串中字元的數量：

Dim MyString
MyString = Len("VBSCRIPT") ' MyString 為 8。
備註 LenB 函數是使用在位元組資料字串上。所以 LenB 傳回的是位元組個數，而非字元個數。

基本條件

版本 1

請參閱

InStr 函數


LoadPicture 函數

傳回一圖形物件。適用於 32 位元的作業系統。

LoadPicture(picturename)

picturename 引數是一個字串運算式，為欲載入的圖形檔案名稱。

附註

圖形格式由 LoadPicture 管理，包括了點陣圖檔 (.bmp)、圖示檔 (.ico)、RLE (Run-Length Encoded) 檔 (.rle)、中繼檔 (.wmf)、加強式中繼檔 (.emf)、GIF 檔 (.gif) 以及 JPEG 檔 (.jpg)。

基本條件

版本 2


Log 函數

傳回引數的自然對數值。

Log(number)

引數 number 可以是任何的數值運算式，條件是引數值必須大於 0。

附註

自然對數是以 e 為底數的對數。常數 e 的值大約是 2.718282。

如果要以任意底數 n 來計算數值 x 的對數值，可以利用下列式子：將 x 的自然對數值除以 n 的自然對數值。

Logn(x) = Log(x) / Log(n)

下面的範例說明如何寫一個自訂函數來求出以 10 為底的對數值：

Function Log10(X)
   Log10 = Log(X) / Log(10)
End Function

基本條件

版本 1

請參閱

可導出的數學函數 | Exp 函數


LTrim、RTrim 與 Trim 函數

將給定字串的前頭空白 (LTrim)、後面空白 (RTrim)、或前後空白 (Trim) 刪除後傳回。

LTrim(string)
RTrim(string)
Trim(string)

引數 string 可以是任何字串運算式。如果 string 所含為Null，則傳回 Null。

附註

下面範例即使用 LTrim、RTrim 和 Trim 函數來調整字首空白部份、字尾空白部份、字首和字尾空白部份：

Dim MyVar
MyVar = LTrim("   vbscript ")   ' MyVar為"vbscript "
MyVar = RTrim("   vbscript ")   ' MyVar 為 "   vbscript"。
MyVar = Trim("   vbscript ")   ' MyVar為"vbscript"。

基本條件

版本 1

請參閱

Left 函數 | Right 函數


數學函數

Abs 函數
Atn 函數
Cos 函數
Exp 函數
Fix 函數
Int 函數
Log 函數
Rnd 函數
Sgn 函數
Sin 函數
Sqr 函數
Tan 函數
可導出的數學函數


Mid 函數

從一字串傳回特定數量字元。

Mid(string, start[, length])

引數

string
字串運算式。傳回字元之來源字串運算式。如果 string 所含為Null，則傳回 Null。
start
欲傳回字元在 string 之開頭位置。如果 start 超過 string 的範圍，Mid 則傳回零長度字串 ("")。
length
即傳回之字元數。如果省略或 length 超過可以傳回的字元數，(包括 start 處的字元)，那將傳回從 start 到尾端的所有字元。

附註

欲知 string 的字元數，可用 Len 函數。

下面範例即使用 Mid 函數傳回字串中自第四個字元開始的六個字元：

Dim MyVar
MyVar = Mid("VB Script is fun!", 4, 6) ' MyVar 為 "Script"。
備註 MidB 函數可得字串之位元組資料。其引數所代表的非字元數，而是位元組數。

基本條件

版本 1

請參閱

Left 函數 | Len 函數 | LTrim、RTrim 與 Trim 函數 | Right 函數


Minute 函數

傳回一值，從 0 到 59（包含0與59），表示一小時中的某「分鐘」。

Minute(time)

引數 time 可以是任何可以表示出合理時刻的運算式。如果 time 的值為Null，則傳回 Null。

附註

下面範例即使用 Minute 函數傳回一小時中的某分鐘：

Dim MyVar
MyVar = Minute(Now)

基本條件

版本 1

請參閱

Day 函數 | Hour 函數 | Now 函數 | Second 函數 | Time 函數


Month 函數

傳回一值，從 1 到 12（包含1與12），表示一年中的某個「月」。

Month(date)

引數 date 可以是任何能夠表示一個合理日期的運算式。如果 date 的值為Null，則傳回 Null。

附註

下列範例即使用 Month 函數傳回目前的月份：

Dim MyVar
MyVar = Month(Now) ' MyVar 為目前
                   ' 月份的數字。

基本條件

版本 1

請參閱

Date 函數 | Day 函數 | Now 函數 | Weekday 函數 | Year 函數


MonthName 函數

傳回包含指定月份的字串。

MonthName(month[, abbreviate])

引數

month
必要項。代表月份的數值。例如，一月是 1、二月是 2，等等。
abbreviate
選擇項。為一布林值，它可指定月份名稱是否為縮寫。若省略，則預設值為 False，即表示月份名稱不為縮寫。

附註

下面範例即使用 MonthName 函數傳回日期運算式的月份縮寫名稱：

Dim MyVar
MyVar = MonthName(10, True) ' MyVar 為 "Oct"。

基本條件

版本 2

請參閱

WeekDayName 函數


MsgBox 函數

將訊息顯示在對話方塊中，等使用者按下按鈕，並傳回一值來表示使用者按下的是那一個按鈕。

MsgBox(prompt[, buttons][, title][, helpfile, context])

引數

prompt
字串運算式，用以做為顯示在對話方塊中之訊息。prompt 的最大長度大約是 1024 個字元，由使用字元的寬度決定。如果 prompt 超過一行，您可以在每一行之間用復位字元 (Chr(13))、換行字元 (Chr(10))、或是復位字元與換行字元的組合 (Chr(13) & Chr(10)) 來做區隔。
buttons
數值運算式。用來指出顯示按鈕的數目及形式，使用的圖示樣式，預設按鈕為何，以及訊息方塊的強制回應等。請參考「設定值」部份。如果沒有指定，則 buttons 的預設值是 0。
title
顯示在對話方塊標題列中的字串運算式。如果省略 title，則將應用程式的名稱放在標題列中。
helpfile
用來辨識提供給對話方塊文字感應說明的說明檔案的字串運算式。如果指定了 helpfile，則也必須指定 context。不支援 16 位元作業平臺。
context
數值運算式，由說明檔案的作者來指定適當的說明主題的說明主題代碼。如果指定了 context，則也必須指定 helpfile。不支援 16 位元作業平臺。

設定值

引數 buttons 的設定值如下：

常數 | 值 | 說明
vbOKOnly | 0 | 只顯示 [確定] 按鈕。
vbOKCancel | 1 | 顯示 [確定] 及 [取消] 按鈕。
vbAbortRetryIgnore | 2 | 顯示 [異常終止]、[重試] 及 [略過] 按鈕。
vbYesNoCancel | 3 | 顯示 [是]、[否] 及 [取消] 按鈕。
vbYesNo | 4 | 顯示 [是] 及 [否] 按鈕。
vbRetryCancel | 5 | 顯示 [重試] 及 [取消] 按鈕。
vbCritical | 16 | 顯示 [重要訊息] 圖示。
vbQuestion | 32 | 顯示 [詢問符號] 圖示。
vbExclamation | 48 | 顯示 [警告符號] 圖示。
vbInformation | 64 | 顯示 [資訊符號] 圖示。
vbDefaultButton1 | 0 | 第一個按鈕是預設值。
vbDefaultButton2 | 256 | 第二個按鈕是預設值。
vbDefaultButton3 | 512 | 第三個按鈕是預設值。
vbDefaultButton4 | 768 | 第四個按鈕是預設值。
vbApplicationModal | 0 | 應用程式強制回應；使用者必須先回應此訊息方塊，才能在目前的應用程式中繼續工作。
vbSystemModal | 4096 | 系統強制回應；所有的應用程式都會暫停，直到使用者回應此訊息方塊。

第一組值 (0-5) 用來決定對話方塊中按鈕的形式與數目；第二組 (16, 32, 48, 64) 用來決定圖示的樣式；第三組 (0, 256, 512, 768) 決定出那一個按鈕是預設值；而第四組 (0, 4096) 則決定訊息方塊的強制回應性。將這些數字相加以產生 buttons 引數值的時候，您只能由每組取用一個數字。

傳回值

MsgBox 函數有下列傳回值：

常數 | 值 | 按鈕
vbOK | 1 | [確定]
vbCancel | 2 | [取消]
vbAbort | 3 | [異常終止]
vbRetry | 4 | [重試]
vbIgnore | 5 | [略過]
vbYes | 6 | [是]
vbNo | 7 | [否]

附註

如果同時指定了 helpfile 及 context，使用者便可以按 F1 來查看與內容相關的說明主題。

如果對話方塊顯示 [取消] 按鈕，則按下 ESC 鍵與按下 [取消] 按鈕效果相同。如果對話方塊中有 [說明] 按鈕，則對話方塊中提供有文字感應說明。不過，在按下其他按鈕前，不會傳回任何值。

如果將 MsgBox 函數用於 Microsoft Internet Explorer，則所有對話方塊的標題一定會包含「VBScript:」，以便與標準的系統對話方塊有所區分。

下面範例即使用 MsgBox 函數顯示訊息方塊並傳回一值，該值即表示所按的按鈕：

Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
   ' MyVar為1或2，視按下的按鈕而定。

基本條件

版本 1

請參閱

InputBox 函數


Now 函數

傳回電腦現在所記錄的日期與時間。

Now

附註

以下的範例使用 Now 函數以傳回現在的日期與時間：

Dim MyVar
MyVar = Now ' MyVar 為目前的日期與時間。

基本條件

版本 1

請參閱

Date 函數 | Day 函數 | Hour 函數 | Minute 函數 | Month 函數 | Second 函數 | Time 函數 | Weekday 函數 | Year 函數


Oct 函數

傳回一字串，代表一數字的八進位值。

Oct(number)

引數 number 可為任何正確的運算式。

附註

如果 number 不是整數，那麼在執行前會先四捨五入成最接近的整數。

如果 number 為... | Oct 傳回
Null | Null。
Empty | 零 (0)。
任何其他的數字 | 最多可到 11 個八進位字元。

您可以將八進位數字直接以 &O 開頭來表示。例如，&O10 代表十進位的 8。

以下的範例使用 Oct 函數以傳回數值的八進位值：

Dim MyOct
MyOct = Oct(4)     ' 傳回 4。
MyOct = Oct(8)     ' 傳回 10。
MyOct = Oct(459)   ' 傳回 713。

基本條件

版本 1

請參閱

Hex 函數


Replace 函數

傳回一個字串，表示字串中的一個特定子字串已經被另一個子字串取代的次數。

Replace(expression, find, replacewith[, start[, count[, compare]]])

引數

expression
必要項。字串運算式，包含了要被取代的子字串。
find
必要項。要被搜尋的子字串。
replacewith
必要項。用來取代的子字串。
start
選擇項。在 expression 中，子字串搜尋動作的開始位置。如果省略，則預設為 1。必須與 count 一起使用。
count
選擇項。子字串取代的執行次數。如果省略，預設值為 -1，表示將執行所有可能的取代動作。必須與 start 一起使用。
compare
選擇項。指定子字串比較種類的數值。請參考設定部分。如果省略，預設值為 0，將執行二進位資料比對。

設定值

compare 引數的設定值如下：

常數 | 值 | 說明
vbBinaryCompare | 0 | 執行二進位資料的比對。
vbTextCompare | 1 | 執行文字資料的比對。

傳回值

Replace 函數有下列傳回值：

如果 | Replace 傳回
expression 的長度為零 | 傳回空字串 ("")。
expression 是 Null | 錯誤。
find 的長度為零 | 一份 expression 的複製。
replacewith 的長度為零 | 一份 expression 的複製，此內容已移除所有 find 中的項目。
start > Len(expression) | 空字串。
count 為零 | 一份 expression 的複製。

附註

Replace 函數的傳回值是一個字串，而這個字串已進行過取代動作。而取代動作是從 start 所決定的位置開始，在 expression 字串的結尾停止執行。這個字串不是原始字串從頭到尾的複製。

以下的範例使用 Replace 函數以傳回字串：

Dim MyString
MyString = Replace("XXpXXPXXp", "p", "Y")   '在字串開頭開始的二元比較。傳回"XXYXXPXXY"。
MyString = Replace("XXpXXPXXp", "p", "Y",   '在位置 3 開始的文字比較。傳回"YXXYXXY"。3, -1, 1)

基本條件

版本 2

請參閱

Filter 函數


RGB 函數

傳回代表 RGB 顏色的數值。

RGB(red, green, blue)

引數

red
必要項。代表紅色部分，介於 0-255。
green
必要項。代表綠色部分，介於 0-255。
blue
必要項。代表藍色部分，介於 0-255。

附註

應用程式中方法及屬性可接受顏色的規格，這規格的參數以 RGB 數值表示。RGB 顏色值包含紅綠藍三色不同程度的混合。

低位元為紅色值，中間位元是綠色值，高位元則是藍色值。

如果應用程式需要位元順序顛倒，可透過以下函數辦到：

Function RevRGB(red, green, blue)
   RevRGB= CLng(blue + (green * 256) + (red * 65536))
End Function

RGB 若超過 255，則以 255 視之。

基本條件

版本 2


Right 函數

傳回一字串右邊特定數量的字元。

Right(string, length)

引數

string
字串運算式，會傳回最右邊的字元。如果 string 所含為Null，則傳回 Null。
length
數值運算式，指出欲傳回右方多少字元。如果為 0，傳回零長度 ("")。如果大於或等於 string 的字元數，則傳回整個字串。

附註

要知道 string 的字元數，可用 Len 函數。

以下的範例使用 Right 函數以從字串的右方傳回指定的字元數：

Dim AnyString, MyStr
AnyString = "Hello World"      ' 定義字串。
MyStr = Right(AnyString, 1)    ' 傳回 "d"。
MyStr = Right(AnyString, 6)    ' 傳回 " World"。
MyStr = Right(AnyString, 20)   ' 傳回 "Hello World"。
備註 RightB 函數是使用在位元組資料字串上。所以此時 length 代表的是位元組數，而非字元數。

基本條件

版本 1

請參閱

Left 函數 | Len 函數 | Mid 函數


Rnd 函數

傳回一個亂數值。

Rnd[(number)]

引數 number 可以是任何的數值運算式。

附註

Rnd 函數傳回的亂數值介於 0 和 1 之間，可等於 0，但不等於 1。number 的值會影響 Rnd 傳回的亂數值：

如果 number 的值是 ... | Rnd 傳回的亂數值
小於 0 | 每次都是使用 number 當做亂數種子的相同結果。
大於 0 | 亂數序列中的下一個亂數值。
等於 0 | 最近一次產生過的亂數值。
省略 | 亂數序列中的下一個亂數值。

給定一個亂數種子後，便會產生一特定的亂數序列，因為每呼叫一次 Rnd 函數，它就會使用先前呼叫時所產生的亂數值當成新的亂數種子以產生新的亂數值。

在使用 Rnd 之前，最好先呼叫 Randomize 陳述式，但不要給任何引數，如此便會以作業系統的時間當作亂數種子來起始亂數產生器。

若想產生在某個範圍內 (非 0 到 1) 的整數亂數值，可使用下列公式：

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

上述公式中，upperbound 是亂數範圍的上限，而 lowerbound 則是亂數的下限。

備註 若想重覆亂數序列，可以在使用 Randomize 之前先呼叫 Rnd 並且傳入一小於 0 的引數值。光是用同樣的亂數種子呼叫 Randomize 兩次的話，並不會得到兩次相同的亂數序列。

基本條件

版本 1

請參閱

Randomize 陳述式


Round 函數

傳回一個被四捨五入到某個小數位的數值。

Round(expression[, numdecimalplaces])

引數

expression
必要項。要被四捨五入的數值運算式。
numdecimalplaces
選擇項。此數字表示要四捨五入至小數下第幾位。如果省略，Round 函數將傳回整數。

附註

以下的範例使用 Round 函數以將數字四捨五入至小數下第二位：

Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) ' MyVar 為 3.14。

基本條件

版本 2

請參閱

Int、Fix 函數


ScriptEngine 函數 (VBScript)

Visual Basic Scripting Edition

ScriptEngine 函數

傳回一個字串，表示所使用的 Script 程式語言。

ScriptEngine

傳回值

ScriptEngine 函數可傳回下列任一字串：

字串 | 說明
VBScript | 表示Microsoft® Visual Basic® Scripting 版是目前使用的 Scripting 引擎。
JScript | 表示 Microsoft JScript® 是目前使用的 Scripting 引擎。
VBA | 表示 Microsoft Visual Basic for Applications 是目前使用的 Scripting 引擎。

附註

以下的範例使用 ScriptEngine 函數傳回一字串，用以說明目前使用的 Scripting 語言：

Function GetScriptEngineInfo
   Dim s
   s = ""   '建立包含必要資訊的字串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   '傳回結果。
End Function

基本條件

版本2

請參閱

ScriptEngineBuildVersion 函數 | ScriptEngineMajorVersion 函數 | ScriptEngineMinorVersion 函數


ScriptEngineBuildVersion 函數 (VBScript)

Visual Basic Scripting Edition

ScriptEngineBuildVersion 函數

傳回所使用的 Script 引擎的建立版本編號。

ScriptEngineBuildVersion

附註

傳回值代表目前使用的 Script 程式語言，在 DLL 中所含的版本資訊。

以下的範例使用 ScriptEngineBuildVersion 函數以傳回 scripting 引擎的建立版本編號：

Function GetScriptEngineInfo
   Dim s
   s = ""   '建立包含必要資訊的字串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   '傳回結果。
End Function

基本條件

版本2

請參閱

ScriptEngine 函數 | ScriptEngineMajorVersion 函數 | ScriptEngineMinorVersion 函數


ScriptEngineMajorVersion 函數 (VBScript)

Visual Basic Scripting Edition

ScriptEngineMajorVersion 函數

傳回所使用的 Scripting 引擎的主要版本編號。

ScriptEngineMajorVersion

附註

傳回值代表目前使用的 Script 程式語言，在 DLL 中所含的版本資訊。

以下的範例使用 ScriptEngineMajorVersion 函數以傳回 scripting 引擎的版本編號：

Function GetScriptEngineInfo
   Dim s
   s = ""   '建立包含必要資訊的字串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   '傳回結果。
End Function

基本條件

版本2

請參閱

ScriptEngine 函數 | ScriptEngineBuildVersion 函數 | ScriptEngineMinorVersion 函數


ScriptEngineMinorVersion 函數 (VBScript)

Visual Basic Scripting Edition

ScriptEngineMinorVersion 函數

傳回所使用的 Scripting 引擎的次要版本編號。

ScriptEngineMinorVersion

附註

傳回值代表目前使用的 Script 程式語言，在 DLL 中所含的版本資訊。

以下的範例使用 ScriptEngineMinorVersion 函數以傳回 scripting 引擎的次要版本號碼：

Function GetScriptEngineInfo
   Dim s
   s = ""   '建立包含必要資訊的字串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   '傳回結果。
End Function

基本條件

版本2

請參閱

ScriptEngine 函數 | ScriptEngineBuildVersion 函數 | ScriptEngineMajorVersion 函數


Second 函數

傳回一個值，從 0 到 59（包含0與59），表示一分鐘之中的某個「秒」。

Second(time)

引數 time 是任何可以表示出合理時刻的運算式。如果 time 的值為 Null 則傳回 Null。

附註

以下的範例使用 Second 函數以傳回目前時刻中的秒：

Dim MySec
MySec = Second(Now)
MySec為代表目前秒數的數值。

基本條件

版本1

請參閱

Day 函數 | Hour 函數 | Minute 函數 | Now 函數 | Time 函數


SetLocale 函數

設定全球國別語系設定並傳回前一個國別語系設定。

SetLocale(lcid)

lcid 引數可以是任何32位元的值或是短字串，用來表示某一個在地理上獨一無二的地區設定。語系識別碼圖表中可以找到那些獲得認同的值。

附註

如果 lcid 為0，則國別語系設定會設定為符合目前的系統設定。

國別語系（locale）是一種根據使用者喜好，反映使用者本身使用的語言、國家/地區和文化習慣的設定。國別語系決定了像是鍵盤的配置、字母分門別類的順序，以及日期、時間、數字和貨幣格式。

以下範例說明了SetLocale 函數的用法。要使用這個程式碼，請貼上標準的HTML 網頁中位於<BODY> 標記之間的整個範例。

Enter Date in UK format: <input type="text" id="UKDate" size="20"><p>
Here's the US equivalent: <input type="text" id="USdate" size="20"><p>
<input type="button" value="Convert" id="button1"><p>
Enter a price in German: &nbsp; <input type="text" id="GermanNumber" size="20">
<p>
Here's the UK equivalent: <input type="text" id="USNumber" size="20"><p>
<input type="button" value="Convert" id="button2"><p>

<script language="vbscript">
Dim currentLocale
'取得目前的國別語系
currentLocale = GetLocale

Sub Button1_onclick
  Dim original
  original = SetLocale("en-gb")
  mydate = CDate(UKDate.value)
  ' IE一律將國別語系設定為US 英語，所以請使用
  ' currentLocale變數以設定國別語系為US 英語
  original = SetLocale(currentLocale)
  USDate.value = FormatDateTime(mydate,vbShortDate)
End Sub

Sub button2_onclick
  Dim original
  original = SetLocale("de")
  myvalue = CCur(GermanNumber.value)
  original = SetLocale("en-gb")
  USNumber.value = FormatCurrency(myvalue)
End Sub

</script>

請參閱

GetLocale 函數 | 語系識別碼 (LCID) 圖表


Sgn 函數

傳回一個整數代表引數的正負號。

Sgn(number)

引數 number 可以是任何的數值運算式。

傳回值

Sgn 函數有下列傳回值：

如果number 為 ... | Sgn 傳回
大於 0 | 1
等於 0 | 0
小於 0 | -1

附註

引數 number 的正負號決定了 Sgn 函數的傳回值。

以下的範例使用 Sgn 函數以決定數字的正負號：

Dim MyVar1, MyVar2, MyVar3, MySign
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0
MySign = Sgn(MyVar1)   ' 傳回 1。
MySign = Sgn(MyVar2)   ' 傳回 -1。
MySign = Sgn(MyVar3)   ' 傳回 0。

基本條件

版本 1

請參閱

Abs 函數


Sin 函數

傳回引數的 sine (正弦函數) 值。

Sin(number)

引數 number 可以是任何的數值運算式，其值代表一個角度，以弧度為單位。

附註

Sin 函數的引數值代表一角度，其傳回值為該角度之「另一銳角之鄰邊除以對邊」的值。傳回值的範圍在 -1 到 1 之間。

「角度」與「弧度」的轉換方法為：將「角度」乘以 pi /180 即為「弧度」。反過來將「弧度」乘以 180/pi 便得「角度」。

以下的範例使用 Sin 函數以傳回一角度的 sine 值：

Dim MyAngle, MyCosecant
MyAngle = 1.3   '定義弧度的角度。
MyCosecant = 1 / Sin(MyAngle)   '計算餘割值。

基本條件

版本1

請參閱

Atn 函數 | Cos 函數 | 可導出的數學函數 | Tan 函數


Space 函數

傳回特定數目空格的字串。

Space(number)

引數 number 是您想要的空格數。

備註

以下的範例使用 Space 函數以傳回包含特定數目空格的字串：

Dim MyString
MyString = Space(10)   '傳回包含 10 個空格的字串。
MyString = "Hello" & Space(10) & "World" '在兩個字串間插入 10 個空格。

基本條件

版本1

請參閱

String 函數


Split 函數

傳回一個以零為基底，一維的陣列。這個陣列會包含特定個數的子字串。

Split(expression[, delimiter[, count[, compare]]])

引數

expression
必要項。為一字串運算式，這個字串運算式要包含子字串及分隔符號。如果 expression 的長度為零，Split 函數會傳回一個空的陣列，也就是說，一個沒有包含任何元素及資料的陣列。
delimiter
選擇項。用來表示子字串界限的字串字元。如果省略，空白字元 (" ") 將被指定為分隔符號。如果 delimiter 為空字串，會傳回一個元素，即包含了整個 expression 字串的陣列。
count
選擇項。要被傳回的子字串個數。-1 則表示所有的子字串將被傳回。
compare
選擇項。指定字串比較的種類。請參考設定部份。

設定值

compare 引數的設定值如下：

常數 | 值 | 說明
vbBinaryCompare | 0 | 進行二進位資料比對。
vbTextCompare | 1 | 進行文字資料比對。

附註

以下的範例使用 Split 函數以從一字串傳回一個陣列。此函數會執行分隔符號的文字資料比對，並傳回所有的子字串。

Dim MyString, MyArray, Msg
MyString = "VBScriptXisXfun!"
MyArray = Split(MyString, "x", -1, 1)
' MyArray(0) 為 "VBScript"。
' MyArray(1) 為 "is"。
' MyArray(2) 為 "fun!"。
Msg = MyArray(0) & " " & MyArray(1)
Msg = Msg   & " " & MyArray(2)
MsgBox Msg

基本條件

版本2

請參閱

Join 函數


Sqr 函數

傳回引數的平方根。

Sqr(number)

引數 number 可以是任何的數值運算式，只要引數值大於或等於 0 即可。

附註

以下的範例使用 Sqr 以計算數字的平方根：

Dim MySqr
MySqr = Sqr(4)   ' 傳回 2。
MySqr = Sqr(23)   ' 傳回 4.79583152331272。
MySqr = Sqr(0)   ' 傳回 0。
MySqr = Sqr(-4)   ' 產生執行時的錯誤。

基本條件

版本1


StrComp 函數

傳回一個值，代表字串比較的結果。

StrComp(string1, string2[, compare])

引數

string1
必要項。任何正確的字串運算式。
string2
必要項。任何正確的字串運算式。
compare
選擇項。指定字串比較的型態。如果省略，則進行二進位資料比對。請參考設定部份。

設定值

引數 compare 的設定值如下：

常數 | 值 | 說明
vbBinaryCompare | 0 | 進行二進位資料比對。
vbTextCompare | 1 | 進行文字資料比對。

傳回值

StrComp 函數有下列傳回值：

如果 | StrComp 傳回
string1 小於 string2 | -1
string1 等於 string2 | 0
string1 大於 string2 | 1
string1 或 string2 為 Null | Null

附註

以下範例使用 StrComp 函數來傳回字串比較的結果。如果第三個引數值為 1，則執行文字資料比對；如果第三個引數值為 0 或被省略，則會執行二進位資料比對。

Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd"   '定義變數。
MyComp = StrComp(MyStr1, MyStr2, 1)   ' 傳回 0。
MyComp = StrComp(MyStr1, MyStr2, 0)   ' 傳回 -1。
MyComp = StrComp(MyStr2, MyStr1)   ' 傳回 1。

基本條件

版本1


String 函數

傳回一特定長度的重複字元字串。

String(number, character)

引數

number
為欲傳回之字串長度。如果 number 的值為 Null，則傳回 Null。
character
字元碼(代表某特定字元) 或字串運算式 (使用其第一個字元)，是用來建構傳回字串的特定字元。如果 character 的值為 Null，則傳回 Null。

附註

如果您設定 character 的數值大於 255，String 會利用下面公式將之轉為正確的字元碼：

character Mod 256

以下的範例使用 String 函數來傳回特定長度的重複字元字串：

Dim MyString
MyString = String(5, "*")   ' 傳回 "*****"。
MyString = String(5, 42)   ' 傳回 "*****"。
MyString = String(10, "ABC")   ' 傳回 "AAAAAAAAAA"。

基本條件

版本1

請參閱

Space 函數


StrReverse 函數

將特定字串的字元順序顛倒後傳回。

StrReverse(string1)

string1 引數是字元順序要顛倒的字串。如果 string1 的長度為零 ("")，將傳回一空字串。如果 string1 是 Null，將會產生錯誤。

附註

以下的範例使用 StrReverse 函數將字串的字元順序顛倒後傳回：

Dim MyStr
MyStr = StrReverse("VBScript") ' MyStr 包含 "tpircSBV"。

基本條件

版本2


Tan 函數

傳回引數的「正切」(tangent) 函數值。

Tan(number)

引數 number 可以是任何的數值運算式，其值代表一個角度，以「弧度」為單位。

附註

Tan 的引數值代表一角度，其傳回值為其「對邊除以連接直角的鄰邊」的值。

「角度」與「弧度」的轉換方法為：將「角度」乘以 pi /180 即為「弧度」。 反過來將「弧度」乘以 180/pi 便得「角度」。

以下的範例使用 Tan 函數以傳回一角度的「正切」函數值：

Dim MyAngle, MyCotangent
MyAngle = 1.3   '定義弧度的角度。
MyCotangent = 1 / Tan(MyAngle)   '計算餘切值 (cotangent)。

基本條件

版本1

請參閱

Atn 函數 | Cos 函數 | 可導出的數學函數 | Sin 函數


Time 函數

傳回一 Variant (Date)，內容為系統時間 (電腦所記錄的現在時間)。

Time

附註

以下的範例使用 Time 函數以傳回系統的現在時間：

Dim MyTime
MyTime = Time   '傳回目前的系統時間。

基本條件

版本1

請參閱

Date 函數


Timer 函數

傳回從 12:00 AM (午夜) 起到現在已經過的秒數。

Timer

附註

以下範例使用 Timer 函數來決定 For...Next 迴圈執行 N 次所需的時間：

Function TimeIt(N)
   Dim StartTime, EndTime
   StartTime = Timer
   For I = 1 To N
   Next
   EndTime = Timer
   TimeIt = EndTime - StartTime
End Function

基本條件

版本5

請參閱

Randomize 陳述式


TimeSerial 函數

傳回一 Variant (Date)，內容為指定之時、分、秒的日期表示式。

TimeSerial(hour, minute, second)

引數

hour
其值從 0 (12:00 A.M.) 到 23 (11:00 P.M.)，或一數值運算式。
minute
任何數值運算式。
second
任何數值運算式。

附註

要表示某個時刻，如 11:59:59，TimeSerial 函數的各個引數值必須位於合理範圍內。也就是，「時」必須介於 0-23，而「分」與「秒」則必須介於 0-59。不過，您也可以在傳遞引數時使用數值運算式來得知對應於某基準時刻的相對時間。

以下的範例是以運算式來代替絕對時間數值。TimeSerial 函數會傳回一個比午時少六小時 (12 - 6) 又 15 分鐘 (-15) 的時刻，或 5:45:00 A.M.。

Dim MyTime1
MyTime1 = TimeSerial(12 - 6, -15, 0) ' 傳回 5:45:00 AM。

當有任何引數值超出合理範圍時，函數會自動將其進位到下一個更大的時間單位中。例如，如果「分」的引數值為 75 (75 分鐘)，函數會將它解譯成一小時又十五分。如果任何引數值超出 -32,768 到 32,767 的範圍，會產生程式錯誤。如果計算結果的時間會超出作業系統所接受的時間或日期範圍，亦會產生程式錯誤。

基本條件

版本1

請參閱

DateSerial 函數 | DateValue 函數 | Hour 函數 | Minute 函數 | Now 函數 | Second 函數 | TimeValue 函數


TimeValue

傳回一 Variant 之次型態 (Date) 的時間表示式。

TimeValue(time)

引數 time 通常是一個字串運算式，用來表示一個時刻，從 0:00:00 (12:00:00 A.M.) 到 23:59:59 (11:59:59 P.M.) 。不過，time 也可以是能表示合理時刻的任何運算式。如果 time 的值為 Null，則傳回 Null。

附註

您可以使用 12 小時制或 24 小時制的時間格式。例如，"2:24PM" 及 "14:24" 均是有效的 time 引數。如果 time 引數含有日期資訊，則 TimeValue 不會傳回日期資訊；但是，如果 time 含有不正確的日期資訊，則會產生錯誤。

以下範例使用 TimeValue 函數將字串轉換成時間。您也可以使用日期文字直接將時間指定給 Variant (例如 MyTime = #4:35:17 PM#)。

Dim MyTime
MyTime = TimeValue("4:35:17 PM")   ' MyTime 為 4:35:17 PM。

基本條件

版本1

請參閱

DateSerial 函數 | DateValue 函數 | Hour 函數 | Minute 函數 | Now 函數 | Second 函數 | TimeSerial 函數


TypeName 函數

傳回一個字串，它提供某個變數的 Variant 次型態資訊。

TypeName(varname)

必要項 varname 引數可以是任何變數。

傳回值

TypeName 函數有下列傳回值：

值 | 說明
Byte | 位元值
Integer | 整數
Long | 長整數
Single | 單倍精確浮點數
Double | 雙倍精確浮點數
Currency | 貨幣
Decimal | 十進位值
Date | 日期或時間
String | 字元字串
Boolean | 布林值：True 或 False
Empty | 未初始化
Null | 未含有效的資料
<object type> | 物件實際型態名稱
Object | 一般物件
Unknown | 型態未知的物件
Nothing | 尚未引用物件的物件變數
Error | 錯誤

附註

以下範例使用 TypeName 函數，傳回有關變數的資訊：

Dim ArrayVar(4), MyType
NullVar = Null   ' 指定 Null 值。

MyType = TypeName("VBScript")   ' 傳回"String"。
MyType = TypeName(4)            ' 傳回 "Integer"。
MyType = TypeName(37.50)        ' 傳回 "Double"。
MyType = TypeName(NullVar)      ' 傳回 "Null"。
MyType = TypeName(ArrayVar)     ' 傳回 "Variant()"。

基本條件

版本2

請參閱

IsArray 函數 | IsDate 函數 | IsEmpty 函數 | IsNull 函數 | IsNumeric 函數 | IsObject 函數 | VarType 函數


UBound 函數

傳回指定陣列某維最大可使用的陣列索引。

UBound(arrayname[, dimension])

引數

arrayname
必要項。陣列變數的名稱，遵循標準變數命名規格。
dimension
選擇項。表示傳回的是那一維的上限。1 表示第一維，2 表示第二維，依此類推。如果省略 dimension，則預設是 1。

附註

UBound 函數和 LBound 函數一起使用可以決定陣列的大小。使用 LBound 函數來找出陣列每一維的下限。

任何維數的下限永遠是 0。所以，若陣列的維數如下所示，UBound 傳回如下表的值：

Dim A(100,3,4)
陳述式 | 傳回值
UBound(A, 1) | 100
UBound(A, 2) | 3
UBound(A, 3) | 4

基本條件

版本1

請參閱

Dim 陳述式 | LBound 函數 | ReDim 陳述式


UCase 函數

傳回一轉成大寫的字串。

UCase(string)

引數 string 可以是任何字串運算式。如果 string 所含為 Null，則傳回 Null。

附註

只有小寫的字母會轉成大寫；原本大寫或非字母之字元保持不變。

以下範例使用 UCase 函數傳回大寫的字串：

Dim MyWord
MyWord = UCase("Hello World")   ' 傳回 "HELLO WORLD"。

基本條件

版本1

請參閱

LCase 函數


VarType 函數

傳回一個值，表示變數的次型態。

VarType(varname)

引數 varname 可以是任何變數。

傳回值

VarType 函數的傳回值如下：

常數 | 值 | 說明
vbEmpty | 0 | Empty (未初始化)
vbNull | 1 | Null (無有效資料)
vbInteger | 2 | 整數
vbLong | 3 | 長整數
vbSingle | 4 | 單倍精確浮點數
vbDouble | 5 | 雙倍精確浮點數
vbCurrency | 6 | 匯流
vbDate | 7 | 日期
vbString | 8 | 字串
vbObject | 9 | Automation 物件
vbError | 10 | 錯誤
vbBoolean | 11 | 布林值
vbVariant | 12 | Variant (只適用於 variants 中的陣列)
vbDataObject | 13 | 資料存取物件
vbByte | 17 | 位元值
vbArray | 8192 | 陣列
備註 這些常數是由 VBScript 所設定的。這些名稱可用在程式碼的任何地方，以取代真正的值。

附註

VarType 函數從不對 Array 傳回單獨值，而會加上其他的值來表示一個陣列是屬於某個特殊型態。Variant 的值只有在加上 Array 的值才會傳回，用來表示 VarType 函數的引數是一個陣列。例如，一個整數陣列的計算結果是 2 + 8194，或是 8194。 如果一個物件有預設的屬性，VarType (object) 會傳回此物件預設的屬性。

以下範例使用 VarType 函數來決定變數的次型態：

Dim MyCheck
MyCheck = VarType(300)          ' 傳回 2。
MyCheck = VarType(#10/19/62#)   ' 傳回 7。
MyCheck = VarType("VBScript")   ' 傳回 8。

基本條件

版本1

請參閱

IsArray 函數 | IsDate 函數 | IsEmpty 函數 | IsNull 函數 | IsNumeric 函數 | IsObject 函數 | TypeName 函數


Weekday 函數

傳回一整數，代表某個日期是星期幾。

Weekday(date, [firstdayofweek])

引數

date
任何可以表示一合理日期的運算式。如果 date 所含為 Null，則傳回 Null。
firstdayofweek
常數，表示一星期的第一天。如果省略此引數，則以 vbSunday (星期日) 為預設值。

設定值

引數 firstdayofweek 有以下的設定：

常數 | 值 | 說明
vbUseSystemDayOfWeek | 0 | 使用 NLS API 設定。
vbSunday | 1 | 星期日
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

傳回值

Weekday 函數的傳回值如下表所示：

常數 | 值 | 說明
vbSunday | 1 | 星期日
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

附註

以下範例使用 Weekday 函數，以取得指定日期是一星期的第幾天：

Dim MyDate, MyWeekDay
MyDate = #October 19, 1962#   ' 指定一個日期。
MyWeekDay = Weekday(MyDate)   ' 因為MyDate 為Fri，所以MyWeekDay為6。

基本條件

版本1

請參閱

Date 函數 | Day 函數 | Month 函數 | Now 函數 | Year 函數


WeekDayName 函數

傳回一字串，表示一星期中的某一天。

WeekdayName(weekday, abbreviate, firstdayofweek)

引數

weekday
必要項。表示是一星期中的哪一天的數值，而每一天所使用的數值則依照 firstdayofweek 的設定。
abbreviate
選擇項。為一布林值，它可指定每日的名稱是否為縮寫。若省略，則預設值為 False，即表示每日的名稱不為縮寫。
firstdayofweek
選擇項。表示一星期中第一天的數值。請參考設定部分。

設定值

firstdayofweek 引數有以下的設定值：

常數 | 值 | 說明
vbUseSystemDayOfWeek | 0 | 使用 NLS API 設定。
vbSunday | 1 | 星期日 (預設值)
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

附註

以下範例使用 WeekDayName 函數，以傳回指定的星期名稱：

Dim MyDate
MyDate = WeekDayName(6, True)   ' MyDate為Fri。

基本條件

版本2

請參閱

MonthName 函數


Year 函數

傳回一個數值，表示某個年份。

Year(date)

引數 date 可以是任何運算式，只要能夠表示一個合理的日期即可。如果 date 的值為 Null，則傳回 Null。

附註

以下範例使用 Year 函數，以取得指定日期的年份：

Dim MyDate, MyYear
MyDate = #October 19, 1962#   ' 指定一個日期。
MyYear = Year(MyDate)         ' MyYear為1962。

基本條件

版本1

請參閱

Date 函數 | Day 函數 | Month 函數 | Now 函數 | Weekday 函數


VBScript 關鍵字

Empty

False

Nothing

Null

True

相關章節

VBScript 語言參考


Empty

Empty 關鍵字是用來表示未初始化的變數值，與 Null 的作用不同。

請參閱

Null


False

False 關鍵字的值等於 0。

請參閱

True


Nothing

Nothing 關鍵字在 VBScript 中是用來將一個物件變數從一個實際的物件裏分離開來。使用 Set 陳述式可指定 Nothing 給物件變數。舉例來說：

Set MyObject = Nothing

數個物件變數可以同時引用一個實際物件，而當 Nothing 被指定給一個物件變數，那麼該變數將不再引用任何實際物件。當數個物件變數同時引用一個物件，那麼和該物件有關連的記憶體、系統資源中被物件變數所引用到的部份，只有在全部的物件變數都設成 Nothing 後才會被釋放。而變數被設成 Nothing 的方法不外是直接使用 Set，或等待最後被設成 Nothing 的物件變數超出有效範圍之後。

請參閱

Dim 陳述式 | Set 陳述式


Null

Null 關鍵字是用來表示變數中未含正確的資料，與 Empty 的功用不同。

請參閱

Empty


True

True 關鍵字的值等於 -1。

請參閱

False


方法

本節內容

Clear 方法

Execute 方法

Raise 方法

Replace 方法

Test 方法

相關章節

VBScript 語言參考


Clear 方法

清除 Err 物件所有的屬性設定。

object.Clear

object必為 Err 物件。

附註

錯誤處理完畢之後，可使用 Clear 來清除 Err 物件。例如，當用 On Error Resume Next 錯誤處理常式來處理錯誤時即必須使用。每當執行以下陳述式時，VBScript 即自動呼叫 Clear 方法：

  • On Error Resume Next
  • Exit Sub
  • Exit Function

以下的範例說明如何使用 Clear 方法。

On Error Resume Next
Err.Raise 6  ' 引發溢位錯誤。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear    ' 清除錯誤。

基本條件

版本 1

請參閱

Description 屬性 | Err 物件 | Number 屬性 | OnError 陳述式 | Raise 方法 | Source 屬性

適用於： Err 物件


Execute 方法 (VBScript)

Visual Basic Scripting Edition

Execute 方法

對指定的字串執行通用 (regular) 運算式搜尋。

object.Execute(string)

引數

object
必要的。一律是 RegExp 物件的名稱。
string
必要的。用來執行通用運算式的文字字串。

附註

若要設定通用運算式搜尋的實際模式，請使用RegExp 物件的 Pattern 屬性。

Execute 方法會傳回一個 Matches 集合物件，其中包含在 string中找到的每個相符項目的 Match 物件。如果找不到任何相符項目的話，Execute 會傳回空的 Matches 集合。

下面的程式碼說明 Execute 方法的用法。

Function RegExpTest(patrn, strng)
  Dim regEx, Match, Matches   ' 建立變數。
  Set regEx = New RegExp      ' 建立通用運算式。
  regEx.Pattern = patrn      ' 設定模式。
  regEx.IgnoreCase = True      ' 設定是否區別大小寫。
  regEx.Global = True      ' 設定為全部比對。
  Set Matches = regEx.Execute(strng)   ' 執行搜尋。
  For Each Match in Matches   ' 依序取出 Matches 集合物件中的項目。
    RetStr = RetStr & "Match found at position "
    RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
    RetStr = RetStr & Match.Value & "'." & vbCRLF
  Next
  RegExpTest = RetStr
End Function

MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 5

請參閱

Replace 方法 | Test 方法

適用於：RegExp 物件


Raise 方法

產生一執行階段的錯誤。

object.Raise(number, source, description, helpfile, helpcontext)

引數

object
僅 Err 物件有效。
number
Long (長整數)，用來判斷錯誤種類。VBScript 錯誤 (包括VBScript 所定義的和使用者定義的錯誤) 範圍在 0 - 65535 內。
source
一個指定產生錯誤的物件或應用程式的字串運算式。當在為一 Automation 物件設定此屬性時，要使用 project.class 形式。如果沒有指示 source 的話，那麼會使用目前 VBScript 專案的程式設計識別碼。
description
為字串運算式，用來說明錯誤。如果沒有說明的話，會檢查 number 的值。如果錯誤可以對映到一 VBScript 執行階段錯誤碼，那麼 Error 函數將會傳回字串當作 description 。如果 VBScript 錯誤和 number 沒有一致的話，那麼將使用一般錯誤訊息。
helpfile
為此錯誤之說明檔案的完整路徑。如果沒有指定，VBScript 會使用 VBScript 說明檔案的完整路徑。
helpcontext
為文字 ID，用來指示 helpfile 內有關此錯誤之說明的標題位置。如果省略，會使用與此錯誤相符之 number 屬性的 VBScript 說明檔案文字 ID。

附註

所有這些引數除了 number 外皆為選擇項。如果您使用 Raise 方法卻沒給一些引數，並且 Err 物件的屬性設定含有未清除的值，那麼這些值將視為您錯誤所有。

當在一 Automation 物件中設定 Number 屬性到您自己的錯誤代碼時，您可增加您的錯誤碼數字到 vbObjectError 常數。例如，欲產生錯誤代碼 1050，可指派 vbObjectError + 1050 到 number 屬性。

以下範例說明了 Raise 方法的用法。

On Error Resume Next
Err.Raise 6  ' 引發溢位錯誤。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear    ' 清除錯誤。

基本條件

版本 1

請參閱

Clear 方法 | Description 屬性 | Err 物件 | Number 屬性 Source 屬性

適用於：Err 物件


Replace Method

Visual Basic Scripting Edition

Replace 方法

取代通用運算式 (regular expression) 搜尋中找到的文字。

object.Replace(string1, string2)

引數

object
必要項。一律是 RegExp 物件的名稱。
string1
必要項。String1 是要被取代文字的字串。
string2
必要項。String2 是取代文字字串。

附註

若要設定文字取代的實際模式，請使用 RegExp 物件的 Pattern 屬性。

Replace 方法會傳回一份 string1，且將 RegExp.Pattern 的文字以 string2 取代。如果找不到符合的項目，則傳回不變的 string1。

下面的程式碼說明 Replace 方法的用法。

Function ReplaceTest(patrn, replStr)
  Dim regEx, str1            ' 建立變數。
  str1 = "The quick brown fox jumped over the lazy dog."
  Set regEx = New RegExp         ' 建立通用運算式。
  regEx.Pattern = patrn            ' 設定模式。
  regEx.IgnoreCase = True         ' 讓大小寫沒有區別。
  ReplaceTest = regEx.Replace(str1, replStr)   ' 進行取代。
End Function

MsgBox(ReplaceTest("fox", "cat"))      ' 將 'fox' 取代為 'cat'。

此外，Replace 方法還可以取代模式中的子運算式。以下的範例會呼叫前例中的函數，並且將原始字串中的成對單字互換：

MsgBox(ReplaceText("(\S+)(\s+)(\S+)", "$3$2$1"))   ' 互換字對。

基本條件

版本 5

請參閱

Execute 方法 | Test 方法

適用於：RegExp 物件


Test 方法

對指定的字串執行通用運算式 (regular expression) 搜尋，並傳回代表模式比對是否已找到的 Boolean 值。

object.Test(string)

引數

object
必要項。一律是 RegExp 物件的名稱。
string
必要項。用來執行通用運算式的文字字串。

附註

若要設定通用運算式搜尋的實際模式，請使用 RegExp 物件的 Pattern 屬性。RegExp.Global 屬性對 Test 方法沒有任何作用。

Test 方法會在模式比對成功時傳回 True，否則會傳回 False。

下面的程式碼說明 Test 方法的用法。

Function RegExpTest(patrn, strng)
  Dim regEx, retVal      ' 建立變數。
  Set regEx = New RegExp      ' 建立通用運算式。
  regEx.Pattern = patrn      ' 設定模式。
  regEx.IgnoreCase = False      ' 設定是否區別大小寫。
  retVal = regEx.Test(strng)      ' 執行搜尋測試。
  If retVal Then
    RegExpTest = "One or more matches were found."
  Else
    RegExpTest = "No match was found."
  End If
End Function

MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 5

請參閱

Execute 方法 | Replace 方法

適用於：RegExp 物件


其他

本節內容

字元集 (0 - 127)

字元集(128 - 255)

語系識別碼 ID (LCID) 圖表

相關章節

VBScript 語言參考


字元集 (0 - 127)

Visual Basic Scripting Edition

字元集 (0-127)

下列表格列出 0 – 127。

代碼 | 字元 | 代碼 | 字元 | 代碼 | 字元 | 代碼 | 字元
0 | 0 |  | 32 | [space] | 64 | @ | 96
1 |  | 33 | ! | 65 | A | 97 | a
2 |  | 34 | " | 66 | B | 98 | b
3 |  | 35 | # | 67 | C | 99 | c
4 |  | 36 | $ | 68 | D | 100 | d
5 |  | 37 | % | 69 | E | 101 | e
6 |  | 38 | & | 70 | F | 102 | f
7 |  | 39 | ' | 71 | G | 103 | g
8 | ** | 40 | ( | 72 | H | 104 | h
9 | ** | 41 | ) | 73 | I | 105 | i
10 | ** | 42 | * | 74 | J | 106 | j
11 |  | 43 | + | 75 | K | 107 | k
12 |  | 44 | , | 76 | L | 108 | l
13 | ** | 45 | - | 77 | M | 109 | m
14 |  | 46 | . | 78 | N | 110 | n
15 |  | 47 | / | 79 | O | 111 | o
16 |  | 48 | 0 | 80 | P | 112 | p
17 |  | 49 | 1 | 81 | Q | 113 | q
18 |  | 50 | 2 | 82 | R | 114 | r
19 |  | 51 | 3 | 83 | S | 115 | s
20 |  | 52 | 4 | 84 | T | 116 | t
21 |  | 53 | 5 | 85 | U | 117 | u
22 |  | 54 | 6 | 86 | V | 118 | v
23 |  | 55 | 7 | 87 | W | 119 | w
24 |  | 56 | 8 | 88 | X | 120 | x
25 |  | 57 | 9 | 89 | Y | 121 | y
26 |  | 58 | : | 90 | Z | 122 | z
27 |  | 59 | ; | 91 | [ | 123 | {
28 |  | 60 | < | 92 | \ | 124 | |
29 |  | 61 | = | 93 | ] | 125 | }
30 | - | 62 | > | 94 | ^ | 126 | ~
31 |  | 63 | ? | 95 | _ | 127 | 

* * 8、9、10 和 13 分別代表 backspace、tab、換行和復位字元。它們並沒有特定的顯示外觀，但會依不同的應用程式，而對文字顯示有不同的影響。

Microsoft Windows 不支援這些字元。

請參閱

字元集(128 - 255)


字元集 (128 - 255)

下列表格列出了 128 – 255。

代碼 | 字元 | 代碼 | 字元 | 代碼 | 字元 | 代碼 | 字元
128 | €� | 160 | [space] | 192 | À | 224 | à
129 |  | 161 | ¡ | 193 | Á | 225 | á
130 | ‚ | 162 | ¢ | 194 | Â | 226 | â
131 | ƒ | 163 | £ | 195 | Ã | 227 | ã
132 | „ | 164 | ¤ | 196 | Ä | 228 | ä
133 | … | 165 | ¥ | 197 | Å | 229 | å
134 | † | 166 | ¦ | 198 | Æ | 230 | æ
135 | ‡ | 167 | § | 199 | Ç | 231 | ç
136 | ˆ | 168 | ¨ | 200 | È | 231 | ç
137 | ‰ | 169 | © | 201 | É | 232 | è
138 | Š | 170 | ª | 202 | Ê | 233 | é
139 | ‹ | 171 | « | 203 | Ë | 234 | ê
140 | Œ | 172 | ¬ | 204 | Ì | 235 | ë
141 |  | 173 |  | 205 | Í | 236 | ì
142 | Ž | 174 | ® | 206 | Î | 237 | í
143 |  | 175 | ¯ | 207 | Ï | 238 | î
144 |  | 176 | ° | 208 | Ð | 239 | ï
145 |  | 177 | ± | 209 | Ñ | 240 | ð
146 | ' | 178 | ² | 210 | Ò | 241 | ñ
147 | " | 179 | ³ | 211 | Ó | 242 | ò
148 | ” | 180 | ´ | 212 | Ô | 243 | ó
149 | • | 181 | µ | 213 | Õ | 244 | ô
150 | – | 182 | ¶ | 214 | Ö | 245 | õ
151 | — | 183 | · | 215 | × | 246 | ö
152 | ˜ | 184 | ¸ | 216 | Ø | 247 | ÷
153 | ™ | 185 | ¹ | 217 | Ù | 248 | ø
154 | š | 186 | º | 218 | Ú | 249 | ù
155 | › | 187 | » | 219 | Û | 250 | ú
156 | œ | 188 | ¼ | 220 | Ü | 251 | û
157 |  | 189 | ½ | 221 | Ý | 252 | ü
158 | ž | 190 | ¾ | 222 | Þ | 253 | ý
159 | Ÿ | 191 | ¿ | 223 | ß | 254 | þ

Microsoft Windows 不支援這些字元。

請參閱

字元集 (0 - 127)


語系識別碼 (LCID) 圖表

下列表格列出了語系識別碼 (LCID)。

語系說明 | 簡短字串 | 十六進位值 | 十進位值 | 語系說明 | 簡短字串 | 十六進位值 | 十進位值
南非語 | af | 0x0436 | 1078 | 冰島語 | is | 0x040F | 1039
阿爾巴尼亞語 | sq | 0x041C | 1052 | 印尼語 | id | 0x0421 | 1057
阿拉伯語 - 阿拉伯聯合大公國 | ar-ae | 0x3801 | 14337 | 義大利語- 標準 | it-it | 0x0410 | 1040
阿拉伯語 - 巴林 | ar-bh | 0x3C01 | 15361 | 義大利語 - 瑞士 | it-ch | 0x0810 | 2064
阿拉伯語 - 阿爾及利亞 | ar-dz | 0x1401 | 5121 | 日語 | ja | 0x0411 | 1041
阿拉伯語 - 埃及 | ar-eg | 0x0C01 | 3073 | 韓語 | ko | 0x0412 | 1042
阿拉伯語 - 伊拉克 | ar-iq | 0x0801 | 2049 | 拉脫維亞語 | lv | 0x0426 | 1062
阿拉伯語 - 約旦 | ar-jo | 0x2C01 | 11265 | 立陶宛語 | lt | 0x0427 | 1063
阿拉伯語 - 科威特 | ar-kw | 0x3401 | 13313 | 馬其頓語 | mk | 0x042F | 1071
阿拉伯語 - 黎巴嫩 | ar-lb | 0x3001 | 12289 | 馬來語 - 馬來西亞 | ms-my | 0x043E | 1086
阿拉伯語 - 利比亞 | ar-ly | 0x1001 | 4097 | 馬來語–汶萊 | ms-bn | 0x083E | 2110
阿拉伯語 - 摩洛哥 | ar-ma | 0x1801 | 6145 | 馬爾他語 | mt | 0x043A | 1082
阿拉伯語 - 阿曼 | ar-om | 0x2001 | 8193 | 馬拉提語 | mr | 0x044E | 1102
阿拉伯語 - 卡達 | ar-qa | 0x4001 | 16385 | 挪威語 - 布克莫爾語 | no-no | 0x0414 | 1044
阿拉伯語 - 沙烏地阿拉伯 | ar-sa | 0x0401 | 1025 | 挪威語–耐諾斯克 | no-no | 0x0814 | 2068
阿拉伯語 - 敘利亞 | ar-sy | 0x2801 | 10241 | 波蘭語 | pl | 0x0415 | 1045
阿拉伯語 - 突尼西亞 | ar-tn | 0x1C01 | 7169 | 葡萄牙語 - 標準 | pt-pt | 0x0816 | 2070
阿拉伯語 - 葉門 | ar-ye | 0x2401 | 9217 | 葡萄牙語 - 巴西 | pt-br | 0x0416 | 1046
亞美尼亞 | hy | 0x042B | 1067 | 利托-羅曼緒方言 | rm | 0x0417 | 1047
阿澤里語– 拉丁 | az-az | 0x042C | 1068 | 羅馬尼亞語 | ro | 0x0418 | 1048
阿澤里語– 斯拉夫 | az-az | 0x082C | 2092 | 羅馬尼亞語 - 摩爾達維亞 | ro-mo | 0x0818 | 2072
巴斯克語 | eu | 0x042D | 1069 | 俄語 | ru | 0x0419 | 1049
白俄羅斯語 | be | 0x0423 | 1059 | 羅馬尼亞語 - 摩爾達維亞 | ru-mo | 0x0819 | 2073
保加利亞語 | bg | 0x0402 | 1026 | 梵語 | sa | 0x044F | 1103
加泰隆尼亞語 | ca | 0x0403 | 1027 | 塞爾維亞語 - 斯拉夫 | sr-sp | 0x0C1A | 3098
中文 - 中國大陸 | zh-cn | 0x0804 | 2052 | 塞爾維亞語 -拉丁 | sr-sp | 0x081A | 2074
中文 - 香港S.A.R. | zh-hk | 0x0C04 | 3076 | 波紮納語 | tn | 0x0432 | 1074
中文 – 澳門 S.A.R | zh-mo | 0x1404 | 5124 | 斯洛維尼亞語 | sl | 0x0424 | 1060
中文 - 新加坡 | zh-sg | 0x1004 | 4100 | 斯洛伐克語 | sk | 0x041B | 1051
中文 - 台灣 | zh-tw | 0x0404 | 1028 | 索布語（Sorbian） | sb | 0x042E | 1070
克羅埃西亞語 | hr | 0x041A | 1050 | 西班牙語 - 標準 | es-es | 0x0C0A | 1034
捷克語 | cs | 0x0405 | 1029 | 西班牙語 - 阿根廷 | es-ar | 0x2C0A | 11274
丹麥語 | da | 0x0406 | 1030 | 西班牙語 - 玻利維亞 | es-bo | 0x400A | 16394
荷蘭語 | nl-nl | 0x0413 | 1043 | 西班牙語 - 智利 | es-cl | 0x340A | 13322
荷蘭語 - 比利時 | nl-be | 0x0813 | 2067 | 西班牙語 - 哥倫比亞 | es-co | 0x240A | 9226
英語 - 澳大利亞 | en-au | 0x0C09 | 3081 | 西班牙語 - 哥斯大黎加 | es-cr | 0x140A | 5130
英語 - 貝里玆 | en-bz | 0x2809 | 10249 | 西班牙語 - 多明尼克共和國 | es-do | 0x1C0A | 7178
英語 - 加拿大 | en-ca | 0x1009 | 4105 | 西班牙語 - 厄瓜多 | es-ec | 0x300A | 12298
英語 - 加勒比海 | en-cb | 0x2409 | 9225 | 西班牙語 - 瓜地馬拉 | es-gt | 0x100A | 4106
英語 - 愛爾蘭 | en-ie | 0x1809 | 6153 | 西班牙語 - 宏都拉斯 | es-hn | 0x480A | 18442
英語 - 牙買加 | en-jm | 0x2009 | 8201 | 西班牙語 - 墨西哥 | es-mx | 0x080A | 2058
英語 - 紐西蘭 | en-nz | 0x1409 | 5129 | 西班牙語 - 尼加拉瓜 | es-ni | 0x4C0A | 19466
英語 – 菲律賓 | en-ph | 0x3409 | 13321 | 西班牙語 - 巴拿馬 | es-pa | 0x180A | 6154
英語 - 南非 | en-za | 0x1C09 | 7177 | 西班牙語 - 祕魯 | es-pe | 0x280A | 10250
英語 - 千里達 | en-tt | 0x2C09 | 11273 | 西班牙語- 波多黎各 | es-pr | 0x500A | 20490
英語 - 大英國協 | en-gb | 0x0809 | 2057 | 西班牙語- 巴拉圭 | es-py | 0x3C0A | 15370
英語 - 美國 | en-us | 0x0409 | 1033 | 西班牙語- 薩爾瓦多 | es-sv | 0x440A | 17418
愛沙尼亞語 | et | 0x0425 | 1061 | 西班牙語- 烏拉圭 | es-uy | 0x380A | 14346
波斯語（Farsi） | fa | 0x0429 | 1065 | 西班牙語- 委內瑞拉 | es-ve | 0x200A | 8202
芬蘭語 | fi | 0x040B | 1035 | 蘇圖語 | sx | 0x0430 | 1072
法羅群島語 | fo | 0x0438 | 1080 | 史瓦西里語 | sw | 0x0441 | 1089
法語 - 標準 | fr-fr | 0x040C | 1036 | 瑞典語 | sv-se | 0x041D | 1053
法語- 比利時 | fr-be | 0x080C | 2060 | 瑞典語 - 芬蘭 | sv-fi | 0x081D | 2077
法語 - 加拿大 | fr-ca | 0x0C0C | 3084 | 坦米爾語 | ta | 0x0449 | 1097
法語 - 盧森堡 | fr-lu | 0x140C | 5132 | 韃靼語 | tt | 0X0444 | 1092
法語 - 瑞士 | fr-ch | 0x100C | 4108 | 泰語 | th | 0x041E | 1054
蓋爾語– 愛爾蘭 | gd-ie | 0x083C | 2108 | 土耳其語 | tr | 0x041F | 1055
蓋爾語-蘇格蘭 | gd | 0x043C | 1084 | 聰加語 | ts | 0x0431 | 1073
德語 - 標準 | de-de | 0x0407 | 1031 | 烏克蘭語 | uk | 0x0422 | 1058
德語 - 奧地利 | de-at | 0x0C07 | 3079 | 烏爾都語 | ur | 0x0420 | 1056
德語 - 列支敦斯登 | de-li | 0x1407 | 5127 | 烏茲別克文 – 斯拉夫 | uz-uz | 0x0843 | 2115
德語 - 盧森堡 | de-lu | 0x1007 | 4103 | 烏茲別克文– 拉丁 | uz-uz | 0x0443 | 1091
德語 - 瑞士 | de-ch | 0x0807 | 2055 | 越南語 | vi | 0x042A | 1066
希臘語 | el | 0x0408 | 1032 | 科薩語 | xh | 0x0434 | 1076
希伯來語 | he | 0x040D | 1037 | 意第緒語 | yi | 0x043D | 1085
印度語 | hi | 0x0439 | 1081 | 祖魯語 | zu | 0x0435 | 1077
匈牙利語 | hu | 0x040E | 1038 |  |  |  |


物件與集合

本節內容

Class 物件

Err 物件

Matches 集合

Match 物件

通用運算式 (RegExp) 物件

SubMatches 集合

相關章節

VBScript 語言參考


Class 物件

這是使用 Class 陳述式所建立的物件，它可讓您存取該物件類別的事件。

附註

您無法明確地將變數宣告成 Class 型態。就 VBScript 而言，「Class 物件」一詞是指使用 VBScript Class 陳述式所定義的任何物件。

一旦使用 Class 陳述式建立物件類別定義後，您就可以使用下列形式建立該物件類別的執行個體：

Dim X
Set X = New classname

因為 VBScript 屬於晚期連結的語言，所以您無法執行下列任一項動作：

Dim X as New classname

-或-

Dim X
X = New classname

-或-

Set X = New Scripting.FileSystemObject

事件

Class Object 事件

基本條件

版本 5

請參閱

Class 陳述式 | Dim 陳述式 | Set 陳述式


Class 物件事件

Class 物件提供對類別事件的存取。

事件

Initialize 事件

Terminate 事件


Matches 集合物件

通用 (regular) 運算式 Match 物件的集合物件。

附註

Matches 集合物件內含個別的 Match 物件，而且您只能使用 RegExp 物件的 Execute 方法來建立。Matches 集合物件的某個屬性是唯讀的，就如個別的 Match 物件屬性一樣。

在執行通用運算式時可以產生零個或多個 Match 物件，每個 Match 物件都讓您可以存取在通用運算式中所找到的字串、字串的長度和發現符合的索引位置。

以下程式碼舉例說明如何從通用運算式搜尋取得 Matches 集合物件，以及如何在集合物件中反覆運算：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫沒有區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 1

請參閱

For Each...Next 陳述式 | Match 物件 | RegExp 物件


Err 物件

含有關於執行階段錯誤的資訊。可使用 Raise 或 Clear 方法來產生或清除執行階段錯誤。

附註

Err 物件是一個擁有全域有效範圍的內建物件，您不需要在程式碼中建立其執行個體即可使用。此 Err 物件的屬性是由錯誤產生者 (Visual Basic、Automation 物件或 VBScript 程式設計人員) 所設定的。

Err 物件的預設屬性是 Number。Err.Number 內含一個整數提供 Automation 物件使用，以傳回一個 SCODE。

當一個執行階段錯誤發生時，Err 物件的屬性會被填上一些資訊，這些資訊會指明是何種錯誤且會告訴您如何處理這個錯誤。想直接在您的程式碼中產生執行階段錯誤，請用 Raise 方法。

在執行過 On Error Resume Next 陳述式後，Err 物件的屬性會被重設為零或長度為零的字串 ("")。Clear 方法可用來強迫重設 Err 物件。

以下範例說明了 Err 物件的用法：

On Error Resume Next
Err.Raise 6   ' 引發溢位錯誤。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear      ' 清除該錯誤。

屬性與方法

Err 物件屬性與方法

基本條件

版本 1

請參閱

On Error 陳述式


Err 物件屬性與方法

Err 物件包含有關執行階段錯誤的資訊。

屬性

Description 屬性

HelpContext 屬性

HelpFile 屬性

Number 屬性

Source 屬性

方法

Clear 方法

Raise 方法


Match 物件

讓您可以存取通用 (regular) 運算式比對之唯讀屬性的物件。

附註

您只能使用 RegExp 物件的 Execute 方法來建立 Match 物件，這個方法實際上會傳回 Match 物件的集合物件。所有的 Match 物件屬性都是唯讀性質。

在執行通用運算式時，可以產生零或多個 Match 物件，每個 Match 物件都讓您可以存取在通用運算式中所找到的字串、字串長度和發現符合項目的索引位置。

下面的程式碼說明 Match 物件的用法：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   '設定為大小寫沒有區別。
   regEx.Global = True   '設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   '執行搜尋。
   For Each Match in Matches   '反覆處理 Matches 集合物件。
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

屬性

Match 物件屬性

基本條件

版本 5

請參閱

Matches 集合物件 | RegExp 物件


Match 物件屬性

Match 物件提供對通用運算式比對的唯讀屬性存取。

屬性

FirstIndex 屬性

Length 屬性

Value 屬性


通用運算式 (RegExp) 物件

支援簡單的通用運算式 (regular expression)。

附註

下面的程式碼說明 RegExp 物件的用法。

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫沒有區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理 Matches 集合事件。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

屬性與方法

通用運算式物件屬性與方法

基本條件

版本 5

請參閱

Match 物件 | Matches 集合物件


通用運算式物件屬性和方法

通用運算式物件提供簡易的通用運算式支援。

屬性

Global 屬性

IgnoreCase 屬性

Pattern 屬性

方法

Execute 方法

Replace 方法

Test 方法


SubMatches 集合物件

通用運算式子比對字串的集合物件。

附註

一個 SubMatches 集合物件包含了個別的子比對字串，而且只能使用RegExp 物件的Execute 方法來建立。SubMatches 集合物件屬於唯讀性質。

執行通用運算式時，如果擷取括號中包含了數個子運算式，就會產生0或多個子比對。Each item in the SubMatches 集合物件的每個項目都是通用運算式找到並擷取的字串。

下列程式碼說明了如何從一個通用運算式搜尋中取得SubMatches 集合物件的方法，以及如何存取它的個別成員：

Function SubMatchTest(inpStr)
  Dim oRe, oMatch, oMatches
  Set oRe = New RegExp
  ' 尋找一個電子郵件信箱 (不是完整的 RegExp)
  oRe.Pattern = "(\w+)@(\w+)\.(\w+)"
  ' 取得 Matches 集合物件
  Set oMatches = oRe.Execute(inpStr)
  ' 取得Matches 集合物件的第一個項目
  Set oMatch = oMatches(0)
  ' 建立結果字串。
  ' Match 物件是完全的比對- dragon@xyzzy.com
  retStr = "Email address is: " & oMatch & vbNewline
  ' 取得信箱地址中次要相符的部分。
  retStr = retStr & "Email alias is: " & oMatch.SubMatches(0)  ' dragon
  retStr = retStr & vbNewline
  retStr = retStr & "Organization is: " & oMatch. SubMatches(1)' xyzzy
  SubMatchTest = retStr
End Function

MsgBox(SubMatchTest("Please send mail to dragon@xyzzy.com. Thanks!"))

基本條件

版本 5.5

請參閱

For Each...Next 陳述式 | Match 物件 | Matches 集合物件 |RegExp 物件


運算子

本節內容

運算子優先順序

運算子摘要

Arithmetic 運算子

Comparison 運算子

Concatenation 運算子

Logical 運算子

相關章節

VBScript 語言參考


運算子優先順序 (VBScript)

Visual Basic Scripting Edition

運算子優先順序

當一個運算式中有數個動作發生時，各部分的動作會在預先決定的順序下完成，而此順序就是運算子優先順序。括號則可推翻優先順序的等級，並且強迫運算式的某些部分必須優先執行。括號內要比括號外部的先執行。然而，括號中運算子優先順序與正常情況是一樣的。

當運算式中有超過一種運算子時，會先執行算術運算子，其次是比較運算子，而後才是邏輯運算子。比較運算子優先順序全都是相同的，也就是說依照出現的順序由左到右依序執行。而算術和邏輯運算子則必須依照下列的優先順序，依序執行：

算術 | 比較 | 邏輯
負號 (-) | 等於 (=) | Not
指數運算(^) | 不等於(<>) | And
減號和除號 (*、/) | 小於 (<) | Or
整數除號 (\) | 大於 (>) | Xor
模數運算 (Mod) | 小於或等於 (<=) | Eqv
加號和減號 (+、-) | 大於或等於 (>=) | Imp
字串串連 (&) | Is | &

若減號和除號同時存在於運算式中，則計算時的順序就是依照其左右位置來決定。同樣地，若加號和減號同時存在於一個運算式中，計算時的順序就是依照其左右位置來決定。

字串串連運算子 (&) 不是算術運算子，但是在優先順序上它會落在所有算術運算子之後，且在所有比較運算子之前。Is 運算子是一個物件引用比較運算子。它並非比較物件或是它們的值；而是檢查兩個物件是否引用到相同的物件。

基本條件

版本 1

請參閱

Is 運算子 | 運算子摘要


運算子摘要 (VBScript)

Visual Basic Scripting Edition

運算子摘要

算術運算子用來執行算術計算的運算子。

指定運算子
指定變數或屬性值的運算子。

比較運算子
用來執行比較的運算子。

串連運算子
將兩個運算式進行字串串連的運算子。

邏輯運算子用來進行邏輯運算的運算子。

請參閱

運算子優先順序


加號運算子 (+) (VBScript)

Visual Basic Scripting Edition

加號運算子 (+)

加總兩個數目。

result = expression1 + expression2

引數

result
任意的數值變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

雖然您也可以使用 + 運算子來將兩個字串串連，但是您最好還是使用 & 運算子來進行串連，如此可避免混淆，並且增加程式碼的可讀性。

使用 + 運算子時，您並無法確定發生的是加法或是字串串連。

+ 運算子將依照下列法則，以運算式的資料形態決定運算方式：

如果 | 則
兩個運算式都是數值資料型態 | 相加。
兩個運算式都是字串 | 串連。
一個運算式是數值資料型態，而另一個是字串 | 相加。

若其中有一個或兩個運算式都是 Null 運算式，則 result 為 Null。若兩個運算式都是 Empty，則 result 是一個 Integer。然而，若只有一個運算式是 Empty，則另一個運算式會當成 result 原封不動地被傳回來。

基本條件

版本 1

請參閱

& 運算子 | - 運算子 | 算術運算子 | 串連運算子 | 運算子優先順序 | 運算子摘要


And 運算子

在兩個運算式上進行邏輯結合。

result = expression1 And expression2

引數

result
任意的數值變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

只有當兩個運算式的結果都是 True，result 才會是 True。若其中有一個運算式的結果是 False，則 result 會是 False。下表說明如何決定 result：

如果 expression1 為 | 且 expression2 為 | 則 result 為
True | True | True
True | False | False
True | Null | Null
False | True | False
False | False | False
False | Null | False
Null | True | Null
Null | False | False
Null | Null | Null

And 運算子也會進行位元比對，此運算式會對兩個數值運算式中相同位置的位元做比較；並根據下表設定 result 中的相對位元：

如果在 expression1 的位元為 | 且在 expression2 的位元為 | 則 result 為
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

基本條件

版本 1

請參閱

邏輯運算子 | Not 運算子 | 運算子優先順序 | 運算子摘要 | Or 運算子 | Xor 運算子


指定運算子 (=) (VBScript)

Visual Basic Scripting Edition

指定運算子 (=)

指定變數或屬性的值。

variable = value

引數

variable
任何變數或可寫入的屬性。
value
為任何數值或字串字母、常數或運算式。

附註

等號 (=) 左邊的名稱可以是簡易的變數或是陣列的元件。等號 (=) 左邊的屬性必須是能在執行階段寫入的屬性。

基本條件

版本 1

請參閱

比較運算子 | 運算子優先順序 | 運算子摘要 | Set 陳述式


串連運算子 (&)

強迫將兩個運算式進行字串串連。

result = expression1 & expression2

引數

result
任意的變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

當 expression 不是字串時，它將會被轉換成 String 資料型態。如果兩個運算式都是 Null，則 result 也會是 Null。然而，如果只有一個 expression 是 Null，則在與其它運算式串連時，它都會被當成長度為零的字串 ("")。任何型態為 Empty的運算式也都將當成長度為零的字串。

基本條件

版本 1

請參閱

串連運算子 | 運算子優先順序 | 運算子摘要


除號運算子 (/) (VBScript)

Visual Basic Scripting Edition

除號運算子 (/)

將兩個數值相除，然後傳回一個浮點數。

result = number1/number2

引數

result
任意的數值變數。
number1
任意的數值運算式。
number2
任意的數值運算式。

附註

若其中一個或兩個運算式都是 Null 運算式，則 result 會是 Null。任何是 Empty 的運算式都會被當成 0。

基本條件

版本 1

請參閱

* 運算子 | \ 運算子 | 算術運算子 | 運算子優先順序 | 運算子摘要


Eqv 運算子

於兩個運算式上進行邏輯對等。

result = expression1 Eqv expression2

引數

result
任意的數值變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

如果其中有一個運算式是 Null ，則 result 也會是 Null。若運算式都不是 Null，則根據下表來決定 result：

如果 expression1 為 | 且 expression2 為 | 則 result 為
True | True | True
True | False | False
False | True | False
False | False | True

Eqv 運算子也會進行位元比對，這種運算會對兩個數值運算式中相同位置的位元做比較，並且根據下表設定 result 中相對的位元：

如果在 expression1 的位元為 | 且在 expression2 的位元為 | 則 result 的位元為
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

基本條件

版本 1

請參閱

Imp 運算子 | 邏輯運算子 | 運算子優先順序 | 運算子摘要


指數運算子 (^)

使一個數字提升成為指數的次方數。

result = number^exponent

引數

result
任意的數值變數。
number
任意的數值運算式。
exponent
任意的數值運算式。

附註

只有當 exponent 是整數值時，number 才可以是負數。當單一運算式中要執行多次指數運算時，^ 運算子的運算順序是從左到右依序進行。

若 number 或 exponent 中有任何一個是Null 運算式時，則 result 也將會是 Null。

基本條件

版本 1

請參閱

算術運算子 | 運算子優先順序 | 運算子摘要


Imp 運算子

對兩個運算式進行邏輯關聯運算。

result = expression1 Imp expression2

引數

result
任意的數值變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

下表說明如何決定 result：

如果 expression1 為 | 且 expression2 為 | 則 result 為
True | True | True
True | False | False
True | Null | Null
False | True | True
False | False | True
False | Null | True
Null | True | True
Null | False | Null
Null | Null | Null

Imp 運算子也會進行位元比對，這種運算會對兩個數值運算式中相同位置的位元做比較，並且根據下表設定 result 中相對的位元：

如果在 expression1 的位元為 | 且在 expression2 的位元為 | 則 result 的位元為
0 | 0 | 1
0 | 1 | 1
1 | 0 | 0
1 | 1 | 1

基本條件

版本 1

請參閱

Eqv 運算子 | 邏輯運算子 | 運算子優先順序 | 運算子摘要


整數除號運算子 (\)

將兩個數值相除，然後傳回整數的結果。

result = number1\number2

引數

result
任意的數值變數。
number1
任意的數值運算式。
number2
任意的數值運算式。

附註

在執行除法運算之前，數值運算式會先捨入為 Byte、Integer、或是 Long 資料型態的運算式。

若其中的任一個運算式為 Null，result 都將是 Null。若有運算式是 Empty，則會被當作 0 來處理。

基本條件

版本 1

請參閱

* 運算子 | / 運算子 | 算術運算子 | 運算子優先順序 | 運算子摘要


Is 運算子

比較兩個物件引用變數。

result = object1 Is object2

引數

result
任意的數值變數。
object1
任意的物件名稱。
object2
任意的物件名稱。

附註

如果 object1 和 object2 引用相同的物件，則 result 為 True；如果不是的話，則 result 為 False。有很多方法可讓兩個變數引用相同的物件。

在下列的範例中，A 已被設定成與 B 引用相同的物件：

Set A = B

下列的範例會使 A 與 B 引用相同的物件 C：

Set A = C
Set B = C

基本條件

版本 1

請參閱

比較運算子 | 運算子優先順序 | 運算子摘要


Mod 運算子

將兩個數值相除，然後傳回其餘數。

result = number1 Mod number2

引數

result
任意的數值變數。
number1
任意的數值運算式。
number2
任意的數值運算式。

附註

模數 (或餘數) 運算子會將 number1 除以 number2 (浮點數會捨入為整數)，然後傳回餘數為 result。例如，在下列運算式中，A (即 result) 等於 5。

A = 19 Mod 6.7

若運算式中有任一個為 Null 運算式，則 result 將會是 Null。若有運算式是 Empty，則它會被當成 0 來處理。

基本條件

版本 1

請參閱

算術運算子 | 運算子優先順序 | 運算子摘要


乘號運算子 (*) (VBScript)

Visual Basic Scripting Edition

乘號運算子 (*)

將兩個數值相乘。

result = number1*number2

引數

result
任意的數值變數。
number1
任意的數值運算式。
number2
任意的數值運算式。

附註

若其中有一個或兩個運算式都是 Null 運算式，則 result 會是 Null。若運算式為 Empty，則會被當成 0 來處理。

基本條件

版本 1

請參閱

\ 運算子 | 算術運算子 | 運算子優先順序 | 運算子摘要


Not 運算子

對一運算式進行邏輯否定。

result = Not expression

引數

result
任意的數值變數。
expression
任意的運算式。

附註

下表說明如何決定 result：

如果 expression 為 | 則result為
True | False
False | True
Null | Null

另外，Not 運算子會反轉任何變數的位元值，並且根據下表來設定 result 中相對應的位元：

如果在 expression 的位元為 | 則在result 的位元為
0 | 1
1 | 0

基本條件

版本 1

請參閱

And 運算子 | 邏輯運算子 | 運算子優先順序 | 運算子摘要 | Or 運算子 | Xor 運算子


Or 運算子

將兩個運算式進行邏輯分離的運算。

result = expression1 Or expression2

引數

result
任意的數值變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

如果兩個運算式中有一個或是兩者都是 True，則 result 會是 True。下表說明如何決定 result：

如果 expression1 為 | 且 expression2 為 | 則 result 為
True | True | True
True | False | True
True | Null | True
False | True | True
False | False | False
False | Null | Null
Null | True | True
Null | False | Null
Null | Null | Null

Or 運算子也會進行位元比對，這種運算會對兩個數值運算式中相同位置的位元做比較；並根據下表設定 result 中相對的位元：

如果在 expression1 的位元為 | 且在 expression2 的位元為 | 則 result 為
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1

基本條件

版本 1

請參閱

And 運算子 | 邏輯運算子 | Not 運算子 | 運算子優先順序 | 運算子摘要 | Xor 運算子


減號運算子 (-) (VBScript)

Visual Basic Scripting Edition

減號運算子 (-)

取得兩個數值的差值，或是表示一數值運算式的負值。

語法 1

result = number1-number2

語法 2

-number

引數

result
任意的數值變數。
number
任意的數值運算式。
number1
任意的數值運算式。
number2
任意的數值運算式。

附註

在語法 1 中，- 運算子是算術上的減號運算子，用來得到兩個數值之間的差值。在語法 2 中，- 運算子是單元負值運算子，用來表示一個運算式的負值。

若其中有一個或兩個運算式都是 Null 運算式，則 result 為 Null。若運算式是 Empty，則會被當成 0 來處理。

基本條件

版本 1

請參閱

+ 運算子 | 算術運算子 | 運算子優先順序 | 運算子摘要


Xor 運算子

對兩個運算式進行邏輯互斥運算。

result = expression1 Xor expression2

引數

result
任意的數值變數。
expression1
任意的運算式。
expression2
任意的運算式。

附註

如果運算式中只有一個的結果是 True，則 result 是 True。然而，若運算式中有一個是 Null，則 result 將會是 Null。當兩個運算式都不是 Null，則 result 根據下表來決定：

如果 expression1 為 | 且 expression2 為 | 則 result 為
True | True | False
True | False | True
False | True | True
False | False | False

Xor 運算子也會進行位元比對，這種運算會對兩個數值運算式中相同位置的位元做比較；並根據下表設定 result 中相對的位元：

如果在 expression1 的位元為 | 且在 expression2 的位元為 | 則 result 為
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

基本條件

版本 1

請參閱

And 運算子 | 邏輯運算子 | Not 運算子 | 運算子優先順序 | 運算子摘要 | Or 運算子


算術運算子

^ 運算子

* 運算子

/ 運算子

\ 運算子

Mod 運算子

+ 運算子

- 運算子

串連運算子


比較運算子 (VBScript)

Visual Basic Scripting Edition

比較運算子

用來比較運算子。

result = expression1 comparisonoperator expression2
result = object1 Is object2

組成分子

result
任意數值變數。
expression
任意運算式。
comparisonoperator
任意比較運算子。
object
任意物件名稱。

附註

Is 運算子有一種特定的比較功能，使得它不同於所有在下列表中出現的運算子。下列表中列出了比較運算子，以及決定其結果為 True、False 或 Null 的情況：

運算子 | 說明 | True 若 | False 若 | Null 若
< | 小於 | expression1 < expression2 | expression1 >= expression2 | expression1 or expression2 = Null
<= | 小於或等於 | expression1 <= expression2 | expression1 > expression2 | expression1 or expression2 = Null
> | 大於 | expression1 > expression2 | expression1 <= expression2 | expression1 or expression2 = Null
>= | 大於或等於 | expression1 >= expression2 | expression1 < expression2 | expression1 or expression2 = Null
= | 等於 | expression1 = expression2 | expression1 <> expression2 | expression1 or expression2 = Null
<> | 不等於 | expression1 <> expression2 | expression1 = expression2 | expression1 or expression2 = Null

當比較兩個運算式時，或許不太容易決定到底要用數字，還是用字串來比較。

下列表可以告訴您該如何根據組成運算式的次資料型態來比較運算子，以及比較後的結果會是如何：

若 | 則
兩個運算式都是數值。 | 用數字來比較。
兩個運算式都是字串。 | 用字串來比較。
其中一個運算式是數值，另一個是字串。 | 數值運算式小於字串運算式。
其中一個運算式是 Empty，另一個是數字。 | 比較數值。以 0 為 Empty 運算式。
其中一個運算式是 Empty， 另一個是字串。 | 比較字串。以長度為 0 的字串 ("") 為 Empty 運算式。
兩個運算式都是 Empty。 | 兩個運算式相等。

基本條件

版本 1

請參閱

= 運算子 | Is 運算子 | 運算子優先順序 | 運算子摘要


串連運算子

& 運算子
+ 運算子


邏輯運算子

And 運算子
Not 運算子
Or 運算子
Xor 運算子


屬性

本節內容

Description 屬性

FirstIndex 屬性

Global 屬性

HelpContext 屬性

HelpFile 屬性

IgnoreCase 屬性

Length 屬性

Number 屬性

Pattern 屬性

Source 屬性

Value 屬性

相關章節

VBScript 語言參考


Description 屬性 (VBScript)

Visual Basic Scripting Edition

Description 屬性

傳回或設定和錯誤相關的說明性字串。

object.Description [= stringexpression]

引數

object
必須是一個 Err 物件。
stringexpression
字串運算式。其內容是和錯誤相關的說明性字串。

附註

Description 屬性內含一段關於錯誤的簡短說明。當您無法或不想去處理一個錯誤的時候，您可以使用這個屬性來提醒使用者。當要產生一個使用者定義的錯誤時，您可以針對此錯誤指定一段簡短的說明到這個屬性之中。如果 Description 沒有填入資料，而且當錯誤產生的時候，Number 的值正好符合 VBScript 執行階段錯誤，那麼和錯誤相關的說明字串會被傳回。

On Error Resume Next
Err.Raise 6   ' 引發溢位錯誤。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear   ' 清除該錯誤。

基本條件

版本 1

請參閱

Err 物件 | HelpContext 屬性 | HelpFile 屬性 | Number 屬性 | Source 屬性

適用於：Err 物件


FirstIndex 屬性

傳回符合項目在搜尋字串中的位置。

object.FirstIndex

object 引數一律是 Match 物件。

附註

FirstIndex 屬性會從搜尋字串的開頭使用從零起算的位移。換句話說，字串中的第一個字元會當成字元零 (0)。 下面的程式碼說明 FirstIndex 屬性的用法。

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定大小寫並無區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 5

請參閱

Length 屬性 | Value 屬性

適用於：Match 物件


Global 屬性 (VBScript)

Visual Basic Scripting Edition

Global 屬性

設定或傳回一個 Boolean 值，以表示是否比對整個搜尋字串中所有符合模式的項目，或只比對第一個符合的項目。

object.Global [= True | False ]

object 引數一律是 RegExp 物件。如果搜尋能適用於整個字串，那麼 Global 屬性的值就是 True；否則為 False。預設值是 True。

附註

下面的程式碼說明 Global 屬性的用法 (請變更 Global 屬性的設定值，並查看其結果)︰

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫無區別。
   regEx.Global = True   ' 設定全域搜尋。
   Set Matches = regEx.Execute(strng)   '執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 5

請參閱

IgnoreCase 屬性 | Pattern 屬性

適用於：RegExp 物件


HelpContext 屬性

傳回或設定在說明檔案中，某個主題的主題代碼 (context ID)。

object.HelpContext [= contextID]

引數

object
必要項。必須是一個 Err 物件。
contextID
選擇項。說明檔案中某個說明主題的有效識別項。

附註

如果在 HelpFile 中設定了一個說明檔案，則 HelpContext 屬性會用來自動顯示指定的說明主題。如果 HelpFile 與 HelpContext 都沒有設定，則會檢查 Number 屬性。若該屬性值有對應至某 VBScript 執行階段錯誤值，則會使用 VBScript 說明的主題代碼。若 Number 屬性沒有對應至任何 VBScript 錯誤，則會顯示 VBScript 說明檔案的內容畫面。

以下範例說明了 HelpContext 屬性的用法：

On Error Resume Next
Dim Msg
Err.Clear
Err.Raise 6   ' 產生"溢位" 錯誤。
Err.Helpfile = "yourHelp.hlp"
Err.HelpContext = yourContextID
If Err.Number <> 0 Then
   Msg = "Press F1 or Help to see " & Err.Helpfile & " topic for" & _
   " the following HelpContext: " & Err.HelpContext
   MsgBox Msg, , "error: " & Err.Description, Err.Helpfile, Err.HelpContext
End If

基本條件

版本 2

請參閱

Description 屬性 | HelpFile 屬性 | Number 屬性 | Source 屬性

適用於：Err 物件


HelpFile 屬性

傳回或設定說明檔案的完整路徑。

object.HelpFile [= contextID]

引數

object
必要項，必須是一個 Err 物件。
contextID
選擇項。說明檔案的完整路徑。

附註

如果 HelpFile 裏有指定說明檔案，那麼當使用者在錯誤訊息對話方塊按下 [說明] 按鈕 (或 F1 按鍵) 時，該說明檔案會被自動呼叫。如果 HelpContext 屬性包含一個指定檔案中的主題代碼，則該主題將會自動顯示。如果沒有指定 HelpFile，則 VBScript 說明檔案會被顯示。

On Error Resume Next
Dim Msg
Err.Clear
Err.Raise 6   ' 產生"溢位" 錯誤。
Err.Helpfile = "yourHelp.hlp"
Err.HelpContext = yourContextID
If Err.Number <> 0 Then
   Msg = "Press F1 or Help to see " & Err.Helpfile & " topic for" & _
   " the following HelpContext: " & Err.HelpContext
   MsgBox Msg, , "error: " & Err.Description, Err.Helpfile, Err.HelpContext
End If

基本條件

版本 2

請參閱

Description 屬性 | HelpContext 屬性 | Number 屬性 | Source 屬性

適用於：Err 物件


IgnoreCase 屬性

設定或傳回一個 Boolean 值，以表示模式搜尋是否區分大小寫。

object.IgnoreCase [= True | False ]

object 引數一律是 RegExp 物件。如果搜尋是大小寫相異的話，那麼 IgnoreCase 屬性的值就是 False；否則為 True。預設值是 False。

附註

下面的程式碼說明 IgnoreCase 屬性的用法 (請變更 IgnoreCase 屬性的設定值，並查看結果)︰

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫無區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 5

請參閱

Global 屬性 | Pattern 屬性

適用於：RegExp 物件


Length 屬性

傳回在搜尋字串中所找到之相符項目的長度。

object.Length

object 引數一律是 Match 物件。

附註

下面的程式碼說明 Length 屬性的用法︰

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫無區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Length is "
      RetStr = RetStr & Match.Length
      RetStr = RetStr & " characters." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 5

請參閱

FirstIndex 屬性 | Value 屬性

適用於：Match 物件


Number 屬性 (VBScript)

Visual Basic Scripting Edition

Number 屬性

傳回或設定一個表示錯誤的數值。Number 是 Err 物件的預設屬性。

object.Number [= errornumber]

引數

object
必須是一個 Err 物件。
errornumber
一個代表 VBScript 錯誤代碼或是一個 SCODE 錯誤值的整數。

附註

當要從 Automation 物件傳回使用者自訂的錯誤時，請將 Err.Number 設定為您選擇之錯誤代碼的數值與 vbObjectError 常數相加的結果。

以下程式碼說明了 Number 屬性的用法。

On Error Resume Next
Err.Raise vbObjectError + 1, "SomeObject"    ' 引發物件錯誤#1。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear   ' 清除該錯誤。

基本條件

版本 1

請參閱

Description 屬性 | HelpContext 屬性 | HelpFile 屬性 | Err 物件 | Source 屬性

適用於：Err 物件


Pattern 屬性

設定或傳回所要搜尋的通用運算式模式。

object.Pattern [= "searchstring"]

引數

object
必要項。一律是 RegExp 物件變數。
searchstring
選擇項。將要搜尋的通用字串運算式。可包括設定值一節中表格內所定義的通用運算式字元。

設定值

撰寫通用運算式的模式時所使用的特殊字元和順序。下表說明這些字元，並提供字元使用方式的簡短範例。

字元 | 說明
\ | 標示下一個字元為特殊字元或文字，例如 n 對應字元 n，\n 則對應至換行字元。順序 \\ 對應 \，\( 則對應 (。
^ | 對應輸入的開頭。
$ | 對應輸入的結尾。
* | 對應前面的字元 0 次或更多次，例如 zo* 可對應到 z 或 zoo。
+ | 對應前面的字元一次或更多次，例如 zo+ 可對應到 zoo 而非 z。
? | 對應前面的字元 0 次或一次，例如 a?ve? 可對應到 never 中的 ve。
. | 對應換行字元以外的任何單一字元。
(pattern) | 比對模式並記錄符合的項目。對應的子字串可透過「項目」[0]...[n]，從結果的 Matches 集合中擷取。若要對應括弧字元 ()，請使用 \( 或 \)。
x|y | 對應 x 或 y，例如"z|wood" 可對應"z" 或 "wood"，"(z|w)oo" 可對應"zoo" 或 "wood"。
{n} | n 是一個正整數，必須完全對應 n 次。例如，o{2} 並不對應 Bob 中的 "o"，但可對應 foooood 中的前兩個 o。
{n,} | n 是一個正整數，至少應對應 n 次。例如，o{2,} 並不對應 Bob 中的 o，但可對應 foooood 中所有的 o。o{1,} 相當於 o+，o{0,} 則相當於 o*。
{n,m} | m 和 n 都是正整數，至少應對應 n 次，最多 m 次。例如，o{1,3} 可對應 fooooood 中的前 3 個 o，o{0,1} 相當於 o?。
[xyz] | 這是一個字元集，可對應任何一個括住的字元。例如，[abc] 可對應 plain 中的 a。
[^xyz] | 這是一個負的字元集，對應任何未括住的字元。例如，[^abc] 可對應 plain 中的 p。
[a-z] | 這是一個字元範圍，對應指定範圍內的任何字元。例如，[a-z] 可對應 a 到 z 範圍內的所有小寫字母字元。
[^m-z] | 這是一個負的字元範圍，對應指定範圍外的任何字元。例如，[m-z] 可對應 m 到 z 範圍以外的任何字元。
\b | 對應一個文字界緣 (word boundary)，也就是文字和空格之間的位置。例如，er\b 可對應 never 中的 er，但不對應 verb 中的 er。
\B | 對應一個非文字界緣。ea*r\B 可對應 never early 中的 ear。
\d | 對應數字字元，相當於 [0-9]。
\D | 對應非數字字元，相當於 [^0-9]。
\f | 對應一個換頁字元。
\n | 對應一個換行字元。
\r | 對應一個復位字元。
\s | 對應任何空白，包括空格、定位 (tab) 和換頁等等，相當於 [ \f\n\r\t\v]。
\S | 對應任何非空白字元，相當於 [^ \f\n\r\t\v]。
\t | 對應一個定位字元。
\v | 對應一個垂直定位字元。
\w | 對應包括底線在內的任何文字字元，相當於 [A-Za-z0-9_]。
\W | 對應任何非文字字元，相當於 [^A-Za-z0-9_]。
\num | 對應 num，此處的 num 是一個正整數。它是一個回到記憶符合項目的參考。例如，(.)\1 可對應兩個連續的相同字元。
\n | 對應 n，此處的 n 是一個八進位的 escape 值。八進位的 escape 值必須等於 1、2 或 3 個數字的長度。例如 \11 和 \011 都可對應一個定位字元。\0011 相當於 \001 與 1。八進位的 escape 值不得超過 256，否則運算式只會使用前兩個數字。這個字元可讓通用運算式能使用 ASCII 程式碼。
\xn | 對應 n，此處的 n 是一個十六進位的 escape 值。十六進位的 escape 值必須正好等於 2 個數字的長度。例如 \x41 可對應 A。\x041 相當於 \x04 與 1。這個字元可讓通用運算式能使用 ASCII 程式碼。

附註

下面的程式碼說明 Pattern 屬性的用法。

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫無區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 2

請參閱

Global 屬性 | IgnoreCase 屬性

適用於：RegExp 物件


Source 屬性 (VBScript)

Visual Basic Scripting Edition

Source 屬性

傳回或設定產生錯誤的來源物件名稱或應用程式名稱。

object.Source [= stringexpression]

引數

object
必須是一個 Err 物件。
stringexpression
字串運算式。用來指明產生錯誤的來源應用程式名稱。

附註

Source 屬性是用來指定產生錯誤之物件的字串運算式，此運算式通常是這個物件的物件類別名稱或程式設計識別碼，請使用 Source 來提供訊息，如果您的程式碼無法處理您所存取之物件所產生的錯誤，舉例來說，如果您存取 Microsoft Excel，而且它產生了一個除以零的錯誤，Microsoft Excel 會設定 Err.Number 為代表此項錯誤的錯誤代碼，並且設定 Source 為 Excel.Application。請注意當錯誤是由 Microsoft Excel 所呼叫的另一個物件所產生的時候，Excel 會中斷這個錯誤，並且將 Err.Number 設定成 Excel 本身的除以零錯誤代碼。不過，Excel 會使其他的 Err 物件 (包括 Source)，像是被產生錯誤的物件設定的一樣。

Source 會一直包含最初產生錯誤物件的名稱，您的程式碼可以嘗試根據使用的物件的錯誤說明，來處理這個錯誤。如果您的錯誤處理失敗了，可以使用 Err 物件所含資訊向使用者說明此錯誤，或使用 Source 及其他 Err 告知使用者那一個物件發生錯誤，或是錯誤敘述，或其他資訊。

當程式碼產生一個錯誤時，Source 就是您應用程式的程式設計識別碼。

以下程式碼說明了 Source 屬性的用法：

On Error Resume Next
Err.Raise 6   ' 引發溢位錯誤。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description & Err.Source)
Err.Clear   ' 清除該錯誤。

基本條件

版本 1

請參閱

Description 屬性 | Err 物件 | HelpContext 屬性 | HelpFile 屬性 | Number 屬性 | On Error 陳述式

適用於：Err 物件


Value 屬性

傳回在搜尋字串中所找到符合的值或文字。

object.Value

object 引數一律是 Match 物件。

附註

下面的程式碼說明 Value 屬性的用法。

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立變數。
   Set regEx = New RegExp   ' 建立通用運算式。
   regEx.Pattern = patrn   ' 設定模式。
   regEx.IgnoreCase = True   ' 設定為大小寫無區別。
   regEx.Global = True   ' 設定為全域搜尋。
   Set Matches = regEx.Execute(strng)   ' 執行搜尋。
   For Each Match in Matches   ' 反覆處理Matches集合物件。
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

基本條件

版本 1

請參閱

FirstIndex 屬性 | Length 屬性

適用於：Match 物件


陳述式

本節內容

Call 陳述式

Class 陳述式

Const 陳述式

Dim 陳述式

Do...Loop 陳述式

Erase 陳述式

Execute 陳述式

ExecuteGlobal 陳述式

Exit 陳述式

For Each...Next 陳述式

For...Next 陳述式

Function 陳述式

If...Then...Else 陳述式

On Error 陳述式

Option Explicit 陳述式

Private 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Public 陳述式

Randomize 陳述式

ReDim 陳述式

Rem 陳述式

Select Case 陳述式

Set 陳述式

Sub 陳述式

While...Wend 陳述式

With 陳述式

相關章節

VBScript 語言參考


Call 陳述式

將程式控制權轉移到 Sub 程序或 Function 程序。

 [Call] name [argumentlist]

引數

Call
選擇性的關鍵字。如果指定這個引數，則必須將 argumentlist 用括號圍住，例如：

Call MyProc(0)

name
必要項。要呼叫的程序名稱。
argumentlist
選擇項。傳遞至程序的變數、陣列、或運算式，之間請以逗號隔開。

附註

當您要呼叫一個程序時，並不一定要使用 Call 關鍵字。但如果您使用 Call 關鍵字來呼叫一個需要引數的程序，那麼必須將 argumentlist 以括號圍住。如果省略了 Call 關鍵字，那麼也必須要省略 argumentlist 的括號。如果您使用 Call 語法來呼叫內建函數或使用者定義函數，則函數的傳回值將會無法傳回。

Call MyFunction("Hello World")
Function MyFunction(text)
   MsgBox text
End Function

基本條件

版本 1


Class 陳述式

宣告物件類別的名稱，以及組成此物件類別的變數、屬性和方法等的定義。

Class name
   statements
End Class

引數

name
必要項。這是 Class 的名稱，必須遵照標準的變數命名規格來命名。
statements
必要項。一或多個陳述式，可定義 Class 的變數、屬性及方法。

附註

在 Class 區塊內，使用適當的宣告陳述式，將成員宣告為 Private 或 Public。任何宣告為 Private 的項目，只能在 Class 區塊中看得見。而宣告為 Public 的項目，則不僅能在 Class 區塊中看見它們，而且還能在 Class 區塊以外的程式碼中使用。任何未明確宣告為 Private 或 Public 的項目，根據預設都是 Public。 在物件類別區塊內宣告為 Public 的程序 (可以是 Sub 或 Function)，會變成此物件類別的方法。當使用 Property Get、Property Let 和 Property Set 來明確宣告屬性時，就可以將 Public 變數當作此物件類別的屬性。 在物件類別的宣告中，使用 Default 關鍵字來指定此物件類別的預設屬性和方法。有關如何使用此關鍵字的資訊，請參閱各個宣告陳述式的主題。

基本條件

版本 5

請參閱

Dim 陳述式 | Function 陳述式 | Private 陳述式 | Property Get 陳述式 | Property Let 陳述式 | Property Set 陳述式 | Public 陳述式 | Set 陳述式 | Sub 陳述式


Const 陳述式

宣告常數以用來取代某常值。

 [Public | Private] Const constname = expression

引數

Public
選擇項。在 Script 層次所使用的關鍵字，用來宣告在所有 Script 的所有程序中都可以使用的常數。不可在程序中使用此項宣告。
Private
選擇項。在 Script 層次所使用的關鍵字，用來宣告只能在撰寫宣告的 Script 中使用的常數。不可在程序中使用此項宣告。
constname
必要項。常數的名稱，必須遵循變數命名規格。
expression
必要項。文字、其他常數、或任何包括算術或邏輯運算子 (Is 除外) 的組合。

附註

一般常數皆預設為公用常數 (Public)，但程序中的常數則都是私用常數 (Private)，而且其可見性是不可以改變的。在一個 Script 裏，Script 層次的常數可見性可以用 Private 關鍵字來改變。

若要把多個常數宣告式撰寫於一行裏，請使用逗號 (,) 來分隔每個常數指定式。當常數以此方式宣告，並且使用了 Public 或 Private 關鍵字，則會適用於全部同一行的常數。

指定給常數的運算式不可以是變數、使用者自訂函數或 VBScript 內建的函數 (例如 Chr)。依照定義，它們不能是常數。您也不能將任何含有運算子的運算式設成常數，也就是說，只允許簡單的常數。 在 Sub 或 Function 程序裏所宣告的常數，只適用於該程序中。在程序外所宣告的常數，則是依照宣告它之 Script 中的定義。在任何可以使用運算式的地方，都可以使用常數。 以下程式碼說明了 Const 陳述式的用法：

Const MyVar = 459   '常數依照預設為公用常數。
Private Const MyString = "HELP"   '宣告私用常數。
Const MyStr = "Hello", MyNumber = 3.4567   '將多個常數宣告於同一行中。
備註 常數可以使您的程式自我記錄或較容易修改。和變數不一樣的是，在程式執行時，常數可以避免不小心錯誤的修改。

基本條件

版本 5

請參閱

Dim 陳述式 | Function 陳述式 | Private 陳述式 | Public 陳述式 | Sub 陳述式


Dim 陳述式

宣告變數，並配置儲存空間。

Dim varname[([subscripts])][, varname[([subscripts])]] . . .

引數

varname
變數的名稱，請遵循標準變數命名規格。
subscripts
陣列變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法：

upperbound [,upperbound] . . .

陣列的下限永遠為零。

附註

在 Script 層次以 Dim 所宣告的變數，於該 Script 的所有程序中皆可使用。在程序層次宣告的變數，則只可在該程序中使用。

您可以使用 Dim 陳述式加上空白的括號來宣告動態陣列。宣告動態陣列之後，請在程序中使用 ReDim 陳述式來定義陣列的維數和元素數目。若重新宣告一個使用 Dim 陳述式宣告之明確定義大小的陣列變數，則會發生錯誤。

備註 在程序中使用 Dim 陳述式時，通常會將 Dim 陳述式放在程序最開始的地方。

以下範例說明了 Dim 陳述式的用法：

Dim Names(9)       '宣告一個包含 10 個元素的陣列。
Dim Names()        '宣告一個動態陣列。
Dim MyVar, MyNum   ' 宣告兩個變數。

基本條件

版本 1

請參閱

Private 陳述式 | Public 陳述式 | ReDim 陳述式 | Set 陳述式


Do...Loop 陳述式

當條件式為 True 或直到條件式變為 True 時，重複執行一段陳述式區塊中的指令。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或者您可以使用底下這個語法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

引數

condition
數值運算式或字串運算式，其值為 True 或 False。如果 condition 是 Null，則 condition 會被當作 False 來處理。
statements
只要或直到 condition 為 True，便會一直重覆執行的一行或多行陳述式。

附註

Exit Do 只使用在 Do...Loop 控制結構內，當做另一個離開 Do...Loop 的方式，而且在 Do...Loop 中可以放置任意數量的 Exit Do 陳述式。Exit Do 通常與條件式 (例如 If...Then) 共同使用。當執行到 Exit Do 陳述式時，程式控制權會轉移到 Loop 指令之後的陳述式。

如果 Exit Do 使用在巢狀的 Do...Loop 陳述式中，則 Exit Do 會將控制權轉移到上一層 Exit Do 所在位置的迴圈。

以下範例說明了 Do...Loop 陳述式的用法：

Do Until DefResp = vbNo
   MyNum = Int (6 * Rnd + 1)   '隨機產生一個介於 1 至 6 之間的整數。
   DefResp = MsgBox (MyNum & " Do you want another number?", vbYesNo)
Loop

Dim Check, Counter
Check = True: Counter = 0   '初始化變數。
Do                            ' 外層迴圈。
   Do While Counter < 20      ' 內層迴圈。
      Counter = Counter + 1   '遞增計數器。
      If Counter = 10 Then    ' 如果條件為True...。
         Check = False        ' 將旗標設為False。
         Exit Do              ' 離開內層迴圈。
      End If
   Loop
Loop Until Check = False      ' 立即離開外層迴圈。

基本條件

版本 1

請參閱

Exit 陳述式 | For...Next 陳述式 | While...Wend 陳述式


Erase 陳述式

重新初始化固定大小陣列中的元素，並釋放動態陣列的儲存空間。

Erase array

array 引數為要刪除的陣列變數。

附註

無論是固定大小的陣列 (普通的) 或動態的陣列，Erase 會根據陣列型態而進行不同的動作。若是固定大小的陣列，Erase 不會釋放其記憶體空間。Erase 以下列方式來設定固定式陣列的元素：

陣列型態 | Erase 對固定式陣列之元素的作用
固定式數值陣列 | 將每個元素都設為零。
固定式字串陣列 | 將每個元素都設為零長度字串 ("")。
物件陣列 | 將每個元素都設為 Nothing。

Erase 會釋放動態陣列所使用的記憶體，在程式要重新引用動態陣列之前，必須使用 ReDim 陳述式重新宣告陣列變數的維數。

以下範例說明了 Erase 陳述式的用法。

Dim NumArray(9)
Dim DynamicArray()
ReDim DynamicArray(9)   '配置儲存空間。
Erase NumArray   '每一個元素都重新初始化。
Erase DynamicArray   '釋放陣列使用的記憶體。

基本條件

版本 1

請參閱

Dim 陳述式 | Nothing | ReDim 陳述式


Execute 陳述式

執行一或多個指定的陳述式。

Execute statement

必要的 statement 引數是一個字串運算式，其中包含要執行的一或多個陳述式。 若要在 statement 引數中包括多個陳述式，請使用冒號 (:) 或內嵌式分行符號將它們分隔開來。

附註

在 VBScript 中，x = y 可以用兩種方式來解譯。第一種是指定陳述式，將 y 的值指定給 x。第二種解譯方式是，使用運算式檢驗 x 和 y 的值是否相同。如果是的話，result 為 True；否則 result 為 False。Execute 陳述式通常會使用第一種解譯方式，而 Eval 方法則使用第二種。

備註 在 Microsoft® JScript™ 中，指定和比較運算子之間並沒有任何混淆之處，因為指定運算子 (=) 與比較運算子 (==) 是不同的。

呼叫 Execute 陳述式的內容，會決定在要執行之程式碼中可使用的物件和變數。屬於此有效範圍內的物件和變數都可在 Execute 陳述式執行之程式碼中使用。不過，重要的是，如果您執行的程式碼會建立程序，則這個新程序並不會繼承 Execute 陳述式所在之程序的有效範圍。

就如同其他程序一般，新程序的有效範圍是全域性的，而且它會繼承全域範圍中的所有事物。但與其他程序不同的是，它的內容並不是全域範圍，所以它只能在執行 Execute 陳述式的程序中執行。然而，如果在程序外部 (亦即，在全域範圍中) 叫用同一個 Execute 陳述式，它不僅會繼承全域範圍中的所有事物，而且還可從任何位置來呼叫它，因為它的內容是全域性的。下面的範例說明了這種行為︰

Dim X   '宣告全域性變數 X。
X = "Global"   '指定一值至全域性變數 X。
Sub Proc1   ' 宣告程序。
   Dim X   '宣告區域性變數 X。
   X = "Local"   '指定一值至區域性變數 X。
            '在這裡 Execute 陳述式會建立一個
            '程序 (呼叫後會列印 X 的值)。
            '由於 Proc2 繼承所有全域性有效範圍中的元素，
            '所以會列印全域性變數 X 的值。
   Execute "Sub Proc2: Print X: End Sub"
   Print Eval("X")   '列印區域性變數 X。
   Proc2   '在 Proc1 的有效範圍中呼叫 Proc2。
End Sub
Proc2   '由於 Proc2 在 Proc1 以外無法使用，
        '所以此行會造成錯誤發生。
Proc1   ' 呼叫Proc1。
   Execute "Sub Proc2: Print X: End Sub"
Proc2   '由於 Proc2 目前全域均可使用，
        '所以此次呼叫會成功。

下面的範例說明如何改寫 Execute 陳述式，讓您不必將整個程序包圍在引號間︰

S = "Sub Proc2" & vbCrLf
S = S & "   Print X" & vbCrLf
S = S & "End Sub"
Execute S

基本條件

版本 1

請參閱

Eval 函數 | ExecuteGlobal 陳述式


ExecuteGlobal 陳述式

在Script 的全域命名空間中執行一到多個陳述式。

ExecuteGlobal statement

所需的statement 引數是一個字串運算式，內含執行時要用的一或多個陳述式。如果要在這個statement 引數中包含多個陳述式，請使用冒號或內嵌式分行符號來分隔它們。

附註

在VBScript 中， x = y 有兩種解釋。當成指派陳述式解釋時，y 的值指派到 x。第2種解釋是當成測試的運算式，此時如果x 和 y 的值相同，結果為 True；否則結果為False。ExecuteGlobal 陳述式一律使用第一種解釋。而Eval 方法一律使用第二種解釋。

備註 在 Microsoft® JScript™中，因為指派運算子(=)與比較運算子不同，所以指派陳述式與比較陳述式兩者之間並不會搞混。

所有用ExecuteGlobal 的陳述式都會在script 的全域命名空間中執行。這使得程式碼可以加到程式中讓任何一個程序來存取。例如，VBScript 類別（Class）的陳述式可以在執行期執行，也因此其功能可以建立這個類別新的個體執行。

在執行期增加程序或類別很有用，但也可能覆蓋過已有的全域變數和功能。因為這會造成極大的程式問題，所以在使用ExecuteGlobal 陳述式時必須特別注意。如果您不需要存取到一個程序外的變數或功能，請使用Execute 陳述式。這個陳述式只會影響呼叫函數的命名空間。

以下範例說明ExecuteGlobal 陳述式的用法：

Dim X         '宣告全域性變數 X。
X = "Global"      '指定一值至全域性變數 X。
Sub Proc1   '宣告程序。
  Dim X      '宣告區域性變數 X。
  X = "Local"   '指定一值至區域性變數 X。
         '在這裡 Execute 陳述式會建立一個
         '程序 (呼叫後會列印 X 的值)。
         '由於 Proc2 繼承所有全域性有效範圍中的元素，
         '所以會列印全域性變數 X 的值。
  ExecuteGlobal "Sub Proc2: Print X: End Sub"
  Print Eval("X")   '列印區域性變數 X。
  Proc2      '在 Proc1 的有效範圍中呼叫 Proc2。
         ' in "Global" being printed.
End Sub
Proc2         '由於 Proc2 在 Proc1 以外無法使用，
         '所以此行會造成錯誤發生。
Proc1         ' 呼叫Proc1。
  Execute "Sub Proc2: Print X: End Sub"
Proc2         '由於 Proc2 目前全域均可使用，
         '所以此次呼叫會成功。

以下範例顯示 ExecuteGlobal 陳述式會再寫一次，這樣您就不用把這整個程序包含在括號裡了：

S = "Sub Proc2" & vbCrLf
S = S & "  Print X" & vbCrLf
S = S & "End Sub"
ExecuteGlobal S

基本條件

版本 1


Exit 陳述式

離開 Do...Loop、For...Next、Function 或 Sub 程式碼區塊。

Exit Do
Exit For
Exit Function
Exit Property
Exit Sub

Exit 陳述式的語法有以下幾種形式：

陳述式 | 說明
Exit Do | 用來離開 Do...Loop 陳述式，只能使用在 Do...Loop 陳述式中。Exit Do 會將控制權轉移到 Loop 之後的陳述式。如果 Exit Do 使用在巢狀的 Do...Loop 陳述式中，則 Exit Do 會將控制權轉移到上一層 Exit Do 所在位置的迴圈。
Exit For | 用來離開 For 迴圈，只能使用在 For...Next 或 For Each...Next 迴圈中。Exit For 會將控制權轉移到 Next 之後的陳述式。如果 Exit For 使用在巢狀的 For 迴圈中，則 Exit For 會將控制權轉移到上一層 Exit For 所在位置的迴圈。
Exit Function | 立即離開 Function 程序，程式會從呼叫 Function 陳述式之後的陳述式繼續執行。
Exit Property | 立即離開 Property 程序。程式會從呼叫 Property 程序的陳述式之後的陳述式繼續執行。
Exit Sub | 立即離開 Sub 程序，程式會從呼叫 Sub 程序的陳述式之後的陳述式繼續執行。

以下範例說明了 Exit 陳述式的用法：

 Sub RandomLoop
   Dim I, MyNum
   Do   '設定無限迴圈。
      For I = 1 To 1000   '循環 1000 次。
         MyNum = Int(Rnd * 100)   '產生亂數。
         Select Case MyNum   ' 評估亂數值。
            Case 17: MsgBox "Case 17"
               Exit For   '若為 17，離開 For...Next。
            Case 29: MsgBox "Case 29"
               Exit Do   '若為 29，離開 Do...Loop。
            Case 54: MsgBox "Case 54"
               Exit Sub   '若為 54，離開 Sub 程序。
            End Select
      Next
   Loop
End Sub

基本條件

版本 1

請參閱

Do...Loop 陳述式 | For Each...Next 陳述式 | For...Next 陳述式 | Function 陳述式 | Sub 陳述式


For Each...Next 陳述式

針對一個陣列或集合物件中的所有元素，重複執行一段陳述式。

For Each element In group
   [statements]
   [Exit For]
   [statements]
Next [element]

引數

element
用來表示集合物件或陣列中所有元素的變數。對於集合物件，element 可以是一個 Variant 變數、一般物件變數、或特定的 Automation 物件變數。對於陣列而言，element 只能是一個 Variant 變數。
group
物件集合或陣列的名稱。
statements
在 group 裏每個項目所執行的一或多個陳述式。

附註

如果 group 中至少有一個元素，則 For Each 區塊就會進入執行。一旦進入迴圈，便會先針對 group 群組中第一個元素，執行迴圈中的所有陳述式。如果 group 群組中還有其它的元素，則會針對其餘的元素執行迴圈中的陳述式，當 group 群組中的所有元素都執行完了，便會離開迴圈，然後從 Next 陳述式之後的指令行繼續執行。

Exit For 只使用在 For Each...Next 或 For...Next 控制結構內，當做另一個離開迴圈的方式；而且在迴圈中可以放置任何個數的 Exit For 陳述式。Exit For 通常與條件式 (例如 If...Then) 共同使用，並會將控制權轉移到 Next 之後的陳述式。

您可以將一個 For Each...Next 迴圈放置在另一個 For Each...Next 之中來造成巢狀式迴圈，但是每個迴圈的 element 必須是唯一的。

備註 如果您省略 Next 陳述式中的 element，仍可以執行迴圈，但如果 Next 陳述式比它相對應的 For 陳述式先執行，則會產生錯誤。

以下範例說明了 For Each...Next 陳述式的用法：

Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

基本條件

版本 2

請參閱

Do...Loop 陳述式 | Exit 陳述式 | For...Next 陳述式 | While...Wend 陳述式


For...Next 陳述式

以特定次數來重複執行一段陳述式。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

引數

counter
此為用做迴圈計數器的數值變數，這個變數不能是一個陣列元素，也不能是一個使用者自定形態元素。
start
counter 的初始值。
end
counter 的終值。
step
counter 每次改變的間隔值，如果沒有指定，則 step 的預設值為 1。
statements
放在 For 和 Next 之間的一行或多行指令，將重覆執行特定次數。

附註

step 引數可以是正數或負數，step 引數值會決定迴圈的執行情形，如下所述：

值 | 迴圈會執行，如果
正數或 0 | counter <= end
負數 | counter >= end

當所有迴圈中的陳述式都執行後，step 的值會加到 counter 中。此時，迴圈中的陳述式可能會再執行 (根據計數器的正負值與終值的關係)，也可能是結束迴圈，然後從 Next 陳述式之後的指令行繼續執行。

備註 在迴圈中改變 counter 的值，將會使您的程式碼不易閱讀與除錯。

Exit For 只使用在 For Each...Next 或 For...Next 控制結構內，當做另一個離開迴圈的方式；而且在 For...Next 迴圈中可以放置任何個數的 Exit For 陳述式。Exit For 通常與條件式 (例如 If...Then) 共同使用，並會將控制權轉移到 Next 之後的陳述式。

您可以將一個 For...Next 迴圈放置在另一個 For...Next 迴圈中，以造成巢狀迴圈，不過在每個迴圈中的 counter，要使用不同的變數名稱，例如下方的架構是正確的架構：

For I = 1 To 10
      For J = 1 To 10
            For K = 1 To 10
            . . .
            Next
      Next
Next

基本條件

版本 1

請參閱

Do...Loop 陳述式 | Exit 陳述式 | For Each...Next 陳述式 | While...Wend 陳述式


Function 陳述式

宣告 Function 程序的名稱、引數及程式碼。

[Public [Default] | Private] Function name [(arglist)]
   [statements]
   [name = expression]
   [Exit Function]
   [statements]
   [name = expression]
End Function

引數

Public
表示任何模組中的任何程序都可呼叫這個 Function 程序。
Default
只和 Class 區塊中的 Public 關鍵字一起使用，表示 Function 程序是物件類別的預設方法。但是如果在類別中指定了一個以上的 Default 程序，則會發生錯誤。
Private
表示這個 Function 程序只能被在宣告它之模組裏的程序所使用，或是當該函數為類別中的成員時使用，而且只有該類別中的其他程序才能使用 Function 程序。
name
Function 的名稱；要遵循標準變命名規格。
arglist
變數清單，表示呼叫 Function 程序時所傳送的引數。變數之間以逗號隔開。
statements
此 Function 程序所執行一群的陳述式。
expression
Function 的傳回值。

arglist 引數具有下列語法和組成部分：

[ByVal | ByRef] varname[( )]

引數

ByVal
表示以傳值的方式傳遞引數。
ByRef
表示以傳址的方式傳遞引數。
varname
代表引數的變數名稱；遵循標準變數命名規格。

附註

Function 程序若無明確地指定為 Public 或 Private，則預設為 Public。這表示這些 Function 可被您程式碼中其他的程序所使用。但在程序間呼叫 Function，其中的區域變數值將不被保留。

您不可以在其他程序 (例如：Sub 或 Property Get) 裏定義 Function 程序。

Exit Function 陳述式會使 Function 程序立即停止，程式會從呼叫該 Function 程序的下一行陳述式繼續執行。Exit Function 陳述式可在 Function 程序的任何位置出現，且不限次數。

如同 Sub 程序，Function 程序是可接受引數、執行一串陳述式並且改變其引數值的獨立程序。然而，與 Sub 程序不同的是，當您想運用 Function 的傳回值時，Function 程序可以放在運算式的右方，就如同使用內建函數一樣，例如 Sqr、Cos 或 Chr。

運算式中只要使用函數名稱，後接以括號包圍的引數列，就可以呼叫 Function 程序。請參閱 Call 陳述式以取得有關如何呼叫 Function 程序的特定資訊。

注意 Function 程序可遞迴，也就是它們可以呼叫自己。然而，遞迴呼叫可能會造成堆疊溢位。

若要從函數中傳回值，則將該值指定給函數名稱即可。這種指定式可出現於程序中的任何位置，且不限次數。如果沒有指定值給 name，則程序會傳回預設值：數值函數會傳回 0，字串函數會傳回零長度字串 ("")。若函數的傳回型態為一物件引用，且 Function 裏沒有指定物件引用給 name (使用 Set)，則函數會傳回 Nothing。

下列範例表示如何指定傳回值給一個命名為 BinarySearch 的函數。在此範例中，指定 False 給名稱以表示有些值找不到。

Function BinarySearch(. . .)
      . . .
      ' 找不到值，傳回False。
      If lower > upper Then
            BinarySearch = False
            Exit Function
      End If
      . . .
End Function

在 Function 程序中使用的變數分為兩類：在程序中明確宣告的變數，以及沒有明確宣告的變數。在程序中明確宣告的變數 (使用 Dim 或同類字)，一律為程序的區域變數。在程序中有使用到，但並未在程序中宣告的變數也是區域變數，除非此變數已在程序外更高層次中被明確地宣告。

注意 程序可使用不是在該程序中宣告過的變數，但是若在 Script 層次定義過相同名稱的變數，就會發生名稱上的衝突。如果程序裏引用了未宣告的變數，而此變數的名稱和其它程序、常數或變數的名稱相同，則會認定程序是引用 Script 層次的名稱。因此，若要避免此種衝突，請使用 Option Explicit 陳述式來強迫變數的宣告。
注意 VBScript 可能為了內部的效率而重新排列算術運算式。若 Function 程序會改變同一運算式中的變數值，請避免在此狀況下使用。

基本條件

版本 1

請參閱

Call 陳述式 | Dim 陳述式 | Exit 陳述式 | Nothing | Set 陳述式 | Sub 陳述式


If...Then...Else 陳述式

根據某運算式的值來決定要執行哪一部份的陳述式。

If condition Then statements [Else elsestatements ]

或者，您可以使用區塊式語法：

If condition Then
   [statements]
[ElseIf condition-n Then
   [elseifstatements]] . . .
[Else
   [elsestatements]]
End If

引數

condition
一個或多個具有下列兩種型態的運算式：

數值運算式或字串運算式，其運算結果為 True 或 False。如果 condition 為 Null，則 condition 會被當作 False來處理。

以 TypeOf objectname Is objecttype 形式存在的運算式，其中的 objectname 是任何的物件引用，而 objecttype 則是任何有效的物件型態，如果 objectname 是 objecttype 所指定的一種物件型態，則運算式為 True，否則為 False。

statements
一個或多個陳述式，陳述式要以冒號分開；如果 condition 是 True，則執行此部份的陳述式。
condition-n
與 condition 一樣。
elseifstatements
如果對應的 condition-n 為 True，則執行此部份的陳述式。
elsestatements
如果 condition 或 condition-n 陳述式都不為 True 時，則執行此部份的陳述式。

附註

您可以使用單行式 (第一種語法) 來簡化程式碼，但是，區塊式 (第二種語法) 則提供結構化與彈性的功能，而且也較容易閱讀、維護及偵錯。

備註 利用單行語法，同樣可以將多個陳述式做為 If...Then 決策的結果來執行，但是必須將所有陳述式置於同一行並以冒號 (:) 做區隔，如下列陳述式所示：
If A > 10 Then A = A + 1 : B = B + A : C = C + B

當執行區塊式 If (第二種語法) 時，會先測試 condition。如果 condition 為 True，則會執行 Then 之後的陳述式。如果 condition 為 False，則每個 ElseIf 部份的條件式 (如果有的話) 會被依序評估並測試，如果找到某個為 True 的條件式時，則其對應之 Then 部份的陳述式會被執行。如果 ElseIf 條件式都不是 True (或是根本就沒有 ElseIf 子句)，則程式會執行 Else 部份的陳述式。而在執行完 Then 或 Else 之後的陳述式後，會從 End If 之後的陳述式繼續執行。

Else 和 ElseIf 子句都具選擇性。在區塊式 If 中，您可以放置多個 ElseIf 子句，但是都必須在 Else 子句之前。區塊式 If 陳述式也可以是巢狀式；也就是說，在一個 If...Then...Else 陳述式中可以有另一個 If...Then...Else 陳述式。

要決定某個陳述式是否為一個區塊式 If，可以檢查 Then 關鍵字之後是什麼。如果在 Then 同一行之後，還有其它非註解的字串，則此陳述式就是單行式的 If 陳述式。

在區塊式 If 中，If 陳述式必須是第一行指令行，而且必須在最後加上 End If 陳述式。

基本條件

版本 1


On Error 陳述式

啟動或關閉一個錯誤處理常式。

On Error Resume Next
On Error GoTo 0

附註

如果您不在程式碼中使用 On Error Resume Next 陳述式，則當任何執行階段錯誤發生時都會出現錯誤訊息並停止程式碼的執行。然而，實際上的行為則是由執行程式碼的主應用程式來決定的。主應用程式可以選擇以不同的方式處理不同的錯誤。在某些狀況下，錯誤發生時會呼叫 Script 偵錯工具。在另外一些狀況下，當錯誤發生時，可能因為主應用程式沒有通知使用者而沒有任何明顯的動作發生。再次強調，這純粹是主應用程式處理錯誤的方法。

當在某個程序中發生錯誤時，如果在其呼叫堆疊中的任一個程序內有啟動錯誤處理，則該錯誤便不會是重大錯誤。若在某程序中並未處理重大錯誤，而又發生錯誤時，控制權將會依呼叫堆疊的順序上傳，直到有錯誤處理的程序為止，並且在該程序中處理錯誤。如果在呼叫堆疊中沒有包括錯誤處理的程序，則會顯示錯誤訊息並停止執行，或者主應用程式會適當處理該錯誤。

On Error Resume Next 會使程式從接著發生錯誤陳述式之後的陳述式繼續執行。或是從接著含有 On Error Resume Next 陳述式之程序的陳述式繼續執行。這個陳述式可以使程式不管執行階段錯誤而繼續執行下去。然後便可以在程序中自建錯誤處理常式。

當另一個程序被呼叫時，On Error Resume Next 陳述式將會失效，因此如果您希望在每個程序中包含自建錯誤處理常式，則必須在每個程序中執行一次 On Error Resume Next 陳述式。當離開一程序時，錯誤處理的功能將會還原至進入該離開程序前的狀態。

如果您先前使用 On Error Resume Next 啟動錯誤處理，則請使用 On Error GoTo 0 來關閉之。

以下範例說明了 On Error Resume Next 陳述式的用法。

On Error Resume Next
Err.Raise 6   ' 引發溢位錯誤。
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' 清除該錯誤。

基本條件

版本 1

請參閱

Err 物件 | Exit 陳述式


Option Explicit 條件式

Visual Basic Scripting Edition

Option Explicit 陳述式

強迫 Script 中的所有變數都必須明確地宣告。

Option Explicit

附註

Option Explicit 陳述式必出現在 Scrupt 中的任何陳述式之前。

當使用 Option Explicit 陳述式時，必須以 Dim、Private、Public 或 ReDim 陳述式來明確宣告所有的變數。如果試圖使用未宣告的變數名稱，則會發生錯誤。

秘訣 使用 Option Explicit 可避免打錯變數名稱或在有效範圍內相同的變數名稱。

以下範例說明了 Option Explicit 陳述式的用法：

Option Explicit   '強迫明確地宣告變數。
Dim MyVar   ' 宣告變數。
MyInt = 10   '未宣告的變數會產生錯誤。
MyVar = 10   '宣告過的變數便不會產生錯誤。

基本條件

版本 1


Private 條件式

Visual Basic Scripting Edition

Private 陳述式

宣告私用變數並配置記憶體空間。在 Class 區塊中，宣告私用變數。

Private varname[([subscripts])][, varname[([subscripts])]] . . .

引數

varname
變數的名稱，要遵循標準的變數命名規格。
subscripts
陣列變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法：

upper [, upper] . . .

陣列的下限永遠為零。

附註

Private陳述式所宣告的變數只適用於宣告它們的 Script 中。

在使用引用物件的變數之前，必須以 Set 陳述式來指定一個已存在的物件。除非已指定物件，否則已宣告的物件變數值會被初始化為 Empty。

您也可使用 Private 陳述式加上空白括號來宣告動態陣列。宣告之後，在程序裏使用 ReDim 陳述式來定義陣列的維數和元素。若陣列變數的大小已由 Private、Public 或 Dim 陳述式所明確指定，則重新宣告其維數會發生錯誤。

備註 當在程序裏使用 Private 陳述式時，通常會將 Private 陳述式放在程序的開頭。

以下範例說明了 Private 陳述式的用法。

Private MyNumber   ' Private Variant 變數。
Private MyArray(9)   ' Private array 變數。
   ' 多個Variant 變數的Private 宣告。
Private MyNumber, MyVar, YourNumber

基本條件

版本 1

請參閱

Dim 陳述式 | Public 陳述式 | ReDim 陳述式 | Set 陳述式


Property Get 陳述式

在 Class 區塊中，宣告組成 Property 程序主體的名稱、引數和程式碼，這個程序會取得 (或傳回) 一個屬性的值。

[Public [Default] | Private] Property Get name [(arglist)]
   [statements]
   [[Set] name = expression]
   [Exit Property]
   [statements]
   [[Set] name = expression]
End Property

引數

Public
表示 Property Get 程序可被所有 Script 中的其他程序存取。
Default
只能使用 Public 關鍵字來表示，在 Property Get 程序中所定義的屬性，就是物件類別的預設屬性。
Private
表示 Property Get 程序只能被所宣告之 Class 區塊中的其他程序存取。
name
這是 Property Get 程序的名稱；它必須遵照標準的變數命名規格，不過這個名稱可與同一個 Class 區塊中 Property Let 或 Property Set 程序的名稱相同。
arglist
代表引數的變數清單，當呼叫它的時候，會將它傳送到 Property Get 程序。若有多個引數，就必須以逗號分隔開來。在 Property Get 程序中每一個引數的名稱，都必須與 Property Let 程序 (如果存在的話) 中對應引數的名稱相同。
statements
在 Property Get 程序的主體內所要執行的任何一組陳述式。
Set
當您要將一物件指定為 Property Get 程序的傳回值時使用的關鍵字。
expression
Property Get 程序的傳回值。

附註

如果沒有明確地指定使用 Public或 Private，根據預設，Property Get 程序是公用的，也就是說，在您 Script 中的其他所有程序都可以看到它們。在程序的呼叫之間，並未保留 Property Get 程序中區域變數的值。

您無法在其他任何程序 (亦即，Function 或 Property Let) 內定義 Property Get 程序 。

Exit Property 陳述式會導致從 Property Get 程序中立即退出。程式仍會繼續執行接在呼叫 Property Get 程序之陳述式之後的陳述式。在 Property Get 程序中的任何位置，都可出現任意數目的 Exit Property 陳述式。

就像 Sub 和 Property Let 程序一樣，Property Get 程序也是一個單獨的程序，它能取得引數、執行一連串的陳述式，以及變更其引數的值。但是，它與 Sub 和 Property Let 程序不同的是，當您要傳回一個屬性值時，可以在運算式右邊使用 Property Get 程序，方法與使用 Function 或屬性名稱的方法相同。

基本條件

版本 5

請參閱

Class 陳述式 | Dim 陳述式 | Exit 陳述式 | Function 陳述式 | Private 陳述式 | Property Let 陳述式 | Property Set 陳述式 | Public 陳述式 | Set 陳述式 | Sub 陳述式


Property Let 屬性

Visual Basic Scripting Edition

Property Let 陳述式

在 Class 區塊中，宣告組成 Property 程序主體的名稱、引數和程式碼，這個程序會指定 (或設定) 一個屬性的值。

[Public | Private] Property Let name ([arglist,] value)
   [statements]
   [Exit Property]
   [statements]
End Property

引數

Public
表示 Property Let 程序可被所有 Script 中的其他程序存取。
Private
表示 Property Let 程序只能被所宣告之 Class 區塊中的其他程序存取。
name
這是 Property Let 程序的名稱；它必須遵照標準的變數命名規格，不過這個名稱可與同一個 Class 區塊中 Property Get 或 Property Set 程序的名稱相同。
arglist
代表引數的變數清單，當呼叫它的時候，會將它傳送到 Property Let 程序。若有多個引數，就必須以逗號分隔開來。在 Property Let 程序中每一個引數的名稱，必須與 Property Get 程序中對應引數的名稱相同。此外，Property Let 程序的引數個數通常會比其對應的 Property Get 程序多一個。這個引數就是要指定給屬性的值。
value
一個變數，包含要指定給屬性的值。當呼叫程序的時候，這個引數會出現在呼叫運算式的右邊。
statements
在 Property Let 程序的主體內所要執行的任何一組陳述式。

附註

如果沒有明確地指定使用 Public 或 Private，根據預設，Property Let 程序就是公用的，也就是說，您 Script 中的其他所有程序都可以看到它們。在程序的呼叫之間，並未保留 Property Let 程序中區域變數的值。

您無法在其他任何程序 (亦即，Function 或 Property Get) 內定義 Property Let 程序。

Exit Property 陳述式會導致從 Property Let 程序中立即退出。程式仍會繼續執行接在呼叫 Property Let 程序之陳述式之後的陳述式。在 Property Let 程序中的任何位置，都可出現任意數目的 Exit Property 陳述式。

備註 每一個 Property Let 陳述式必須至少定義程序中的一個引數。叫用 Property Let 陳述式所定義的程序時，該引數 (或是最後一個引數，如果引數超過一個以上的話) 會包含要指定給屬性的實際值。而且這個引數會當作上述語法中的 value。

就像 Function 和 Property Get 程序一樣，Property Let 程序也是一個單獨的程序，它能取得引數、執行一連串的陳述式，以及變更其引數的值。但是，它與 Function 和 Property Get 程序不同的是，前兩者都會傳回一個值，而您卻只能在屬性指定運算式左邊使用 Property Let 程序。

基本條件

版本 5

請參閱

Class 陳述式 | Dim 陳述式 | Exit 陳述式 | Function 陳述式 | Private 陳述式 | Property Get 陳述式 | Property Set 陳述式 | Public 陳述式 | Set 陳述式 | Sub 陳述式


Property Set 陳述式

在 Class 區塊中，宣告組成 Property 程序主體的名稱、引數和程式碼，這個程序會設定一個物件的引用。

[Public | Private] Property Set name([arglist,] reference)
   [statements]
   [Exit Property]
   [statements]
End Property

引數

Public
表示 Property Set 程序可被所有 Script 中的其他程序存取。
Private
表示 Property Set 程序只能被所宣告之 Class 區塊中的其他程序存取。
name
這是 Property Set 程序的名稱；它必須遵照標準的變數命名規格，不過這個名稱可與同一個 Class 區塊中 Property Get 或 Property Let 程序的名稱相同。
arglist
代表引數的變數清單，當呼叫它的時候，會將它傳送到 Property Set 程序。若有多個引數，就必須以逗號分隔開來。此外，Property Set 程序的引數個數通常會比其對應的 Property Get 程序多一個。這個引數就是要指定給屬性的物件。
reference
一個變數，包含用於物件引用指定式右邊的物件引用。
statements
在 Property Set 程序的主體內所要執行的任何一組陳述式。

附註

如果沒有明確地指定使用 Public 或 Private，根據預設，Property Set 程序是公用的，也就是說，您 Script 中的其他所有程序都可以看到它們。在程序的呼叫之間，並未保留 Property Set 程序中區域變數的值。

您無法在其他任何程序 (亦即，Function 或 Property Get) 內定義 Property Set 程序。

Exit Property 陳述式會導致從 Property Set 程序中立即退出。程式仍會繼續執行接在呼叫 Property Set 程序之陳述式之後的陳述式。在 Property Set 程序中的任何位置，都可出現任意數目的 Exit Property 陳述式。

備註 每一個 Property Set 陳述式必須至少定義程序中的一個引數。叫用 Property Set 陳述式所定義的程序時，該引數 (或是最後一個引數，如果引數超過一個以上的話) 會包含要指定給屬性的實際物件引用。而且這個引數會當作前述語法中的 reference。

就像 Function 和 Property Get 程序一樣，Property Set 程序也是一個單獨的程序，它能取得引數、執行一連串的陳述式，以及變更其引數的值。但是，它與 Function 和 Property Get 程序不同的是，前兩者都會傳回一個值，而您卻只能在物件參考指定 (Set 陳述式) 左邊使用 Property Set 程序。

基本條件

版本 5

請參閱

Class 陳述式 | Dim 陳述式 | Exit 陳述式 | Function 陳述式 | Private 陳述式 | Property Get 陳述式 | Property Let 陳述式 | Public 陳述式 | Set 陳述式 | Sub 陳述式


Public 陳述式

宣告公用變數並配置記憶體空間。在 Class 區塊中，宣告私用變數。

Public varname[([subscripts])][, varname[([subscripts])]] . . .

引數

varname
變數的名稱，要遵循標準的變數命名規格。
subscripts
陣列變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法：

upper [, upper] . . .

陣列的下限永遠為零。

附註

Public 陳述式所宣告的變數可以在所有 Script 的程序中使用。

使用該物件變數之前，必須以 Set 陳述式來指定一個已存在的物件。除非已指定物件，否則已宣告的物件變數值會被初始化為 Empty。

您也可使用 Public 陳述式加上空白括號來宣告動態陣列。宣告之後，在程序裏使用 ReDim 陳述式來定義陣列的維數和元素。若陣列變數的大小已由 Private、Public 或 Dim 陳述式所明確指定，則重新宣告其維數，則會發生錯誤。

以下範例說明了 Public 陳述式的用法：

Public MyNumber   '宣告 Public Variant 變數。
Public MyArray(9)   '宣告 Public 陣列變數。
   '宣告多個 Variant 型態的 Public 變數。
Public MyNumber, MyVar, YourNumber

基本條件

版本 1

請參閱

Dim 陳述式 | Private 陳述式 | ReDim 陳述式 | Set 陳述式


Randomize 陳述式

初始化亂數產生器。

Randomize [number]

number 引數可以是任何的數值運算式。

附註

Randomize 使用 number 的值做為新的亂數種子來初始化 Rnd 函數的亂數產生器。如果省略 number ，則會以作業系統的目前時間來當做新的亂數種子。

如果沒有呼叫 Randomize 來初始化亂數產生器，則 Rnd 函數 (不提供引數) 在第一次被呼叫時會使用系統時間做為亂數種子，之後則使用前次呼叫 Rnd 函數所得的亂數值當做新的亂數種子。

備註 若想得到重覆的亂數序列，可以在呼叫 Randomize 之前先呼叫 Rnd 並且傳入一小於 0 的引數值。光是用相同的 number 呼叫 Randomize 兩次，是不會得到兩次相同的亂數序列的。

以下範例說明了 Randomize 陳述式的用法。

Dim MyValue, Response
Randomize   '初始化亂數產生器。
Do Until Response = vbNo
   MyValue = Int((6 * Rnd) + 1)   '產生介於 1 至 6 之間的亂數。
   MsgBox MyValue
   Response = MsgBox ("Roll again? ", vbYesNo)
Loop

基本條件

版本 1

請參閱

Rnd 函數 | Timer 函數


ReDim 陳述式

宣告動態陣列變數，並在程序層次配置或重新配置儲存空間。

ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . . .

引數

Preserve
當變更現有陣列最後一維的大小時，仍然保有原來資料的關鍵字。
varname
變數的名稱；要遵循標準變數命名規格。
subscripts
陣列變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法：

upper [,upper] . . .

陣列的下限永遠為零。

附註

ReDim 陳述式是用來決定或重新決定動態陣列的大小，且此動態陣列是由 Private、Public 或 Dim 陳述式加上空括號 (沒有維數陣列索引) 所正式宣告的。可以重覆地使用 ReDim 陳述式來改變陣列的元素數目和維數。

如果使用了 Preserve 關鍵字，則只能重新改變陣列最後一維的大小，而不能改變維數的數目。舉例來說，如果陣列只有一維，則可以改變此維的大小，因為它是最後且唯一的一維。然而，如果陣列有二維以上，則只能改變最後一維的大小，且仍然可以保留陣列的內容。

以下範例會告訴您如何增加動態陣列最後維數的大小，而不致於清除該陣列中現有的資料。

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
注意 如果將陣列變小，被消除之元素裏的資料則會消失。

當變數初始化時，數值變數會初始為 0，字串變數會初始為零長度字串 ("")。引用物件的變數則必須先以 Set 陳述式指定一個已存在的物件後，才可使用。已宣告的物件變數在被指定物件之前，值是 Nothing。

基本條件

版本 1

請參閱

Dim 陳述式 | Set 陳述式


Rem 陳述式

在程式中加入解釋性的附註。

Rem comment

-或-

' comment

comment 引數是任何您想加入的註解文字。在 Rem 關鍵字和 comment之間必須有空格。

附註

如上述「語法」一節中所示，可以使用單引號 (') 來替代 Rem 關鍵字。如果 Rem 關鍵字接在某行的陳述式之後，則必須和該陳述式以冒號 (:) 隔開。不過，若使用單引號，則接在陳述式之後時就不必使用冒號隔開。

以下範例說明了 Rem 陳述式的用法。

Dim MyStr1, MyStr2
MyStr1 = "Hello" : Rem 接在陳述式之後的註解必須用冒號隔開。
MyStr2 = "Goodbye" '這也是註解，但不需要冒號。
Rem 獨立一行不包括其他程式碼的註解，不需要冒號。

基本條件

版本 1


Select Case 陳述式

根據某運算式的值，來決定要執行的陳述式。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

引數

testexpression
此為任何的數值運算式或字串運算式。
expressionlist-n
如果有 Case 出現，則為必要項。一個或多個運算式 (以逗號分隔) 的清單。
statements-n
如果 testexpression 符合 expressionlist-n 的任何部分，則會執行的陳述式。
elsestatements-n
如果 testexpression 不合乎任何 Case 子句，則會執行這部份的陳述式。

附註

如果 testexpression 合乎某個 Case expressionlist 運算式，則在 Case 子句之後的陳述式會被執行，直到下一個 Case 子句，如果是最後一個子句，則會執行到 End Select。然後控制權會轉移到 End Select 之後的陳述式。如果有 testexpression 符合一個以上之 Case 子句中的 expressionlist 運算式，則只有最先符合的那一段中之陳述式會被執行。

如果 testexpression 和所有的 Case 選擇中的 expressionlist 都不相符時，Case Else 子句中指定的 elsestatements 便會被執行，雖然 Case Else 陳述式並不是必要項，但是在您的 Select Case 區塊中，最好還是加上它來處理未預見的 testexpression 值。如果沒有 Case expressionlist 符合 testexpression，而且也沒有 Case Else 陳述式，則程式會從 End Select 之後的陳述式繼續執行。

Select Case 陳述式也可以是巢狀，但每個 Select Case 陳述式必須要有相對的 End Select 陳述式。

以下範例說明了 Select Case 陳述式的用法：

Dim Color, MyVar
Sub ChangeBackground (Color)
   MyVar = lcase (Color)
   Select Case MyVar
      Case "red"     document.bgColor = "red"
      Case "green"   document.bgColor = "green"
      Case "blue"    document.bgColor = "blue"
      Case Else      MsgBox "pick another color"
   End Select
End Sub

基本條件

版本 1

請參閱

If...Then...Else 陳述式


Set 陳述式

指定物件引用到一個變數或屬性，或將程序引用與事件連結在一起。

Set objectvar = {objectexpression | New classname | Nothing}

-或-

Set object.eventname = GetRef(procname)

參數

objectvar
必要項。變數或屬性的名稱，遵循標準的變數命名規格。
objectexpression
選擇項。包含物件名稱的運算式，對同一種物件型別宣告的另一個變數，或是能傳回同一種物件型別的函數或方法。
New
用來建立新類別的關鍵字。如果 objectvar 內含一個物件引用，那麼當指派新的物件引用時，原有的引用就會釋放。關鍵字New 只能做為建立新類別之用。
classname
選擇項。所建的新類別名稱。要定義類別及其成員，請使用Class 陳述式。
Nothing
選擇項。截斷objectvar 與任何指定物件或類別的連結。當不再有其他變數引用物件時，指派objectvar 到Nothing 會釋放所有之前連結到引用物件的系統或記憶體資源。
object
必要項。 跟event連結在一起的物件名稱。
event
必要項。與函數繫結在一起的事件名稱。
procname
必要項。連結到event的字串，內含Sub 或 Function 名稱。

附註

objectvar 的物件型別必須與指派給它的物件型別一致才會有效。

Dim， Private，Public，或ReDim 陳述式只宣告引用物件的變數。實際上引用的並不是物件，除非使用 Set 陳述式特別指定一個物件。

一般而言，當使用Set 來指定物件引用到變數的同時，並沒有為變數建立一個複本，而是建立了一個物件引用。同一個物件可以被不只一個物件變數引用。 因為這些變數是物件的引用（非物件的複本），所以物件的任何改變，都會反映在所有引用物件的變數中。

Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName  & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

使用關鍵字New 讓您在建立類別的同時，指派這個類別到一個物件引用變數。類別指派到的變數，必須是已經宣告過(或相當於) Dim 陳述式的變數。

想知道如何使用Set 把程序與事件連結在一起，請參閱有關 GetRef 函數的參考文件。

基本條件

版本 1

請參閱

= 運算子 | Dim 陳述式 | GetRef 函數 | ReDim 陳述式


Sub 陳述式

宣告 Sub 程序的名稱、引數和其中的程式碼。

[Public [Default] | Private] Sub name [(arglist)]
   [statements]
   [Exit Sub]
   [statements]
End Sub

引數

Public
表示任何模組中的任何程序都可呼叫這個 Sub 程序。
Default
只和 Class 區塊中的 Public 關鍵字一起使用，表示 Sub 程序是物件類別的預設方法。但是如果您在類別中指定了一個以上的 Default 程序，則會發生錯誤。
Private
表示此 Sub 程序只能被在宣告它之模組裏的程序所使用。
name
此 Sub 的名稱；要遵循標準變數命名規格。
arglist
代表呼叫 Sub 程序時，做為引數傳入程序的變數清單。逗號會將多個變數隔開。
statements
Sub 程序所要執行的陳述式。

arglist 引數的語法和組成部分如下：

[ByVal | ByRef] varname[( )]

引數

ByVal
表示以傳值的方式傳遞引數。
ByRef
表示以傳址的方式傳遞引數。
varname
代表引數的變數名稱；要遵循標準變數命名規格。

附註

Sub 程序若無明確指定為 Public 或 Private，則會預設為公用程序，這表示這些程序可用於 Script 的其他程序中。但在程序間呼叫 Sub 程序時，其中的區域變數值將不被保留。

您不可以在其他程序 (例如：Function 或 Property Get) 中定義 Sub 程序。

Exit Sub 陳述式會使 Sub 程序立即停止，程式會從呼叫該 Sub 程序的下一行陳述式繼續執行。Exit Sub 陳述式可在 Sub 程序的任何位置出現，且不限次數。

就像 Function 程序，Sub 程序是獨立的程序，可以接受引數，執行一串陳述式，並改變其引數的值。然而，不像 Function 程序會傳回值，Sub 程序無法在運算式裏使用。

只要使用程序名稱後接引數列便可以呼叫 Sub 程序。請參閱 Call 陳述式以得知關於呼叫 Sub 程序的特定資訊。

注意 Sub 程序可遞迴，也就是可以呼叫自己來執行任務。然而，遞迴呼叫可能會造成堆疊溢位。

在 Sub 程序中使用的變數分為兩類：在程序中明確宣告的變數，以及沒有明確宣告的變數。在程序中明確宣告的變數 (使用 Dim 或同類字)，一律為程序的區域變數。在程序中有使用到，但並未在程序中宣告的變數也是區域變數，除非此變數已在程序外更高層次中被明確地宣告。

注意 程序可使用不是在該程序中明確宣告過的變數，但是若在 Script 層次定義過相同名稱的變數，就會發生名稱上的衝突。如果程序裏引用了未宣告的變數，而此變數的名稱和其它程序、常數或變數的名稱相同，則會認定程序是引用 Script 層次的名稱。若要避免這種衝突，請使用 Option Explicit 陳述式來強制變數的明確宣告。

基本條件

版本 1

請參閱

Call 陳述式 | Dim 陳述式 | Exit 陳述式 | Function 陳述式


While...Wend 陳述式

只要指定的條件式為 True ，則會重複執行一串陳述式。

While condition
   版本 [statements]
Wend

引數

condition
數值運算式或字串運算式，其運算結果為 True 或是 False。如果 condition 為 Null，則 condition 會被當作 False 來處理。
statements
當 condition 等於 True 時，重複執行一或多段的陳述式。

附註

如果 condition 為 True，則所有 statements 內的陳述式都會執行，一直執行到 Wend 陳述式。然後再回到 While 陳述式，並再一次檢查 condition 條件式，如果 condition 條件式還是為 True，則重複此步驟；如果條件式不為 True，則程式會從 Wend 陳述式之後的指令行繼續執行。

While...Wend 迴圈也可以是多層的巢狀結構，每個 Wend 都對應到最近的 While 陳述式。

注意 Do...Loop 陳述式提供一種更結構化與彈性的方法來執行迴圈。

以下範例說明了 While...Wend 陳述式的用法：

Dim Counter
Counter = 0                ' 初始化變數。
While Counter < 20         ' 測試 Counter 的值。
   Counter = Counter + 1   ' 將 Counter 的值遞增。
   Alert Counter
Wend                       ' 當 Counter > 19 時結束 While 迴圈。

基本條件

版本 1

請參閱

Do...Loop 陳述式


With 陳述式 (VBScript)

Visual Basic Scripting Edition

With 陳述式

在單一物件上執行一連串的陳述式。

With object
   statements
End With

引數

object
必要項。物件或會傳回物件之函數的名稱。
statements
必要項。在 object 上執行一或多個陳述式。

附註

With 陳述式能讓您在指定的物件上執行一連串的陳述式，而不需要重新確認物件的名稱。例如，若要變更單一物件上各種不同的屬性，請將屬性指定陳述式放在 With 控制結構內，這樣一來就能引用一次該物件，而不是使用每一個屬性指定來引用。下面的範例說明 With 陳述式的用法，以便將一些數值指定到同一個物件的多個屬性。

With MyLabel
   .Height = 2000
   .Width = 2000
   .Caption = "This is MyLabel"
End With

雖然屬性操作是 With 功能重要的一部分，但它卻不是唯一的使用方式。任何合法的程式碼都可在 With 區塊中使用。

備註 一旦輸入 With 區塊之後，就不能再變更 object 了。因此，您無法使用一個單一的 With 陳述式來影響各種不同的物件。

若要巢狀化 With 陳述式，只要將某個 With 區塊放在另一個之內即可。但是，由於外部 With 區塊的成員乃是格式化在內部 With 區塊之內，所以您必須在內部 With 區塊中提供一個完全合格的物件參考到外部 With 區塊中某個物件的任何成員。

重要請不要跳入或跳離 With 區塊。如果執行了 With 區塊中的陳述式，但是卻沒有執行 With 或 End With 陳述式的話，可能會產生錯誤或是無法預期的行為。

基本條件

版本 1

請參閱

Set 陳述式


Dictionary 物件

儲存資料索引鍵與項目對 (pair) 的物件。

附註

Dictionary 物件相當於 PERL 中的陣列。項目可以是任何形式的資料，並且儲存在陣列中。每個項目會對應一個唯一的索引鍵。索引鍵會用來擷取個別的項目，通常是一個整數或字串，不過也可以是陣列之外的任何型態。

下面程式碼說明建立 Dictionary 物件的方式：

[JScript]
var y = new ActiveXObject("Scripting.Dictionary");
y.add ("a", "test");
if (y.Exists("a"))
   document.write("true");
...
[VBScript]
Dim d   ' 新增一個變數。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 新增索引件與項目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...

方法

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法

屬性

Count 屬性 | Item 屬性 | Key 屬性

請參閱

FileSystemObject 物件 | TextStream 物件


Count 屬性

傳回集合物件或 Dictionary 物件中的項目個數。屬於唯讀性質。

object.Count

object 一律為「適用於」清單中的其中一個項目名稱。

附註

下面程式碼說明 Count 屬性的用法：

[JScript]
function CountDemo()
{
   var a, d, i, s;                 // 建立一些變數。
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add ("a", "Athens");          // 新增索引鍵與項目。
   d.Add ("b", "Belgrade");
   d.Add ("c", "Cairo");
   a = (new VBArray(d.Keys()));    // 取出索引鍵。
   s = "";
   for (i = 0; i < d.Count; i++)   // 反覆使用 dictionary。
   {
      s += a.getItem(i) + " - " + d(a.getItem(i)) + "<br>";
   }
   return(s);                      // 傳回結果。
}
[VBScript]
Function ShowKeys
   Dim a, d, i, s   ' 建立一些變數。
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 新增索引鍵與項目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   a = d.Keys   ' 取出索引鍵。
   For i = 0 To d.Count -1 ' 反覆使用陣列。
      s = s & a(i) & "<BR>" ' 建立傳回字串。
   Next
   ShowKeys = s
End Function

請參閱

CompareMode 屬性 | Item 屬性 | Key 屬性

適用於：Dictionary 物件 | Drives 集合物件 | Files 集合物件 | Folders 集合物件


Item 屬性 (FileSystemObject)

Scripting 執行階段程式庫

Item 屬性

在 Dictionary 物件中設定或傳回指定索引鍵的一個項目。對於集合物件則根據指定的索引鍵傳回一個項目。屬於讀 / 寫性質。

object.Item(key)[ = newitem]

Item 屬性具有下列幾個部分：

組成部分 | 說明
object | 必要項。一律是集合物件或 Dictionary 物件的名稱。
key | 必要項。與將要擷取或新增的項目相關的索引鍵。
newitem | 選擇項。只用於 Dictionary 物件；不適用於集合物件。如果提供的話，newitem 就是與指定的 key 相關的新值。

附註

如果在變更項目時找不到 key 的話，會為指定的 newitem 建立新的 key。如果在試圖傳回現有的項目時找不到 key 的話，則會建立新的 key，而它對應的項目會留空。

下面的範例說明 Item 屬性的用法：

[JScript]
function DicTest(keyword)
{
   var a, d;
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
   a = d.Item(keyword);
   return(a);
}
[VBScript]
Function ItemDemo
   Dim d   ' Create some variables.
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' Add some keys and items.
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   ItemDemo = d.Item("c")   ' Get the item.
End Function

請參閱

CompareMode 屬性 | Count 屬性 | Key 屬性

適用於：Dictionary 物件 | Drives 集合物件 | Files 集合物件 | Folders 集合物件


Key 屬性

在 Dictionary 物件中設定一個索引鍵。

object.Key(key) = newkey

引數

object
必要項。一律是 Dictionary 物件的名稱。
key
必要項。要變更的 Key 值。
newkey
必要項。要取代指定 key 的新值。

附註

如果在變更 key 時找不到 key 的話，會建立一個新的 key，而它相關的項目會留空。

下面的範例說明 Key 屬性的用法：

[JScript]
var d;
d = new ActiveXObject("Scripting.Dictionary");

function AddStuff()
{
   var a;
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
}

function ChangeKey(oldkey, newkey)
{
   var s;
   d.Key("c") = "Ca";
   s = "Key " + oldkey + " changed to " + newkey;
   return(s);
}
[VBScript]
Function DicDemo
   Dim d   ' Create some variables.
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' Add some keys and items.
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   d.Key("c") = "d"   ' Set key for "c" to "d".
   DicDemo = d.Item("d")   ' Return associate item.
End Function

請參閱

CompareMode 屬性 | Count 屬性 | Item 屬性

適用於：Dictionary 物件


Add 方法 (Dictionary)

在 Dictionary 物件中增加一個索引鍵和項目對。

object.Add (key, item)

引數

object
必要項。一律是 Dictionary 物件的名稱。
key
必要項。與要加入的 item 相關的 key。
item
必要項。與要加入的 key 相關的 item。

附註

如果 key 已經存在的話，將會出現錯誤。

下面的範例說明 Add 方法的用法。

[JScript]var d;
d = new ActiveXObject("Scripting.Dictionary");

d.Add("a", "Athens");

d.Add("b", "Belgrade");

d.Add("c", "Cairo");
[VBScript]
Dim d   ' Create a variable.
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 新增索引鍵和項目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"

請參閱

Add 方法 (Folders) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll方法

適用於：Dictionary 物件


Exists 方法 (FileSystemObject)

Scripting 執行階段程式庫

Exists 方法

如果指定的索引鍵存在於 Dictionary 物件中，會傳回 true；如果不存在，則傳回 false。

object.Exists(key)

引數

object
必要項。一律是 Dictionary 物件的名稱。
key
必要項。要在 Dictionary 物件中搜尋的索引鍵值。

註解

下面的範例說明 Exists 方法的用法。

[JScript]
function keyExists(k)
{
   var fso, s = "";
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
   if (d.Exists(k))
      s += "Specified key exists.";
   else
      s += "Specified key doesn't exist.";
   return(s);
}
[VBScript]
Function KeyExistsDemo
   Dim d, msg   ' Create some variables.
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 新增索引鍵和項目
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   If d.Exists("c") Then
      msg = "Specified key exists."
   Else
      msg = "Specified key doesn't exist."
   End If
   KeyExistsDemo = msg
End Function

請參閱

Add 方法 (Dictionary) | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法

適用於：Dictionary 物件


Items 方法

傳回一個陣列，其中包含 Dictionary 物件中的所有項目。

object.Items( )

object 一律是 Dictionary 物件的名稱。

附註

下面的程式碼說明 Items 方法的用法：

[JScript]
function ItemsDemo()
{
   var a, d, i, s;                  // 建立一些變數。
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add ("a", "Athens");              // 新增索引鍵與項目。
   d.Add ("b", "Belgrade");
   d.Add ("c", "Cairo");
   a = (new VBArray(d.Items())).toArray();   // 取出項目。
   s = "";
   for (i in a)                  // 反覆使用dictionary。
   {
      s += a[i] + "<br>";
   }
   return(s);                     // 傳回結果
}
[VBScript]
Function DicDemo
   Dim a, d, i, s   ' 建立一些變數
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 新增索引鍵與項目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   a = d.Items   ' 取出項目。
   For i = 0 To d.Count -1 ' 反覆使用陣列。
      s = s & a(i) & "<BR>" ' 建立傳回字串。
   Next
   DicDemo = s
End Function

請參閱

Add 方法 (Dictionary) | Exists 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法

適用於：Dictionary 物件


Keys 方法

傳回一個陣列，其中包含 Dictionary 物件中現存的所有索引鍵。

object.Keys( )

object 一律是 Dictionary 物件的名稱。

附註

下面程式碼說明 Keys 方法的用法：

[JScript]
function KeysDemo()
{
   var a, d, i, s;                  // 建立一些變數。
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add ("a", "Athens");              // 新增索引鍵與項目。
   d.Add ("b", "Belgrade");
   d.Add ("c", "Cairo");
   a = (new VBArray(d.Keys())).toArray();   // 取出索引鍵。
   s = "";
   for (i in a)                  // 反覆使用 dictionary。
   {
      s += a[i] + " - " + d(a[i]) + "<br>";
   }
   return(s);                     // 傳回結果。
}
[VBScript]
Function DicDemo
   Dim a, d, i   ' Create some variables.
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 新增索引鍵與項目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   a = d.Keys   ' 取出索引鍵。
   For i = 0 To d.Count -1 ' 反覆使用陣列
      s = s & a(i) & "<BR>" ' 傳回結果。
   Next
   DicDemo = s
End Function

請參閱

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Remove 方法 | RemoveAll 方法

適用於：Dictionary 物件


Remove 方法 (FileSystemObject)

Scripting 執行階段程式庫

Remove 方法

從 Dictionary 物件中移除一組索引鍵、項目對。

object.Remove(key)

引數

object
必要項。一律是 Dictionary 物件的名稱。
key
必要項。與您想從 Dictionary 物件中移除的索引鍵、項目對相關的索引鍵。

附註

如果指定的索引鍵、項目對不存在的話，將會出現錯誤。

下面的程式碼說明 Remove 方法的用法：

[JScript]
var a, d, i, s;              // 建立一些變數。
d = new ActiveXObject("Scripting.Dictionary");
d.Add ("a", "Athens");       // 新增索引鍵與項目。
d.Add ("b", "Belgrade");
d.Add ("c", "Cairo");
...
d.Remove("b");               // 移除第二對。
[VBScript]
Dim a, d   ' 建立一些變數。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 新增索引鍵與項目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
d.Remove("b")   ' 移除第二對。

請參閱

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | RemoveAll 方法

適用於：Dictionary 物件


RemoveAll 方法

RemoveAll 方法會從 Dictionary 物件中移除所有的索引鍵、項目對。

object.RemoveAll( )

object 一律是 Dictionary 物件的名稱。

附註

下面的程式碼說明 RemoveAll 方法的用法：

[JScript]
var a, d, i;             // 建立一些變數。
d = new ActiveXObject("Scripting.Dictionary");
d.Add ("a", "Athens");   // 加入一些索引鍵與項目。
d.Add ("b", "Belgrade");
d.Add ("c", "Cairo");
...
d.RemoveAll( );       // 清除 dictionary
[VBScript]
Dim a, d, i   ' 建立一些變數。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 加入一些索引鍵與項目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
a = d.RemoveAll   ' 清除 dictionary

請參閱

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法

適用於：Dictionary 物件


FileSystemObject

本節包含

Scripting 執行階段參照
組成 Scripting 執行階段參照的項目清單。
FileSystemObject 基礎概念
FileSystemObject.的基礎概念指南。


FileSystemObject 基本概念

在撰寫 Active Server Pages 的 scripts 時，Windows Script Host 或可以使用 scripting 的其他的應用程式經常會需要在 Web 伺服器上新增、移動、變更、建立或刪除資料夾 (目錄) 以及檔案。也可能需要取得有關資訊或需要處理連接到 Web 伺服器的磁碟機。

Scripting 允許您使用 FileSystemObject (FSO) 物件模型來處理磁碟機、資料夾和檔案。有關該物件模型將會在下面的段落中加以說明：

FileSystemObject 物件模型

FileSystemObject 物件模型可讓您使用一般常用的 object.method 語法，以及為數眾多的屬性、方法和事件來處理資料夾和檔案。

FileSystemObject 物件

FileSystemObject 物件模型中物件與集合的清單。

FileSystemObject 的程式設計

如何利用 FileSystemObject 進行程式設計的說明。

磁碟機和資料夾的處理

說明如何使用 FileSystemObject 來複製與移動資料夾，並取得有關磁碟機與資料夾的資訊。

檔案的處理

說明如何使用 FileSystemObject 來處理檔案。

FileSystemObject 範例程式碼

在 FileSystemObject 物件模型中可以使用的眾多功能的實際範例。


FileSystemObject 物件模型

FileSystemObject (FSO) 物件模型可讓您使用一般常用的 object.method 語法，以及為數眾多的屬性、方法和事件來處理資料夾和檔案。

使用這項以物件為基礎的工具，您可以：

  • 利用 HTML 來建立網頁
  • 利用 Windows Script Host 來建立 Microsoft Windows 的批次檔
  • 利用 Script 控制項為其他程式語言所開發的應用程式提供 Scripting 功能

由於在客戶端使用 FSO 會加重駭客存取客戶端區域檔案系統所造成的安全性問題，所以本文假定使用 FSO 物件模型所建立的 Script，是透過伺服端的 Internet 網頁來執行的。因為使用的是伺服端，所以 Internet Explorer 預設的安全性設定不允許客戶端使用 FileSystemObject 物件。覆蓋這些預設值可能會使本機電腦的檔案系統受到駭客威脅，進而造成檔案系統的整體性完全被破壞，導致資料遺失或更嚴重的後果。

FSO 物件模型讓伺服端的應用程式具有建立、變更、移動和刪除資料夾的能力，或是偵測某些特定資料夾是否存在，如果存在的話，還能偵測出資料夾所在的位置。您也可以找到有關資料夾的資訊，像是資料夾的名稱、建立資料夾或最後一次修改資料夾的日期等等。

FSO 物件模型也簡化了檔案的處理。處理檔案時，主要的重點在於如何將資料以最節省空間和資源，以及最容易存取的格式來儲存。您必須能建立檔案、插入或變更資料，並且輸出 (讀取) 資料。由於將資料儲存在 Access 或 SQL Server 之類的資料庫中，會使您的應用程式大量增加額 外的消耗時間，所以將資料儲存在二進位檔案或文字檔案中可能是最有效率的解決方案。因為您可能不想增加額外的消耗時間，或是您對資料存取的需求並不需要用到功能完整的資料庫所提供的額外功能。

  • l FSO 物件模型包含在 Scripting 型態程式庫 (Scrrun.dll) 中，可支援透過 TextStream 物件來建立和處理文字檔的功能。雖然目前還無法支援建立或處理二進位檔案的功能，但是未來對二進位檔案的支援已在規劃當中。


FileSystemObject 物件

FileSystemObject (FSO) 物件模型包含下列物件和集合物件。

物件 / 集合物件 | 說明
FileSystemObject | 主要物件。其中包含的方法和屬性可讓您建立、刪除與處理磁碟機、資料夾和檔案，並取得相關的資訊。多數與此物件相關的方法和其他 FSO 物件中的方法重覆，這是為了方便起見而提供這些方法。
Drive | 物件。其中包含的方法和屬性可讓您收集連到系統的磁碟機資訊，例如磁碟機的共用名稱和可用空間容量。請注意，「磁碟機」並不一定專指硬碟，也可以是 CD-ROM 光碟機、RAM 磁碟機等等。磁碟機並不一定要實際連到系統上，也可以透過網路以邏輯方式連接。
Drives | 集合物件。提供連到系統的磁碟機清單，包含實體或邏輯磁碟機。Drives 集合物件包含所有的磁碟機，不論其類型為何。抽取式磁碟機不需要插入媒體，就能出現在這個集合物件中。
File | 物件。其中包含的方法和屬性可讓您建立、刪除或移動檔案。也可讓您向系統查詢檔案名稱、路徑和其他各種屬性。
Files | 集合物件。提供某個資料夾內包含的所有檔案的清單。
Folder | 物件。其中包含的方法和屬性可讓您建立、刪除或移動資料夾。也可讓您向系統查詢資料夾名稱、路徑和其他各種屬性。
Folders | 集合物件。提供 Folder 內所有資料夾的清單。
TextStream | 物件。可讓您讀取和寫入文字檔。


FileSystemObject 的程式設計

若要利用 FileSystemObject (FSO) 物件模型來進行程式設計：

  • 使用 CreateObject 方法來建立 FileSystemObject 物件。
  • 對剛建立的物件使用適當的方法。
  • 存取物件的屬性。

FSO 物件模型包含在 Scripting 型態程式庫，它位在 Scrrun.dll 檔案中。因此，您必須將 Scrrun.dll 檔案放在自己的 Web 伺服器上正確的系統目錄中，才能使用 FSO 物件模型。

建立 FileSystemObject 物件

首先，利用 CreateObject 方法建立一個 FileSystemObject 物件。下列程式碼會顯示如何建立 FileSystemObject 的執行個體：

[VBScript]

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
[JScript]
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");

在這兩個範例中，Scripting 是指型態程式庫的名稱，FileSystemObject 則是您要建立的物件名稱。不論您嘗試幾次，都只能建立一個 FileSystemObject 物件的執行個體。

使用適當的方法

其次，使用 FileSystemObject 物件的適當方法。舉例來說，若要建立新的物件，請使用 CreateTextFile 或 CreateFolder (FSO 物件模型不支援建立或刪除磁碟機)。

若要刪除物件，請使用 FileSystemObject 物件的 DeleteFile 和 DeleteFolder 方法，或 File 和 Folder 物件的 Delete 方法。您也可以利用適當的方法，來複製和移動檔案與資料夾。

備註 FileSystemObject 物件模型的某些功能是重複的。例如，您可以利用 FileSystemObject 物件的 CopyFile 方法或 File 物件的 Copy 方法來複製檔案。這兩種方法可達到相同的效果；同時存在的目的是為了提供程式設計的彈性。

存取現有的磁碟機、檔案和資料夾

若要存取現有的磁碟機、檔案或資料夾，請使用 FileSystemObject 物件中適當的「Get」方法：

  • GetDrive
  • GetFolder
  • GetFile

若要存取現有的檔案：

[VBScript]

Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile("c:\test.txt")

[JScript]

var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.GetFile("c:\\test.txt");

請勿對剛建立的物件使用「Get」方法，因為「Create」函數已經將物件代碼傳回該物件。舉例來說，如果您使用 CreateFolder 方法建立一個新的資料夾，請勿使用 GetFolder 方法 來存取它的屬性，例如 Name、Path 和 Size 等等。請為 CreateFolder 函數設定一個變數，為剛建立的資料夾取得一個控制碼，然後再存取它的 屬性、方法和事件。若要在 CreateFolder 函數中設定變數，請使用此語法：

[VBScript]

Sub CreateFolder
   Dim fso, fldr
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set fldr = fso.CreateFolder("C:\MyTest")
   Response.Write "Created folder: " & fldr.Name
End Sub

[JScript]

function CreateFolder()
{
   var fso, fldr;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fldr = fso.CreateFolder("C:\\MyTest");
   Response.Write("Created folder: " + fldr.Name);
}

存取物件的屬性

當您擁有物件的控制碼時，便可存取它的屬性。舉例來說，若要取得特定資料夾的名稱，請先 建立一個物件的執行個體，然後利用適當的方法 (在此例中為 GetFolder 方法，因為資料夾已經存在) 為它指定一個控制碼。

請使用下列程式碼為 GetFolder 方法指定一個控制碼：

[VBScript]

Set fldr = fso.GetFolder("c:\")

[JScript]

var fldr = fso.GetFolder("c:\\");

您現在擁有 Folder 物件的控制碼了，所以可查看它的 Name 屬性。請使用下列程式碼來查看屬性：

[VBScript]

Response.Write "Folder name is: " & fldr.Name

[JScript]

Response.Write("Folder name is: " + fldr.Name);

若要查看檔案最後一次修改的時間，請使用下列的語法：

[VBScript]

Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
' 取得一個要查詢的File 物件。
Set f1 = fso.GetFile("c:\detlog.txt")
' 列印訊息。
Response.Write "File last modified: " & f1.DateLastModified

[JScript]

var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 取得 File 物件以進行查詢。
f1 = fso.GetFile("c:\\detlog.txt");
// 列印資訊。
Response.Write("File last modified: " + f1.DateLastModified);


磁碟機和資料夾的處理

您可以利用 FileSystemObject (FSO) 物件模型，以程式化的方式來處理磁碟機和資料夾，就像在 Windows Explorer 中以互動方式來使用它們一樣。您可以複製和移動資料夾、取得磁碟機和資料夾的相關資訊，以及執行其他各種操作。

取得磁碟機的資訊

Drive 物件可讓您透過實體或網路，取得連到系統的各種磁碟機的資訊。它的屬性提供下列資訊：

  • 以位元組顯示磁碟機的總容量 (TotalSize 屬性)
  • 以位元組顯示磁碟機上的可用空間 (AvailableSpace 或 FreeSpace 屬性)
  • 磁碟機的代號 (DriveLetter 屬性)
  • 磁碟機的類型，例如抽取式、固定式、網路、CD-ROM 或 RAM 磁碟 (DriveType 屬性)
  • 磁碟機的序號 (SerialNumber 屬性)
  • 磁碟機使用的檔案系統類型，例如 FAT、FAT32、NTFS 等等 (FileSystem 屬性)
  • 磁碟機是否可供使用 (IsReady 屬性)
  • 共用資源和/或磁區的名稱 (ShareName 和 VolumeName 屬性)
  • 磁碟機的路徑或根資料夾 (Path 和 RootFolder 屬性)

請檢視範例程式碼，以瞭解如何在 FileSystemObject 中使用這些屬性。

Drive 物件的範例用法

您可以使用 Drive 物件來收集磁碟機的相關資訊。在下列程式碼中您看不到實際的 Drive 物件的引用；反之，使用 GetDrive 方法則可取得現有的 Drive 物件的引用 (在此例中為 drv)。

下面的範例說明如何使用 Drive 物件：

[VBScript]

Sub ShowDriveInfo(drvPath)
   Dim fso, drv, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & drv.VolumeName & "<br>"
   s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
   s = s & " Kb" & "<br>"
   s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
   s = s & " Kb" & "<br>"
   Response.Write s
End Sub
[JScript]
function ShowDriveInfo1(drvPath)
{
   var fso, drv, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   drv = fso.GetDrive(fso.GetDriveName(drvPath));
   s += "Drive " + drvPath.toUpperCase()+ " - ";
   s += drv.VolumeName + "<br>";
   s += "Total Space: " + drv.TotalSize / 1024;
   s += " Kb" + "<br>";
   s += "Free Space: " + drv.FreeSpace / 1024;
   s += " Kb" + "<br>";
   Response.Write(s);
}

資料夾的處理

下表列出常見的資料夾任務和執行這些任務的方法。

任務 | 方法
建立資料夾。 | FileSystemObject.CreateFolder
刪除資料夾。 | Folder.Delete 或 FileSystemObject.DeleteFolder
移動資料夾 | Folder.Move 或 FileSystemObject.MoveFolder
複製資料夾。 | Folder.Copy 或 FileSystemObject.CopyFolder
擷取資料夾的名稱。 | Folder.Name
檢查磁碟機上是否存在某個資料夾。 | FileSystemObject.FolderExists
取得現有的 Folder 物件的執行個體。 | FileSystemObject.GetFolder
找出資料夾的上層資料夾名稱。 | FileSystemObject.GetParentFolderName
找出系統資料夾的路徑。 | FileSystemObject.GetSpecialFolder

請檢視範例程式碼，以瞭解在 FileSystemObject 中可使用哪些方法和屬性。

下面的範例說明如何使用 Folder 和 FileSystemObject 物件處理資料夾並取得它們的相關資訊：

[VBScript]

Sub ShowFolderInfo()
   Dim fso, fldr, s
   ' 取出FileSystemObject的個體執行。
   Set fso = CreateObject("Scripting.FileSystemObject")
   ' 取出Drive 物件。
   Set fldr = fso.GetFolder("c:")
   ' 列印上層資料夾名稱。
   Response.Write "Parent folder name is: " & fldr & "<br>"
   ' 列印磁碟名稱。
   Response.Write "Contained on drive " & fldr.Drive & "<br>"
   ' 列印根檔案名稱。
   If fldr.IsRootFolder = True Then
      Response.Write "This is the root folder." & ""<br>"<br>"
   Else
      Response.Write "This folder isn't a root folder." & "<br><br>"
   End If
   ' 用FileSystemObject 物件建立一個新的資料夾。
   fso.CreateFolder ("C:\Bogus")
   Response.Write "Created folder C:\Bogus" & "<br>"
   ' 列印這個資料夾的base name 。
   Response.Write "Basename = " & fso.GetBaseName("c:\bogus") & "<br>"
   ' 刪除新建立的資料夾。
   fso.DeleteFolder ("C:\Bogus")
   Response.Write "Deleted folder C:\Bogus" & "<br>"
End Sub

[JScript]

function ShowFolderInfo()
{
   var fso, fldr, s = "";
   // 取得FileSystemObject的個體執行。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   // 取得Drive 物件。
   fldr = fso.GetFolder("c:");
   // 列印上層資料夾名稱。
   Response.Write("上層資料夾名稱是: " + fldr + "<br>");
   // 列印磁碟名稱。
   Response.Write("Contained on drive " + fldr.Drive + "<br>");
   // 列印根檔案名稱。
   if (fldr.IsRootFolder)
     Response.Write("This is the root folder.");
   else
     Response.Write("This folder isn't a root folder.");
   Response.Write("<br><br>");
   // 利用FileSystemObject 物件建立一個新資料夾
   fso.CreateFolder ("C:\\Bogus");
   Response.Write("Created folder C:\\Bogus" + "<br>");
   // 列印資料夾的基底名稱。
   Response.Write("Basename = " + fso.GetBaseName("c:\\bogus") + "<br>");
   // 刪除新建立的資料夾。
   fso.DeleteFolder ("C:\\Bogus");
   Response.Write("Deleted folder C:\\Bogus" + "<br>");
}


檔案的處理

檔案的處理分為兩大類：

  • 建立、加入或移除資料，以及讀取檔案
  • 移動、複製和刪除檔案

建立檔案

有三種方法可建立空白的文字檔 (有時稱為「文字資料流」)。

第一種方法是使用 CreateTextFile 方法。下面的範例說明如何使用 CreateTextFileMethod方法建立文字檔：

[VBScript]

Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)

[JScript]

var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);

建立文字檔的第二種方法是使用設定 ForWriting 旗標之 FileSystemObject 物件的 OpenTextFile 方法。

[VBScript]

Dim fso, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting. FileSystemObject")
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting, True)

[JScript]

var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);

建立文字檔的第三種方法是使用設定 ForWriting 旗標的 OpenAsTextStream 方法。

[VBScript]

Dim fso, f1, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("c:\test1.txt")
Set f1 = fso.GetFile("c:\test1.txt")
Set ts = f1.OpenAsTextStream(ForWriting, True)

[JScript]

var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);

將資料加入檔案中

建立好文字檔後，可依下列三個步驟將資料加入檔案：

開啟文字檔。

寫入資料。

關閉檔案。

若要開啟現有的檔案，請使用 FileSystemObject 物件的 OpenTextFile 方法或 File 物件的 OpenAsTextStream 方法。

若要將資料寫入已開啟的文字檔中，請依下表列出的不同任務使用 TextStream 物件的 Write、WriteLine 或 WriteBlankLines 方法。

任務 | 方法
將資料寫入開啟的文字檔，但不加入換行字元。 | Write
將資料寫入開啟的文字檔，並加入換行字元。 | WriteLine
在開啟的文字檔中寫入一或多行空白行。 | WriteBlankLines

若要關閉開啟的檔案，請使用 TextStream 物件的 Close 方法。

備註 換行字元包含一或多個字元 (視 作業系統而定)，可讓游標移到下一行的開頭 (復位字元/跳行)。請注意，某些字串的結尾可能 已經包含這類非列印字元。

下面的範例說明如何開啟檔案、使用三種寫入方法將資料加入檔案，以及關閉檔案：

[VBScript]

Sub CreateFile()
   Dim fso, tf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set tf = fso.CreateTextFile("c:\testfile.txt", True)
   ' Write a line with a newline character.
   tf.WriteLine("Testing 1, 2, 3.")
   ' Write three newline characters to the file.
   tf.WriteBlankLines(3)
   ' Write a line.
   tf.Write ("This is a test.")
   tf.Close
End Sub

[JScript]

function CreateFile()
{
   var fso, tf;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   tf = fso.CreateTextFile("c:\\testfile.txt", true);
   // 使用換行字元撰寫一行。
   tf.WriteLine("Testing 1, 2, 3.") ;
  // 把3個換行字元寫到檔案中。
   tf.WriteBlankLines(3) ;
   // 撰寫一行。
   tf.Write ("This is a test.");
   tf.Close();
}

讀取檔案

若要從文字檔中讀取資料，請使用 TextStream 物件的 Read、ReadLine 或 ReadAll 方法。下表說明不同的任務應使用何種方法。

任務 | 方法
從檔案中讀取特定數量的字元。 | Read
讀取一整行 (不含換行字元)。 | ReadLine
讀取文字檔的完整內容。 | ReadAll

如果您使用 Read 或 ReadLine 方法，並想跳移到特定位置的資料，請使用 Skip 或 SkipLine 方法。各種讀取方法所取得的結果文字會存成字串，該字串 可在控制項中顯示，由字串函數剖析 (例如 Left、Right 和 Mid) 或加 以串連。

下面範例說明如何開啟檔案、寫入檔案，以及讀取檔案：

[VBScript]

Sub ReadFiles
   Dim fso, f1, ts, s
   Const ForReading = 1
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
   ' 撰寫一行。
   Response.Write "Writing file <br>"
   f1.WriteLine "Hello World"
   f1.WriteBlankLines(1)
   f1.Close
   ' 讀取檔案內容。
   Response.Write "Reading file <br>"
   Set ts = fso.OpenTextFile("c:\testfile.txt", ForReading)
   s = ts.ReadLine
   Response.Write "File contents = '" & s & "'"
   ts.Close
End Sub

[JScript]

function ReadFiles()
{
   var fso, f1, ts, s;
   var ForReading = 1;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f1 = fso.CreateTextFile("c:\\testfile.txt", true);
   // 撰寫一行。
   Response.Write("Writing file <br>");
   f1.WriteLine("Hello World");
   f1.WriteBlankLines(1);
   f1.Close();
   // 讀取檔案內容。
   Response.Write("Reading file <br>");
   ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   s = ts.ReadLine();
   Response.Write("File contents = '" + s + "'");
   ts.Close();
}

移動、複製和刪除檔案

下表說明 FSO 物件模型提供的兩種移動、複製和刪除檔案的方法。

任務 | 方法
移動檔案 | File.Move 或 FileSystemObject.MoveFile
複製檔案 | File.Copy 或 FileSystemObject.CopyFile
刪除檔案 | File.Delete 或 FileSystemObject.DeleteFile

下面的範例在磁碟機 C 的根目錄建立一個文字檔，在檔案中寫入一些資訊，將檔案 移到 \tmp 目錄，將檔案複製到 \temp 目錄，然後再從這兩個目錄中刪除檔案。

若要執行下列範例，請在磁碟機 C: 的根目錄建立 \tmp 和 \temp 目錄：

[VBScript]

Sub ManipFiles
   Dim fso, f1, f2, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
   Response.Write "Writing file <br>"
   ' 撰寫一行。
   f1.Write ("This is a test.")
   ' 關閉寫入的檔案。
   f1.Close
   Response.Write "Moving file to c:\tmp <br>"
   ' 在C:\的根目錄底下取得一個控制碼。
   Set f2 = fso.GetFile("c:\testfile.txt")
   ' 移動檔案到\tmp 目錄。
   f2.Move ("c:\tmp\testfile.txt")
   Response.Write "Copying file to c:\temp <br>"
   ' 複製檔案到\temp。
   f2.Copy ("c:\temp\testfile.txt")
   Response.Write "Deleting files <br>"
   ' 取得到檔案目前位置的控制碼。
   Set f2 = fso.GetFile("c:\tmp\testfile.txt")
   Set f3 = fso.GetFile("c:\temp\testfile.txt")
   ' 刪除檔案。
   f2.Delete
   f3.Delete
   Response.Write "All done!"
End Sub

[JScript]

function ManipFiles()
{
   var fso, f1, f2, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f1 = fso.CreateTextFile("c:\\testfile.txt", true);
   Response.Write("Writing file <br>");
   // 撰寫一行。
   f1.Write("This is a test.");
   // 關閉寫入的檔案。
   f1.Close();
   Response.Write("Moving file to c:\\tmp <br>");
   //在C:\的根目錄底下取得一個控制碼。
   f2 = fso.GetFile("c:\\testfile.txt");
   // 移動檔案到\tmp 目錄。
   f2.Move ("c:\\tmp\\testfile.txt");
   Response.Write("Copying file to c:\\temp <br>");
   // 複製檔案到\temp。
   f2.Copy ("c:\\temp\\testfile.txt");
   Response.Write("Deleting files <br>");
   //取得到檔案目前位置的控制碼。
   f2 = fso.GetFile("c:\\tmp\\testfile.txt");
   f3 = fso.GetFile("c:\\temp\\testfile.txt");
   // 刪除檔案。
   f2.Delete();
   f3.Delete();
   Response.Write("All done!");
}


FileSystemObject 範例程式碼

本節說明的範例程式碼提供一個實際的範例，說明 FileSystemObject 物件模型中可使用的多種功能。這個程式碼顯示物件模型的所有功能如何搭配使用，以及如何在您自己的程式碼中有效地使用這些功能。

請注意，由於這個程式碼是一般性的，因此要在您的電腦上正確執行此程式碼，必須使用額外的程式碼並稍作修改。這些變更是必要的，因為輸入和輸出到使用者的各種不同方法都是在 Active Server Page 和 Windows Script Host 之間處理的。

若要在 Active Server Page 上面執行此程式碼，請依循下列步驟：

建立一個含 .asp 副檔名的標準網頁。

將下列範例程式碼複製到該檔案的 <BODY>...</BODY> 標記之間。

將所有程式碼包含在 <%...%> 標記內。

將程式碼中的 Option Explicit 陳述式從它目前的位置移到 HTML 網頁的最上方，將它放在開頭的 <HTML> 標記前面。

為 Option Explicit 陳述式加上 <%...%> 標記，以確保它會在伺服端執行。

將下列程式碼加入範例程式碼的最後面：

Sub Print(x)
   Response.Write "<PRE>&ltFONT FACE=""Courier New"" SIZE=""1"">"
   Response.Write x
   Response.Write "</FONT></PRE>"
End Sub
Main

上述程式碼加入一個列印程序，它會在伺服端執行，但卻在客戶端上顯示結果。若要在 Windows Script Host 上面執行這個程式碼，請將下列程式碼加入範例程式碼的最後面：

Sub Print(x)
   WScript.Echo x
End Sub
Main

程式碼會包含在下列位置：

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' FileSystemObject 程式碼範例
' Copyright 1998 Microsoft Corporation.   All Rights Reserved.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 關於程式碼品質:
' 1) 以下程式碼利用"&"運算子串連短的字串來完成
'    許多字串相乘的工作。
'    因為串連字串耗日費時，所以
'    為串連而撰寫程式非常沒有效率。然而，撰寫程式卻也是
'    一勞永逸的方法，而且運用在這裡。因為
'    程式可以執行廣泛的磁碟運作，而且
'    磁碟較連結字串所需的記憶體
'    速度慢了許多。記住這是一個示範用的
'    程式碼，不供作真正使用。
'
' 2) 必須使用"Option Explicit" ， 因為存取宣告過的變數比存取未宣告的變數
'    要快一點。 這也可以避免
'    一些錯誤潛入您的程式碼中， 像是當您把
'    DriveTypeCDROM 誤拼成 DriveTypeCDORM的時候。
'
' 3) 為了增加程式碼的可讀性，
'    這個程式碼不含錯誤處理。 雖然這個程式會事先警告您
'    在一般情形下，程式碼不會主動處理錯誤， 旦檔案系統卻是
'    無法預測的。 在實際使用的程式碼中， 請使用 On Error Resume Next 和
'    Err 物件來追蹤可能發生的錯誤。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 一些可用的全域變數
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim TabStop
Dim NewLine

Const TestDrive = "C"
Const TestFilePath = "C:\Test"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Drive.DriveType 傳回常數
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const DriveTypeRemovable = 1
Const DriveTypeFixed = 2
Const DriveTypeNetwork = 3
Const DriveTypeCDROM = 4
Const DriveTypeRAMDisk = 5

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' File.Attributes 傳回常數
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const FileAttrNormal   = 0
Const FileAttrReadOnly = 1
Const FileAttrHidden = 2
Const FileAttrSystem = 4
Const FileAttrVolume = 8
Const FileAttrDirectory = 16
Const FileAttrArchive = 32
Const FileAttrAlias = 64
Const FileAttrCompressed = 128

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 開啟檔案的常數
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const OpenFileForReading = 1
Const OpenFileForWriting = 2
Const OpenFileForAppending = 8

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShowDriveType
' 目的:
'    產生一個字串以敘述已知Drive 物件的磁碟型態。
' 指出以下
'  - Drive.DriveType
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ShowDriveType(Drive)

   Dim S

   Select Case Drive.DriveType
   Case DriveTypeRemovable
      S = "Removable"
   Case DriveTypeFixed
      S = "Fixed"
   Case DriveTypeNetwork
      S = "Network"
   Case DriveTypeCDROM
      S = "CD-ROM"
   Case DriveTypeRAMDisk
      S = "RAM Disk"
   Case Else
      S = "Unknown"
   End Select

   ShowDriveType = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShowFileAttr
' 目的:
'    產生一個字串以敘述一個檔案或資料夾的屬性。
' 指出以下
'  - File.Attributes
'  - Folder.Attributes
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function ShowFileAttr(File) ' File 可以是一個檔案或資料夾

   Dim S
   Dim Attr

   Attr = File.Attributes

   If Attr = 0 Then
      ShowFileAttr = "Normal"
      Exit Function
   End If

   If Attr And FileAttrDirectory Then S = S & "Directory "
   If Attr And FileAttrReadOnly Then S = S & "Read-Only "
   If Attr And FileAttrHidden Then S = S & "Hidden "
   If Attr And FileAttrSystem Then S = S & "System "
   If Attr And FileAttrVolume Then S = S & "Volume "
   If Attr And FileAttrArchive Then S = S & "Archive "
   If Attr And FileAttrAlias Then S = S & "Alias "
   If Attr And FileAttrCompressed Then S = S & "Compressed "

   ShowFileAttr = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateDriveInformation
' 目的:
'    產生一個字串以敘述目前
'    可用磁碟機的情況。
' 指出以下
'  - FileSystemObject.Drives
'  - Iterating the Drives collection
'  - Drives.Count
'  - Drive.AvailableSpace
'  - Drive.DriveLetter
'  - Drive.DriveType
'  - Drive.FileSystem
'  - Drive.FreeSpace
'  - Drive.IsReady
'  - Drive.Path
'  - Drive.SerialNumber
'  - Drive.ShareName
'  - Drive.TotalSize
'  - Drive.VolumeName
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateDriveInformation(FSO)

   Dim Drives
   Dim Drive
   Dim S

   Set Drives = FSO.Drives
   S = "Number of drives:" & TabStop & Drives.Count & NewLine & NewLine

   ' 建構報告的第1行。
   S = S & String(2, TabStop) & "Drive"
   S = S & String(3, TabStop) & "File"
   S = S & TabStop & "Total"
   S = S & TabStop & "Free"
   S = S & TabStop & "Available"
   S = S & TabStop & "Serial" & NewLine

   ' 建構報告的第2行。
   S = S & "Letter"
   S = S & TabStop & "Path"
   S = S & TabStop & "Type"
   S = S & TabStop & "Ready?"
   S = S & TabStop & "Name"
   S = S & TabStop & "System"
   S = S & TabStop & "Space"
   S = S & TabStop & "Space"
   S = S & TabStop & "Space"
   S = S & TabStop & "Number" & NewLine

   ' Separator line.
   S = S & String(105, "-") & NewLine

   For Each Drive In Drives
      S = S & Drive.DriveLetter
      S = S & TabStop & Drive.Path
      S = S & TabStop & ShowDriveType(Drive)
      S = S & TabStop & Drive.IsReady

      If Drive.IsReady Then
         If DriveTypeNetwork = Drive.DriveType Then
            S = S & TabStop & Drive.ShareName
         Else
            S = S & TabStop & Drive.VolumeName
         End If
         S = S & TabStop & Drive.FileSystem
         S = S & TabStop & Drive.TotalSize
         S = S & TabStop & Drive.FreeSpace
         S = S & TabStop & Drive.AvailableSpace
         S = S & TabStop & Hex(Drive.SerialNumber)
      End If

      S = S & NewLine

   Next

   GenerateDriveInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateFileInformation
' 目的:
'    產生一個字串以說明一個檔案目前的情況。
' 指出以下
'  - File.Path
'  - File.Name
'  - File.Type
'  - File.DateCreated
'  - File.DateLastAccessed
'  - File.DateLastModified
'  - File.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateFileInformation(File)

   Dim S

   S = NewLine & "Path:" & TabStop & File.Path
   S = S & NewLine & "Name:" & TabStop & File.Name
   S = S & NewLine & "Type:" & TabStop & File.Type
   S = S & NewLine & "Attribs:" & TabStop & ShowFileAttr(File)
   S = S & NewLine & "Created:" & TabStop & File.DateCreated
   S = S & NewLine & "Accessed:" & TabStop & File.DateLastAccessed
   S = S & NewLine & "Modified:" & TabStop & File.DateLastModified
   S = S & NewLine & "Size" & TabStop & File.Size & NewLine

   GenerateFileInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateFolderInformation
' 目的:
'    產生一個字串以敘述目前資料夾的情況。
' 指出以下
'  - Folder.Path
'  - Folder.Name
'  - Folder.DateCreated
'  - Folder.DateLastAccessed
'  - Folder.DateLastModified
'  - Folder.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateFolderInformation(Folder)

   Dim S

   S = "Path:" & TabStop & Folder.Path
   S = S & NewLine & "Name:" & TabStop & Folder.Name
   S = S & NewLine & "Attribs:" & TabStop & ShowFileAttr(Folder)
   S = S & NewLine & "Created:" & TabStop & Folder.DateCreated
   S = S & NewLine & "Accessed:" & TabStop & Folder.DateLastAccessed
   S = S & NewLine & "Modified:" & TabStop & Folder.DateLastModified
   S = S & NewLine & "Size:" & TabStop & Folder.Size & NewLine

   GenerateFolderInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateAllFolderInformation
' 目的:
'    產生一個字串以敘述一個資料夾和所有檔案及子資料夾
'    目前的情況。
' 指出以下
'  - Folder.Path
'  - Folder.SubFolders
'  - Folders.Count
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateAllFolderInformation(Folder)

   Dim S
   Dim SubFolders
   Dim SubFolder
   Dim Files
   Dim File

   S = "Folder:" & TabStop & Folder.Path & NewLine & NewLine
   Set Files = Folder.Files

   If 1 = Files.Count Then
      S = S & "There is 1 file" & NewLine
   Else
      S = S & "There are " & Files.Count & " files" & NewLine
   End If

   If Files.Count <> 0 Then
      For Each File In Files
         S = S & GenerateFileInformation(File)
      Next
   End If

   Set SubFolders = Folder.SubFolders

   If 1 = SubFolders.Count Then
      S = S & NewLine & "There is 1 sub folder" & NewLine & NewLine
   Else
      S = S & NewLine & "There are " & SubFolders.Count & " sub folders" _
      NewLine & NewLine
   End If

   If SubFolders.Count <> 0 Then
      For Each SubFolder In SubFolders
         S = S & GenerateFolderInformation(SubFolder)
      Next
      S = S & NewLine
      For Each SubFolder In SubFolders
         S = S & GenerateAllFolderInformation(SubFolder)
      Next
   End If

   GenerateAllFolderInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateTestInformation
' 目的:
'    產生一個字串以敘述C:\Test 資料夾和所有檔案及子資料夾
'    目前的情況。
' 指出以下
'  - FileSystemObject.DriveExists
'  - FileSystemObject.FolderExists
'  - FileSystemObject.GetFolder
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateTestInformation(FSO)

   Dim TestFolder
   Dim S

   If Not FSO.DriveExists(TestDrive) Then Exit Function
   If Not FSO.FolderExists(TestFilePath) Then Exit Function

   Set TestFolder = FSO.GetFolder(TestFilePath)

   GenerateTestInformation = GenerateAllFolderInformation(TestFolder)

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteTestDirectory
' 目的:
'    清除檢測目錄。
' 指出以下
'  - FileSystemObject.GetFolder
'  - FileSystemObject.DeleteFile
'  - FileSystemObject.DeleteFolder
'  - Folder.Delete
'  - File.Delete
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub DeleteTestDirectory(FSO)

   Dim TestFolder
   Dim SubFolder
   Dim File

   ' 刪除一個檔案有兩種方式:

   FSO.DeleteFile(TestFilePath & "\Beatles\OctopusGarden.txt")

   Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
   File.Delete

   ' 刪除一個資料夾有兩種方式:
   FSO.DeleteFolder(TestFilePath & "\Beatles")
   FSO.DeleteFile(TestFilePath & "\ReadMe.txt")
   Set TestFolder = FSO.GetFolder(TestFilePath)
   TestFolder.Delete

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' CreateLyrics
' 目的:
'    在一個資料夾中建立一些文字檔。
' 指出以下
'  - FileSystemObject.CreateTextFile
'  - TextStream.WriteLine
'  - TextStream.Write
'  - TextStream.WriteBlankLines
'  - TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub CreateLyrics(Folder)

   Dim TextStream

   Set TextStream = Folder.CreateTextFile("OctopusGarden.txt")

   ' 注意這並沒有新增一個換列到檔案。
   TextStream.Write("Octopus' Garden ")
   TextStream.WriteLine("(by Ringo Starr)")
   TextStream.WriteBlankLines(1)
   TextStream.WriteLine("I'd like to be under the sea in an octopus' garden in the shade,")
   TextStream.WriteLine("He'd let us in, knows where we've been -- in his octopus' garden in the shade.")
   TextStream.WriteBlankLines(2)

   TextStream.Close

   Set TextStream = Folder.CreateTextFile("BathroomWindow.txt")
   TextStream.WriteLine("She Came In Through The Bathroom Window (by Lennon/McCartney)")
   TextStream.WriteLine("")
   TextStream.WriteLine("She came in through the bathroom window protected by a silver spoon")
    TextStream.WriteLine("But now she sucks her thumb and wanders by the banks of her own lagoon")
   TextStream.WriteBlankLines(2)
   TextStream.Close

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetLyrics
' 目的:
'    顯示檔案的內容Displays the contents of the lyrics files.
' 指出以下
'  - FileSystemObject.OpenTextFile
'  - FileSystemObject.GetFile
'  - TextStream.ReadAll
'  - TextStream.Close
'  - File.OpenAsTextStream
'  - TextStream.AtEndOfStream
'  - TextStream.ReadLine
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GetLyrics(FSO)

   Dim TextStream
   Dim S
   Dim File

   ' 打開一個測試檔有幾種方法，讀取檔案中的資料
   ' 也有幾種方法。 在這裡各提供
   ' 兩種方法:

   Set TextStream = FSO.OpenTextFile(TestFilePath & "\Beatles\OctopusGarden.txt", OpenFileForReading)

   S = TextStream.ReadAll & NewLine & NewLine
   TextStream.Close

   Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
   Set TextStream = File.OpenAsTextStream(OpenFileForReading)
   Do    While Not TextStream.AtEndOfStream
      S = S & TextStream.ReadLine & NewLine
   Loop
   TextStream.Close

   GetLyrics = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' BuildTestDirectory
' 目的:
'    建立一個目錄層級以顯示 FileSystemObject。
'    我們將以這個順序建立一個層級:
'       C:\Test
'       C:\Test\ReadMe.txt
'       C:\Test\Beatles
'       C:\Test\Beatles\OctopusGarden.txt
'       C:\Test\Beatles\BathroomWindow.txt
' 指出以下
'  - FileSystemObject.DriveExists
'  - FileSystemObject.FolderExists
'  - FileSystemObject.CreateFolder
'  - FileSystemObject.CreateTextFile
'  - Folders.Add
'  - Folder.CreateTextFile
'  - TextStream.WriteLine
'  - TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function BuildTestDirectory(FSO)

   Dim TestFolder
   Dim SubFolders
   Dim SubFolder
   Dim TextStream

   ' 若 (a) 磁碟不存在， 或若 (b) 目錄已經建立或已經存在，
   '則通過。

   If Not FSO.DriveExists(TestDrive) Then
      BuildTestDirectory = False
      Exit Function
   End If

   If FSO.FolderExists(TestFilePath) Then
      BuildTestDirectory = False
      Exit Function
   End If

   Set TestFolder = FSO.CreateFolder(TestFilePath)

   Set TextStream = FSO.CreateTextFile(TestFilePath & "\ReadMe.txt")
   TextStream.WriteLine("My song lyrics collection")
   TextStream.Close

   Set SubFolders = TestFolder.SubFolders
   Set SubFolder = SubFolders.Add("Beatles")
   CreateLyrics SubFolder
   BuildTestDirectory = True

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 主要例行任務
' 首先，它建立一個測試目錄，以及一些子資料夾
' 和檔案。 然後， 它倒掉一些有關磁碟機和測試目錄
' 的資訊，然後重新清除
' 所有的東西。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Main

   Dim FSO

   ' 建立全域資料。
   TabStop = Chr(9)
   NewLine = Chr(10)

   Set FSO = CreateObject("Scripting.FileSystemObject")

   If Not BuildTestDirectory(FSO) Then
      Print "Test directory already exists or cannot be created.   Cannot continue."
      Exit Sub
End If

   Print GenerateDriveInformation(FSO) & NewLine & NewLine
   Print GenerateTestInformation(FSO) & NewLine & NewLine
   Print GetLyrics(FSO) & NewLine & NewLine
   DeleteTestDirectory(FSO)

End Sub


Scripting 執行階段參照

本節包含

FileSystemObject 屬性
您可以用於FileSystemObject 物件模型的屬性清單。
FileSystemObject 方法
您可以用於 FileSystemObject 物件模型的方法清單。
FileSystemObject 物件
您可以用於 FileSystemObject 物件模型的物件清單。
FileSystemObject 集合
您可以用於 FileSystemObject 物件模型的集合清單。

相關章節

FileSystemObject 基礎概念
FileSystemObject.的基礎概念指南。


FileSystemObject 屬性

本節包括

AtEndOfLine 屬性
如果檔案指標會立刻定位在 TextStream 檔中的行尾標記之前則傳回 true；否則傳回 false。
AtEndOfStream 屬性
如果檔案指標位於 TextStream 檔的最後則傳回 true；否則傳回 false。
Attributes 屬性
設定或傳回檔案或資料夾的屬性。
AvailableSpace 屬性
傳回在指定磁碟機或網路共享中使用者可以使用的空間數。
Column 屬性
傳回 TextStream 檔中目前字元位置的欄數。
CompareMode 屬性
設定並傳回 Dictionary 物件中比對字串索引鍵的比對模式。
Count 屬性
傳回集合或 Dictionary 物件中項目的數目。
DateCreated 屬性
傳回建立指定的檔案或資料的日期與時間。唯讀。
DateLastAccessed 屬性
傳回上次存取指定的檔案或資料夾的日期與時間。
DateLastModified 屬性
傳回上次修改指定的檔案或資料夾的日期與時間。
Drive 屬性
傳回指定檔案或資料夾所在的磁碟機之磁碟機字母。
DriveLetter 屬性
傳回實體本地磁碟機或網路共享的磁碟機字母。
Drives 屬性
傳回由所有 Drive 物件所組成的 Drives 集合。這些物件可以在本地電腦中取得。
DriveType 屬性
傳回一個指示指定磁碟機類型的數值。
Files 屬性
傳回由包含在指定資料夾中的所有 File 物件所組成的 Files 集合，包括具有隱藏與系統檔案屬性集的集合。
FileSystem屬性
傳回指定磁碟機中在使用的系統類型。
FreeSpace 屬性
傳回在指定磁碟機或網路共享中使用者可以使用的可用空間數。
IsReady 屬性
如果指定的磁碟機已經準備則傳回 true；否則傳回 false。
IsRootFolder 屬性
如果指定資料夾為根目錄資料夾則傳回 true；否則傳回 false。
Item 屬性
設定或傳回Dictionary 物件中指定 key 的 item。如果是集合，則根據指定的 key 傳回 item。
Key 屬性
設定 Dictionary 物件的 key。
Line 屬性
傳回 TextStream 檔中目前的行數。
Name 屬性
設定或傳回指定檔案或資料夾的名稱。
ParentFolder 屬性
傳回指定父檔案或父資料夾的資料夾物件。
Path 屬性
傳回指定檔案、資料夾或磁碟機的路徑。
RootFolder 屬性
傳回代表指定磁碟機的根目錄資料夾的 Folder 物件。
SerialNumber 屬性
傳回用來單獨標示磁碟容量的十進位序號。
ShareName 屬性
傳回指定磁碟機的網路共享名稱。
ShortName 屬性
傳回由程式所使用的簡短路徑，這些程式需要先前的 8.3 檔案命名慣例。
ShortPath 屬性
傳回由程式所使用的簡短路徑，這些程式需要先前的 8.3 檔案命名慣例。
Size 屬性
如果是檔案，則傳回指定檔案的大小 (單位為位元組)。如果是資料夾，則傳回包含在資料夾中所有檔案與子資料夾的大小(單位為位元組)。
SubFolders 屬性
傳回由包含在指定資料夾中的所夾資料夾所組成的 Folders 集合，包括具有隱藏與系統檔案屬性集的集合。
TotalSize 屬性
傳回磁碟機或網路共享的總計空間 (單位為位元組)。
Type 屬性
傳回有關檔案或資料夾類型的資訊。
VolumeName 屬性
設定或傳回指定磁碟機的磁碟名稱。

相關章節

Scripting 執行階段參照
構成 Scripting 執行階段參照的元素清單。
FileSystemObject 基礎概念
FileSystemObject.的基礎概念指南。


AtEndOfLine 屬性 (FileSystemObject)

Scripting 執行階段程式庫

AtEndOfLine 屬性

若檔案指標緊接在 TextStream 檔案中的行尾符號前面，則傳回 True，否則傳回 False。屬於唯讀性質。

object.AtEndOfLine

object 一律為 TextStream 物件的名稱。

附註

AtEndOfLine 屬性僅適用於開啟供讀取的 TextStream 檔案，否則將會產生錯誤。

下面程式碼說明 AtEndOfLine 屬性的用法：

[JScript]
function GetALine(filespec)
{
   var fso, a, s, ForReading;
   ForReading = 1, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   a = fso.OpenTextFile(filespec, ForReading, false);
   while (!a.AtEndOfLine)
   {
      s += a.Read(1);
   }
   a.Close( );
   return(s);
}
[VBScript]
Function ReadEntireFile(filespec)
   Const ForReading = 1
   Dim fso, theFile, retstring
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set theFile = fso.OpenTextFile(filespec, ForReading, False)
   Do While theFile.AtEndOfLine <> True
      retstring = theFile.Read(1)
   Loop
   theFile.Close
   ReadEntireFile = retstring
End Function

請參閱

AtEndOfStream 屬性

適用於：TextStream 物件


AtEndOfStream 屬性 (FileSystemObject)

Scripting 執行階段程式庫

AtEndOfStream 屬性

如果檔案指標位於 TextStream 檔案的結尾，會傳回 True；否則傳回 False。屬於唯讀性質。

object.AtEndOfStream

object 一律為 TextStream 物件的名稱。

附註

AtEndOfStream 屬性僅能適用於開啟供讀取的 TextStream 檔案，否則將會產生錯誤。

下面的程式碼說明 AtEndOfStream 屬性的用法：

[JScript]
function GetALine(filespec)
{
   var fso, f, s, ForReading;
   ForReading = 1, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile(filespec, ForReading, false);
   while (!f.AtEndOfStream)
      s += f.ReadLine( );
   f.Close( );
   return(s);
}
[VBScript]
Function ReadEntireFile(filespec)
   Const ForReading = 1
   Dim fso, theFile, retstring
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set theFile = fso.OpenTextFile(filespec, ForReading, False)
   Do While theFile.AtEndOfStream <> True
      retstring = theFile.ReadLine
   Loop
   theFile.Close
   ReadEntireFile = retstring
End Function

請參閱

AtEndOfLine 屬性

適用於：TextStream 物件


Attributes 屬性

設定或傳回檔案或資料夾的特性。讀/寫或唯讀性質，視特性而定。

object.Attributes [= newattributes]

引數

object
必要項。一律是 File 或 Folder 物件的名稱。
newattributes
選擇項。如果提供的話，newattributes 就是指定至 object 的特性新值。

設定值

newattributes 引數可以採用以下任何數值，或以下數值的任何邏輯組合：

常數 | 值 | 說明
Normal | 0 | 一般檔案。不設定任何特性。
ReadOnly | 1 | 唯讀檔案。特性本身為讀/寫性質。
Hidden | 2 | 隱藏檔案。特性本身為讀/寫性質。
System | 4 | 系統檔案。特性本身為讀/寫性質。
Volume | 8 | 磁碟機磁區標籤。特性本身為唯讀性質。
Directory | 16 | 資料夾或目錄。特性本身為唯讀性質。
Archive | 32 | 在上一次備份後已變更過檔案。特性本身為讀/寫性質。
Alias | 64 | 連結或捷徑。特性本身為唯讀性質。
Compressed | 128 | 壓縮檔案。特性本身為唯讀性質。

附註

下面的程式碼說明如何使用檔案的 Attributes 屬性：

[JScript]
function ToggleArchiveBit(filespec)
{
   var fso, f, r, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec)
   if (f.attributes && 32)
   {
      f.attributes = f.attributes - 32;
      s = "Archive bit is cleared.";
   }
   else
   {
      f.attributes = f.attributes + 32;
      s =   "Archive bit is set.";
   }
   return(s);
}
[VBScript]
Function ToggleArchiveBit(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   If f.attributes and 32 Then
      f.attributes = f.attributes - 32
      ToggleArchiveBit = "Archive bit is cleared."
   Else
      f.attributes = f.attributes + 32
      ToggleArchiveBit = "Archive bit is set."
   End If
End Function

請參閱

DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


AvailableSpace 屬性

傳回在指定的磁碟機或網路共用磁碟機上使用者可用的空間量。

object.AvailableSpace

object 一律是 Drive 物件。

附註

AvailableSpace 屬性傳回的值通常會與 FreeSpace 屬性傳回的值一樣。但電腦系統若支援空間配額 (quota) 的話，這兩者就可能不同。

下面的程式碼說明 AvailableSpace 屬性的用法：

[JScript]
function ShowAvailableSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath.toUpperCase() + " - ";
   s += d.VolumeName + "<br>";
   s += "Available Space: " + d.AvailableSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowAvailableSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Available Space: " & FormatNumber(d.AvailableSpace/1024, 0)
   s = s & " Kbytes"
   ShowAvailableSpace = s
End Function

請參閱

DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


Column 屬性 (FileSystemObject)

Scripting 執行階段程式庫

Column 屬性

這是一個唯讀屬性，可傳回 TextStream 檔案中目前字元位置的欄數。

object.Column

object 一律為 TextStream 物件的名稱。

附註

在寫入換行字元之後，並在寫入其他任何字元之前，Column 等於 1。

下面的範例說明 Column 屬性的用法：

[JScript]
function GetColumn()
{
   var fso, f, m;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Hello World!");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   m = f.ReadLine();
   return(f.Column);
}
[VBScript]
Function GetColumn
   Const ForReading = 1, ForWriting = 2
   Dim fso, f, m
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   f.Close
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   m =   f.ReadLine
   GetColumn = f.Column
End Function

請參閱

Line 屬性

適用於：TextStream 物件


CompareMode 屬性

設定並傳回 Dictionary 物件中比較字串鍵值的比較模式。

object.CompareMode[ = compare]

引數

object
必要項。一律是 Dictionary 物件的名稱。
compare
選擇項。如果提供的話，compare 這個值代表比較模式。可接受的值是 0 (二進位)、1 (文字)、2 (資料庫)。使用大於 2 的值表示要使用特定的國別語系 ID (LCID) 進行比較。

附註

如果您試圖變更已包含資料之 Dictionary 物件的比較模式，將會出現錯誤。

下面的範例說明 CompareMode 屬性的用法：

[JScript]
function TestCompareMode(key)
{
   // 建立一些變數。
   var a, d;
   var BinaryCompare = 0, TextCompare = 1;
   d = new ActiveXObject("Scripting.Dictionary");
   // 將比較模式設為文字比較模式。
   d.CompareMode = TextCompare;
   // 新增索引鍵與項目。
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
   return(d.Item(key));
}
[VBScript]
Dim d
Set d = CreateObject("Scripting.Dictionary")

d.CompareMode = vbTextCompare
d.Add "a", "Athens"   ' 新增索引鍵與項目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
d.Add "B", "Baltimore"   ' 此行的 Add 方法失效因為
                         ' 字母 b 已存在於 Dictionary。

請參閱

Key 屬性

適用於：Dictionary 物件


DateLastAccessed 屬性

傳回指定檔案或資料夾的最後一次存取日期與時間。屬於唯讀性質。

object.DateLastAccessed

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用檔案的 DateLastAccessed 屬性：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = filespec.toUpperCase() + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(filespec) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function
重點 這個方法的行為須視基本的作業系統而定。如果作業系統不支援提供的時間資訊，就不會傳回時間。.

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


DateLastModified 屬性

傳回指定檔案或資料夾的最後一次修改日期與時間。屬於唯讀性質。

object.DateLastModified

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用檔案的 DateLastModified 屬性：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = filespec.toUpperCase() + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(filespec) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


Drive 屬性

傳回指定的檔案或資料夾所在磁碟機的磁碟機代號。屬於唯讀性質。

object.Drive

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明 Drive 屬性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Name + " on Drive " + f.Drive + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


DriveLetter 屬性

傳回實體本機磁碟機或網路共用磁碟機的磁碟機代號。屬於唯讀性質。

object.DriveLetter

object 一律是 Drive 物件。

附註

如果指定的磁碟機沒有磁碟機代號的話 (例如未對應到磁碟機代號的網路共用磁碟機)，DriveLetter 屬性會傳回長度零的字串 ("")。

下面的程式碼說明 DriveLetter 屬性的用法：

[JScript]
function ShowDriveLetter(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + d.DriveLetter.toUpperCase( ) + ": - ";
   s += d.VolumeName + "<br>";
   s += "Available Space: " + d.AvailableSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowDriveLetter(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & d.DriveLetter & ": - "
   s = s & d.VolumeName & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowDriveLetter = s
End Function

請參閱

AvailableSpace 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


Drives 屬性

傳回一個 Drives 集合物件，包含本機上可以取得的所有 Drive 物件。

object.Drives

object 一律是 FileSystemObject。

附註

抽取式磁碟機不必插入媒體也一樣會出現在 Drives 集合物件中。

[JScript]

您可以使用 Enumerator 物件和 for 陳述式在 Drives 集合物件的成員間反覆執行：

[JScript]
function ShowDriveList()
{
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=   n + "<br>";
   }
   return(s);
}

[VBScript]

您可以使用下列程式碼的 For Each...Next 架構在 Drives 集合物件的成員間反覆執行：

[VBScript]
Function ShowDriveList
   Dim fso, d, dc, s, n
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set dc = fso.Drives
   For Each d in dc
      n = ""
      s = s & d.DriveLetter & " - "
      If d.DriveType = 3 Then
         n = d.ShareName
      ElseIf d.IsReady Then
         n = d.VolumeName
      End If
      s = s & n & "<BR>"
   Next
   ShowDriveList = s
End Function

請參閱

Drives 集合物件 | Files 屬性 | SubFolders 屬性

適用於：FileSystemObject 物件


DriveType 屬性

傳回一個值，代表指定磁碟機的型態。

object.DriveType

object 一律是 Drive 物件。

附註

下面的程式碼說明 DriveType 屬性的用法：

[JScript]
function ShowDriveType(drvpath)
{
   var fso, d, s, t;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(drvpath);
   switch (d.DriveType)
   {
      case 0: t = "Unknown"; break;
      case 1: t = "Removable"; break;
      case 2: t = "Fixed"; break;
      case 3: t = "Network"; break;
      case 4: t = "CD-ROM"; break;
      case 5: t = "RAM Disk"; break;
   }
   s = "Drive " + d.DriveLetter + ": - " + t;
   return(s);
}
[VBScript]
Function ShowDriveType(drvpath)
   Dim fso, d, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvpath)
   Select Case d.DriveType
      Case 0: t = "Unknown"
      Case 1: t = "Removable"
      Case 2: t = "Fixed"
      Case 3: t = "Network"
      Case 4: t = "CD-ROM"
      Case 5: t = "RAM Disk"
   End Select
   ShowDriveType = "Drive " & d.DriveLetter & ": - " & t
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


FileSystem 屬性

傳回指定的磁碟機使用中的檔案系統型態。

object.FileSystem

object 一律是 Drive 物件。

附註

可用的傳回型態包括 FAT、NTFS 和 CDFS。

下面的程式碼說明 FileSystem 屬性的用法：

[JScript]
function ShowFileSystemType(drvPath)
{
   var fso,d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(drvPath);
   s = d.FileSystem;
   return(s);
}
[VBScript]
Function ShowFileSystemType(drvspec)
   Dim fso,d
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvspec)
   ShowFileSystemType = d.FileSystem
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


FreeSpace 屬性

傳回在指定的磁碟機或網路共用磁碟機上使用者可用的空間量。屬於唯讀性質。

object.FreeSpace

object 一律是 Drive 物件。

附註

FreeSpace 屬性傳回的值通常會與 AvailableSpace 屬性傳回的值一樣。但電腦系統若支援空間配額 (quota) 的話，這兩者就可能不同。

下面的程式碼說明 FreeSpace 屬性的用法：

[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath.toUpperCase( ) + " - ";
   s += d.VolumeName + "<br>";
   s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


IsReady 屬性

如果指定的磁碟機已準備就緒，會傳回 True；否則就會傳回 False。

object.IsReady

object 一律是 Drive 物件。

附註

抽取式磁碟機和 CD-ROM 光碟機必須在插入適當的媒體後，並且已準備好進行存取時，IsReady 才會傳回 True。

下面的程式碼說明 IsReady 屬性的用法：

[JScript]
function ShowDriveInfo(drvpath)
{
   var fso, d, s, t;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   d = fso.GetDrive(drvpath)
   switch (d.DriveType)
   {
      case 0: t = "Unknown"; break;
      case 1: t = "Removable"; break;
      case 2: t = "Fixed"; break;
      case 3: t = "Network"; break;
      case 4: t = "CD-ROM"; break;
      case 5: t = "RAM Disk"; break;
   }
   s = "Drive " + d.DriveLetter + ": - " + t;
   if (d.IsReady)
      s += "<br>" + "Drive is Ready.";
   else
      s += "<br>" + "Drive is not Ready.";
   return(s);
}
[VBScript]
Function ShowDriveInfo(drvpath)
   Dim fso, d, s, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvpath)
   Select Case d.DriveType
      Case 0: t = "Unknown"
      Case 1: t = "Removable"
      Case 2: t = "Fixed"
      Case 3: t = "Network"
      Case 4: t = "CD-ROM"
      Case 5: t = "RAM Disk"
   End Select
   s = "Drive " & d.DriveLetter & ": - " & t
   If d.IsReady Then
      s = s & "<BR>" & "Drive is Ready."
   Else
      s = s & "<BR>" & "Drive is not Ready."
   End If
   ShowDriveInfo = s
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


IsRootFolder 屬性

如果指定的資料夾為根資料夾，會傳回 True；否則會傳回 False。

object.IsRootFolder

object 通常是一個 Folder 物件。

附註

下面程式碼說明 IsRootFolder 屬性的用法：

[JScript]
function DisplayLevelDepth(pathspec)
{
   var fso, f, n, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(pathspec);
   n = 0;
   if (f.IsRootFolder)
      s = "The specified folder is the root folder."
   else
   {
      do
      {
         f = f.ParentFolder;
         n++;
      }
      while (!f.IsRootFolder)
      s = "The specified folder is nested " + n + " levels deep."
   }
   return(s);
}
[VBScript]
Function DisplayLevelDepth(pathspec)
   Dim fso, f, n
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(pathspec)
   If f.IsRootFolder Then
      DisplayLevelDepth = "The specified folder is the root folder."
   Else
      Do Until f.IsRootFolder
         Set f = f.ParentFolder
         n = n + 1
      Loop
      DisplayLevelDepth = "The specified folder is nested " & n & " levels deep."
   End If
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：Folder 物件


Line 屬性

這是一個唯讀屬性，可傳回 TextStream 檔案中目前的行數。

object.Line

object 一律為 TextStream 物件的名稱。

附註

開啟檔案但未寫入任何內容之前，Line 等於 1。

下面的範例說明 Line 屬性的用法：

[JScript]
function GetLine()
{
   var fso, f, r
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\textfile.txt", ForWriting, true)
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\textfile.txt", ForReading);
   r =   f.ReadAll();
   return(f.Line);
}
[VBScript]
Function GetLine
   Const ForReading = 1, ForWriting = 2
   Dim fso, f, ra
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!" & vbCrLf & "VB Script is fun!" & vbCrLf
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ra =   f.ReadAll
   GetLine = f.Line
End Function

請參閱

Column 屬性

適用於：TextStream 物件


Name 屬性

設定或傳回指定檔案或資料夾的名稱。屬於讀/寫性質。

object.Name [= newname]

Name 屬性具有下列幾個部分：

組成部分 | 說明
object | 必要項。一律是 File 或 Folder 物件的名稱。
newname | 選擇項。如果提供的話，newname 就是指定給 object 的新名稱。

附註

下面的程式碼說明 Name 屬性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Name + " on Drive " + f.Drive + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


ParentFolder 屬性

傳回指定檔案或資料夾的上層 folder 物件。屬於唯讀性質。

object.ParentFolder

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用檔案的 ParentFolder 屬性：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Name + " in " + f.ParentFolder + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


Path 屬性 (FileSystemObject)

Scripting 執行階段程式庫

Path 屬性

傳回指定的檔案、資料夾或磁碟機的路徑。

object.Path

object 一律是 File、Folder 或 Drive 物件。

附註

在磁碟機代號方面，不包括根磁碟機。例如，C 磁碟機的路徑是 C: 而不是 C:\。

下面的程式碼說明如何使用 File 物件的 Path 屬性：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, d, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Path.toUpperCase() + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, d, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(f.Path) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

請參閱

Attributes 屬性 | AvailableSpace 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | DriveLetter 屬性 | DriveType 屬性 | Files 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | TotalSize 屬性 | Type 屬性 | VolumeName 屬性

適用於：Drive 物件 | File 物件 | Folder 物件


RootFolder 屬性

傳回一個 Folder 物件，代表指定磁碟機的根資料夾。屬於唯讀性質。

object.RootFolder

object 一律是 Drive 物件。

附註

使用傳回的 Folder 物件，可以存取該磁碟機上包含的所有檔案和資料夾。

下面的範例說明 RootFolder 屬性的用法：

[JScript]
function GetRootFolder(drv)
{
   var fso,d;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.DriveExists(drv))
      {
         d = fso.GetDrive(drv);
         return(d.RootFolder);
      }
   else
      return(false);
}
[VBScript]
Function ShowRootFolder(drvspec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetDrive(drvspec)
   ShowRootFolder = f.RootFolder
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


SerialNumber 屬性 (FileSystemObject)

Scripting 執行階段程式庫

SerialNumber 屬性

傳回可用來明確指定磁碟卷冊的小數。

object.SerialNumber

此 物件一律為 Drive 物件。

附註

可以利用 SerialNumber 屬性確認磁碟已插入正確的可移除影音程式磁碟機。

以下範例說明 SerialNumber 屬性的用法：

[JScript]
function ShowDriveInfo(drvpath){
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
  switch (d.DriveType)
  {
    case 0: t = "Unknown"; break;
    case 1: t = "Removable"; break;
    case 2: t = "Fixed"; break;
    case 3: t = "Network"; break;
    case 4: t = "CD-ROM"; break;
    case 5: t = "RAM Disk"; break;
  }
  s = "Drive " + d.DriveLetter + ": - " + t;
  s += "<br>" + "SN: " + d.SerialNumber;
  return(s);
}
[VBScript]
Function ShowDriveInfo(drvpath)
   Dim fso, d, s, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   Select Case d.DriveType
      Case 0: t = "Unknown"
      Case 1: t = "Removable"
      Case 2: t = "Fixed"
      Case 3: t = "Network"
      Case 4: t = "CD-ROM"
      Case 5: t = "RAM Disk"
   End Select
   s = "Drive " & d.DriveLetter & ": - " & t
   s = s & "<BR>" & "SN: " & d.SerialNumber
   ShowDriveInfo = s
End Function


ShareName 屬性

說明

傳回指定磁碟機的網路共享名稱。

語法

object.ShareName

object 一律是 Drive 物件。

附註

如果 object 不是網路磁碟機的話，ShareName 屬性會傳回一個長度為零的字串 ("")。

下面的程式碼說明 ShareName 屬性的用法：

[JScript]
function ShowDriveInfo(drvpath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
   s = "Drive " + d.DriveLetter + ": - " + d.ShareName;
   return(s);
}
[VBScript]
Function ShowDriveInfo(drvpath)
   Dim fso, d
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   ShowDriveInfo = "Drive " & d.DriveLetter & ": - " & d.ShareName
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | TotalSize 屬性 | VolumeName 屬性

適用於：Drive 物件


ShortName 屬性

傳回需要早期 8.3 命名規格的程式所使用的短式名稱。

object.ShortName

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用 File 物件的 ShortName 屬性：

[JScript]
function ShowShortName(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = "The short name for " + "" + f.Name;
   s += "" + "<br>";
   s += "is: " + "" + f.ShortName + "";
   return(s);
}
[VBScript]
Function ShowShortName(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = "The short name for "   & UCase(f.Name) & "<BR>"
   s = s & "is: " & f.ShortName
   ShowShortName = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


ShortPath 屬性

傳回需要早期 8.3 命名規格的程式所使用的短式路徑。

object.ShortPath

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用 File 物件的 ShortName 屬性：

[JScript]
function ShowShortPath(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = "The short path for " + "" + f.Name;
   s += "" + "<br>";
   s += "is: " + "" + f.ShortPath + "";
   return(s);
}
[VBScript]
Function ShowShortName(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = "The short name for "   & UCase(f.Name) & "<BR>"
   s = s & "is: " & f.ShortName
   ShowShortName = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


Size 屬性

對於檔案，傳回指定檔案的大小 (以位元組為單位)。對於資料夾，傳回資料夾包含的所有檔案和子資料夾的大小 (以位元組為單位)。

object.Size

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用 Folder 物件的 Size 屬性：

[JScript]
function ShowFolderSize(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(filespec);
   s = f.Name + " uses " + f.size + " bytes.";
   return(s);
}
[VBScript]
 Function ShowFolderSize(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(filespec)
   s = UCase(f.Name) & " uses " & f.size & " bytes."
   ShowFolderSize = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


SubFolders 屬性

傳回一個由指定資料夾中所有資料夾所組成的 Folders 集合物件，包括設定隱藏和系統檔案特性的資料夾在內。

object.SubFolders

object 通常是一個 Folder 物件。

附註

下面程式碼說明 SubFolders 屬性的用法：

[JScript]
function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (;!fc.atEnd(); fc.moveNext())
      {
         s += fc.item();
         s += "<br>";
      }
      return(s);
}
[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, s, sf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set sf = f.SubFolders
   For Each f1 in sf
      s = s & f1.name
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | Type 屬性

適用於：Folder 物件


TotalSize 屬性

傳回磁碟機或網路共用磁碟機的空間總量 (以位元組為單位)。

object.TotalSize

object 一律是 Drive 物件。

附註

下面的程式碼說明 TotalSize 屬性的用法：

[JScript]
function SpaceReport(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - ";
   s += d.VolumeName + "<br>";
   s += "Total Space: "+ d.TotalSize/1024 + " Kbytes <br>";
   s += "Free Space:   " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowSpaceInfo(drvpath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   s = "Drive " & d.DriveLetter & ":"
   s = s & vbCrLf
   s = s & "Total Size: " & FormatNumber(d.TotalSize/1024, 0) & " Kbytes"
   s = s & vbCrLf
   s = s & "Available: " & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes"
   ShowSpaceInfo = s
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | VolumeName 屬性

適用於：Drive 物件


Type 屬性

傳回有關檔案或資料夾型態的資訊。例如，對於以 .TXT 結束的檔案，它會傳回「Text Document」。

object.Type

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用 Type 屬性來傳回資料夾型態。在這個範例中，請試著提供「資源回收筒」或其他唯一資料夾的路徑給此程序。

[JScript]
function ShowFileType(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FolderExists(filespec))
      f = fso.GetFolder(filespec);
   else if (fso.FileExists(filespec))
      f = fso.GetFile(filespec);
   else
      s = "File or Folder does not exist.";
   s = f.Name + " is a " + f.Type;
   return(s);
}
[VBScript]
Function ShowFolderType(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(filespec)
   s = UCase(f.Name) & " is a " & f.Type
   ShowFolderType = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性

適用於：File 物件 | Folder 物件


VolumeName 屬性

設定或傳回指定磁碟機的磁區名稱。屬於讀/寫性質。

object.VolumeName [= newname]

說明

object
必要項。一律是 Drive 物件的名稱。
newname
選擇項。如果提供的話，newname 就是指定給 object 的新名稱。VolumeName 屬性具有下列幾個部分：

附註

下面的程式碼說明 VolumeName 屬性的用法：

[JScript]
function SpaceReport(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - ";
   s += d.VolumeName + "<br>";
   s += "Total Space: "+ d.TotalSize/1024 + " Kbytes <br>";
   s += "Free Space:   " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowVolumeInfo(drvpath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   s = "Drive " & d.DriveLetter & ": - " & d.VolumeName
   ShowVolumeInfo = s
End Function

請參閱

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性

適用於：Drive 物件


FileSystemObject 方法

本節包括

Add 方法 (字典)
新增索引鍵與項目對至 Dictionary 物件。
Add 方法 (資料夾)
新增新的資料夾至 Folders 集合。
BuildPath 方法
在現有路徑中附加名稱。
Close 方法
關閉開啟的 TextStream 檔案。
Copy 方法
將指定的檔案或資料夾從某個位置複製到其他位置。
CopyFile 方法
將一個或多個檔案從某個位置複製到其他位置。
CopyFolder 方法
定期將資料夾從某個位置複製到其他位置。
CreateFolder 方法
建立一個資料夾。
CreateTextFile 方法
建立一個指定的檔案名稱並傳回 TextStream 物件，該物件可以用來從檔案讀取或寫入檔案。
Delete 方法
刪除指定的檔案或資料夾。
DeleteFile 方法
刪除指定的檔案。
DeleteFolder 方法
刪除指定的資料夾及其內容。
DrivesExists 方法
如果指定的磁碟機存在則傳回 true；如果不存在則傳回 false。
Exists 方法
如果 Dictionary 物件中指定的索引鍵存在則傳回 true；如果不存在則傳回 false。
FileExists 方法
如果指定的檔案存在則傳回 true；如果不存在則傳回 false。
FolderExists 方法
如果指定的資料夾存在則傳回 true；如果不存在則傳回 false。
GetAbsolutePathName 方法
從提供的路徑規格傳回一個完整與不明的路徑。
GetBaseName 方法
傳回路徑中包含最後元件的基本名稱的字串，不包含任何副檔名。
GetDrive 方法
傳回指定路徑中與磁碟機相對應的 Drive 物件。
GetDriveName 方法
傳回一個包含指定路徑磁碟機的名稱的字串。
GetExtensionName 方法
傳回一個字串，該字串包含路徑中最後元件的延伸名稱。
GetFile 方法
傳回指定路徑中與檔案相對應的 File 物件。
GetFileName 方法
傳回不為磁碟機規格部份的指定路徑的最後元件。
GetFileVersion 方法
傳回指定檔案的版本編號。
GetFolder 方法
傳回指定路徑中與資料夾相對應的 Folder 物件。
GetParentFolderName 方法
傳回一個字串。在指定的路徑中該字串包含最後元件的父資料夾名稱。
GetSpecialFolder 方法
傳回指定的特別資料夾物件。
GetTempName 方法
傳回隨機產生的暫時檔或資料夾。在執行需要暫時檔或資料夾的操作時會非常有用。
Items 方法
傳回包含 Dictionary 物件中所有項目的陣列。
Keys 方法
傳回包含 Dictionary 物件中所有現存索引鍵的陣列。
Move 方法
將指定的檔案或資料夾從某個位置移至其他位置。
MoveFile 方法
將一個或多個檔案從某個位置移至其他位置。
MoveFolder 方法
將一個或多個資料夾從某個位置移至其他位置。
OpenAsTextStream 方法
開啟指定的檔案並傳回 TextStream 物件，該物件可以用來讀取檔案、寫入檔案或附加至檔案。
OpenTextFile 方法
開啟指定的檔案並傳回 TextStream 物件，該物件可以用來讀取檔案、寫入檔案或附加至檔案。
Read 方法
讀取 TextStream 檔案中指定的字元數並傳回結果字串。
ReadAll 方法
讀取整個的 TextStream 檔案並傳回結果字串。
ReadLine 方法
讀取 TextStream 檔案中的一整行 (最多，但是不包括新行字元) 並傳回結果字串。
Remove 方法
從 Dictionary 物件移除索引鍵、項目對。
RemoveAll 方法
從 Dictionary 物件移除所有索引鍵、項目對。
Skip 方法
讀取 TextStream檔時跳過指定的字元數。
SkipLine
在讀取 TextStream 檔時跳過下一行。
Write 方法
將指定字串寫入 TextStream檔。
WriteBlankLines 方法
將新行字元的指定行數寫入 TextStream檔。
WriteLine 方法
將指定字串與新行字元寫入 TextStream 檔。

相關章節

Scripting 執行階段參照
構成 Scripting 執行階段參照的元素清單。
FileSystemObject 基礎概念
FileSystemObject 基本資料的指南。


Add 方法 (Folders)

將一個新資料夾加入 Folders 集合物件中。

object.Add (folderName)

引數

object
必要項。通常是 Folders 集合物件的名稱。
folderName
必要項。是所加入新 Folder 的名稱。

附註

下面的範例說明建立新資料夾的 Add 方法的用法。

[JScript]
function AddNewFolder(path,folderName)
{
   var fso, f, fc, nf;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(path);
   fc = f.SubFolders;
   if (folderName != "" )
      nf = fc.Add(folderName);
   else
      nf = fc.Add("New Folder");
}
[VBScript]
Sub AddNewFolder(path, folderName)
   Dim fso, f, fc, nf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(path)
   Set fc = f.SubFolders
   If folderName <> "" Then
      Set nf = fc.Add(folderName)
   Else
      Set nf = fc.Add("New Folder")
   End If
End Sub

若 folderName 已存在，則會發生錯誤。

請參閱

Add 方法(Dictionary)

適用於：Folders 集合物件


BuildPath 方法

將一個名稱加到現有的路徑。

object.BuildPath(path, name)

引數

object
必要項。一律是 FileSystemObject.物件的名稱。
path
必要項。將名稱加到已經存在的路徑上。路徑可以是絕對的或是相對的，並且不需指定一個既存的資料夾。
name
必要項。將名稱加到既存的路徑。

附註

只有必要時 BuildPath 方法才會在現有路徑與名稱之間多插入一個路徑分隔符號。

下面的範例說明 BuildPath 方法的用法。

[JScript]
function GetBuildPath(path)
{
   var fso, newpath;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   newpath = fso.BuildPath(path, "New   Folder");
   return(newpath);
}
[VBScript]
Function GetBuildPath(path)
   Dim fso, newpath
   Set fso = CreateObject("Scripting.FileSystemObject")
   newpath = fso.BuildPath(path, "Sub Folder")
   GetBuildPath = newpath
End Function

請參閱

GetAbsolutePathName 方法| GetBaseName 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFileName 方法 | GetParentFolderName 方法 | GetTempName 方法

適用於：FileSystemObject 物件


Close 方法 (FileSystemObject)

Scripting 執行階段程式庫

Close 方法

關閉一個已打開的TextStream 檔案。

object.Close( );

此物件一律為 TextStream 物件的名稱。

附註

以下例子說明Close 方法的用法。

[JScript]
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");
a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
[VBScript]
Sub CreateAFile
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
   MyFile.WriteLine("This is a test.")
   MyFile.Close
End Sub


Copy 方法

將指定的檔案或資料夾從一個位置複製到另一個位置。

object.Copy( destination[, overwrite] );

引數

object
必要項。一律是 File 或 Folder 物件的名稱。.
destination
必要項。檔案或資料夾要複製過去的目的地。不允許使用萬用字元。
overwrite
選擇項。為布林值，若要覆寫現有檔案或資料夾，設為 True (預設值)；否則設為 False。

附註

對 File 或 Folder 使用 Copy 方法的結果，就等於是使用 FileSystemObject.CopyFile 或 FileSystemObject.CopyFolder (以引數的方式傳遞 object 來引用的檔案或資料夾) 執行的動作。但是請注意，替代的方法能夠複製多個檔案或資料夾。

範例

下面的範例說明 Copy 方法的用法。

[JScript]
var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.CreateTextFile("c:\\testfile.txt", true);
f.WriteLine("This is a test.");
f.Close();
f = fso.GetFile("c:\\testfile.txt");
f.Copy("c:\\windows\\desktop\\test2.txt");
[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close
Set MyFile = fso.GetFile("c:\testfile.txt")
MyFile.Copy ("c:\windows\desktop\test2.txt")

請參閱

CopyFile 方法 | CopyFolder 方法 | Delete 方法 | Move 方法 | OpenAsTextStream 方法

適用於：File 物件 | Folder 物件


CopyFile 方法

將一或多個檔案從一個位置複製到另一個位置。

object.CopyFile ( source, destination[, overwrite] )

引數

object
必要項。object 一律是 FileSystemObject 的名稱。
source
必要項。這是將要複製的一或多個檔案的檔案規格字串 (可以包括萬用字元)。.
destination
必要項。這是檔案要從 source 複製過去的目的地字元字串。不允許使用萬用字元。.
overwrite
選擇項。這個布林值可指示是否要覆寫現有的檔案。如果為 true，會覆寫檔案；如果為 false，則不會覆

寫。預設值是 true。請注意，如果 destination 已設定唯讀屬性的話，則不管 overwrite 的值為何，

CopyFile 都會失敗。

附註

只有 source 引數的最後一個路徑元件可以使用萬用字元。例如，您可以使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile ("c:\\mydocuments\\letters\\*.doc", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"

但不可以使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile ("c:\\mydocuments\\*\\R1???97.xls", "c:\\tempfolder")
[VBScript]
FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"

如果 source 包含萬用字元，或 destination 以路徑分隔符號 (\) 結束的話，會假設 destination 是現有的資料夾，並把符合的檔案複製過去；否則，會假設 destination 是要建立的檔案名稱。不管任一種情況，在複製個別的檔案時可能會發生三種狀況。

  • 如果 destination 不存在的話，會複製 source。這是一般的狀況。
  • 如果 destination 是現有檔案的話，若 overwrite 為 false，將會出現錯誤；否則會嘗試將 source 複製到現有檔案。
  • 如果 destination 是目錄的話，將會出現錯誤。

如果 source 所使用的萬用字元不符合任何檔案的話，也會出現錯誤。CopyFile 方法會在遇到第一個錯誤時停止，而且不會嘗試復原在發生錯誤前所做的任何變更。

請參閱

Copy 方法 | CopyFolder 方法 | CreateTextFile 方法 | DeleteFile 方法 | MoveFile 方法

適用於：FileSystemObject 物件


CopyFolder 方法

以遞迴方式將資料夾從一個位置複製到另一個位置。

object.CopyFolder ( source, destination[, overwrite] );

引數

object
必要項。一律是 FileSystemObject 的名稱。
source
必要項。這是將要複製的一或多個資料夾的字元字串資料夾規格 (可以包括萬用字元)。
destination
必要項。這是資料夾和子資料夾要從 source 複製過去的目的地字元字串。不允許使用萬用字元。
overwrite
選擇項。這個布林值可指出是否要覆寫現有的資料夾。如果為 true，會覆寫檔案；如果為 false，則不會

覆寫。預設值是 true。

附註

只有 source 引數的最後一個路徑元件可以使用萬用字元。例如，您可以使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder ("c:\\mydocuments\\letters\\*", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\"

But you cannot use:

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder ("c:\\mydocuments\\*\\*", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"

如果 source 包含萬用字元，或 destination 以路徑分隔符號 (\) 結束的話，會假設 destination 是現有的資料夾，並把符合的資料夾和子資料夾複製過去；否則，會假設 destination 是要建立的資料夾名稱。不管任一種情況，在複製個別的資料夾時可能會發生四種狀況。

  • 如果 destination 不存在的話，會複製 source 資料夾和其中的所有內容。這是一般的狀況。
  • 如果 destination 是現有檔案的話，將會出現錯誤。
  • 如果 destination 是目錄的話，會嘗試複製資料夾和其中的所有內容。如果 source 中包含的檔案已存在 destination中，當 overwrite 為 false 時，會出現錯誤；否則會嘗試將該檔案複製到現有檔案。
  • 如果 destination 是唯讀目錄的話，若試圖將現有的唯讀檔案複製到該目錄中，而且 overwrite 為 false，就會出現錯誤。

如果 source 所使用的萬用字元不符合任何資料夾的話，也會出現錯誤。

CopyFolder 方法會在遇到第一個錯誤時停止，而且不會嘗試復原在發生錯誤前所做的任何變更。

請參閱

CopyFile 方法 | Copy 方法 | CreateFolder 方法 | DeleteFolder 方法 | MoveFolder 方法

適用於：FileSystemObject 物件


CreateFolder 方法

建立一個資料夾。

object.CreateFolder(foldername)

引數

object
必要項。一律是 FileSystemObject 的名稱。
foldername
必要項。這是用來識別即將建立之資料夾的字串運算式。

附註

如果指定的資料夾已經存在的話，將會出現錯誤。

下面的程式碼說明如何使用 CreateFolder 方法來建立資料夾。

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateFolder("c:\\new folder");
[VBScript]
Function CreateFolderDemo
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.CreateFolder("c:\New Folder")
   CreateFolderDemo = f.Path
End Function

請參閱

CopyFolder 方法 | DeleteFolder 方法 | MoveFolder

適用於：FileSystemObject 物件


CreateTextFile 方法

建立指定的檔案名稱，並傳回一個 TextStream 物件，以便用來讀取和寫入該檔案。

object.CreateTextFile(filename[, overwrite[, unicode]])

引數

object
必要項。一律是 FileSystemObject 或 Folder 物件的名稱。
filename
必要項。這是用來識別即將建立之檔案的字串運算式。
overwrite
選擇項。這個布林值可指出是否可以覆寫現有的檔案。如果可以覆寫檔案的話，此值為 true；否則為 false。如果予於省略，則不會覆寫現有的檔案。
unicode
選擇項。這個布林值可指出要建立 Unicode 或 ASCII 檔案。如果要建立 Unicode 檔案，此值為 true；

如果要建立 ASCII 檔案，則為 false。如果予於省略，則假定是 ASCII 檔案。CreateTextFile 方法具有下列幾個部分：

附註

下面的程式碼說明如何使用 CreateTextFile 方法來建立和開啟文字檔。

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
[VBScript]
Sub CreateAfile
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
   MyFile.WriteLine("This is a test.")
   MyFile.Close
End Sub

當 filename 已經存在時，如果 overwrite 引數是 false 或未提供的話，將會出現錯誤。

請參閱

CreateFolder 方法 | OpenAsTextStream 方法 | OpenTextFile 方法

適用於：FileSystemObject 物件 | Folder 物件


DateCreated 屬性

傳回指定檔案或資料夾的建立日期與時間。屬於唯讀性質。

object.DateCreated

object 一律是 File 或 Folder 物件。

附註

下面的程式碼說明如何使用檔案的 DateCreated 屬性：

[JScript]
function ShowFileInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = "Created: " + f.DateCreated;
   return(s);
}
[VBScript]
Function ShowFileInfo(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   ShowFileInfo = "Created: " & f.DateCreated
End Function

請參閱

Attributes 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：File 物件 | Folder 物件


Delete 方法

刪除一個指定的檔案或資料夾。

object.Delete( force );

引數

object
必要項。一律是 File 或 Folder 物件的名稱。
force
選擇項。如果要刪除設定為唯讀屬性的檔案或資料夾時，布林值為 True；否則為 False (預設值)。

Delete 方法的語法具有下列幾個部分：

附註

如果指定的檔案或資料夾不存在，將會出現錯誤。

對 File 或 Folder 使用 Delete 方法的結果，就等於是使用 FileSystemObject.DeleteFile 或 FileSystemObject.DeleteFolder 所執行的動作。

Delete 方法不管資料夾是否包含內容，都會將指定的資料夾刪除。

下面的範例說明 Delete 方法的用法。

[JScript]
var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.CreateTextFile("c:\\testfile.txt", true);
f.WriteLine("This is a test.");
f.Close();
f = fso.GetFile("c:\\testfile.txt");
f.Delete();
[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close
Set MyFile = fso.GetFile("c:\testfile.txt")
MyFile.Delete

請參閱

Copy 方法 | DeleteFile 方法 | DeleteFolder 方法 | Move 方法 | OpenAsTextStream

適用於：File 物件 | Folder 物件


DeleteFile 方法

刪除指定的檔案。

object.DeleteFile ( filespec[, force] );

引數

object
必要項。一律是 FileSystemObject 的名稱。
filespec
必要項。這是要刪除的檔案名稱。filespec 的最後一個路徑元件可以包含萬用字元。.
force
選擇項。如果要刪除設定為唯讀屬性的檔案，布林值為 true；否則為 false (預設值)。

附註

如果找不到符合的檔案，將會出現錯誤。DeleteFile 方法會在遇到第一個錯誤時停止，而且不會嘗試復原在發生錯誤前所做的任何變更。

下面的範例說明 DeleteFile 方法的用法。

[JScript]
function DeleteFile(filespec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.DeleteFile(filespec);
}
[VBScript]
Sub DeleteAFile(filespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.DeleteFile(filespec)
End Sub

請參閱

CopyFile 方法 | CreateTextFile 方法 | Delete 方法 | DeleteFolder 方法 | MoveFile

適用於：FileSystemObject 物件


DeleteFolder 方法

刪除指定的資料夾和其中的內容。

object.DeleteFolder ( folderspec[, force] );

引數

object
必要項。一律是 FileSystemObject 的名稱。.
folderspec
必要項。這是要刪除的資料夾名稱。folderspec 的最後一個路徑元件可以包含萬用字元。.
force
選擇項。如果要刪除設定為唯讀屬性的資料夾，布林值為 true；否則為 false (預設值)。

附註

DeleteFolder 方法不會管資料夾是否包含內容，都會將指定的資料夾刪除。

如果找不到符合的資料夾，將會出現錯誤。DeleteFolder 方法會在遇到第一個錯誤時停止，而且不會嘗試復原在發生錯誤前所做的任何變更。

下面的範例說明 DeleteFolder 方法的用法。

[JScript]
function DeleteFolder(folderspec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.DeleteFolder(folderspec);
}
[VBScript]
Sub DeleteAFolder(filespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.DeleteFolder(filespec)
End Sub

請參閱

CopyFolder 方法 | CreateFolder 方法 | Delete 方法 | DeleteFile 方法 | MoveFolder 方法

適用於：FileSystemObject 物件


DriveExists 方法

如果指定的磁碟機存在的話，就會傳回 True；否則會傳回 False。

object.DriveExists(drivespec)

引數

object
必要項。一律是 FileSystemObject 的名稱。.
drivespec
必要項。這是磁碟機代號或完整的路徑規格。

附註

對於使用抽取式媒體的磁碟機，即使沒有媒體時，DriveExists 方法一樣會傳回 true。若要確定磁碟機是否已準備就緒，請使用 Drive 物件的 IsReady 屬性。

下面的範例說明 DriveExists 方法的用法。

[JScript]
function ReportDriveStatus(drv)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.DriveExists(drv))
      s += "Drive " + drv + " exists.";
   else
      s += "Drive " + drv + " doesn't exist.";
   return(s);
}
[VBScript]
Function ReportDriveStatus(drv)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If fso.DriveExists(drv) Then
      msg = ("Drive " & UCase(drv) & " exists.")
   Else
      msg = ("Drive " & UCase(drv) & " doesn't exist.")
   End If
   ReportDriveStatus = msg
End Function

請參閱

Drive 物件 | Drives 集合物件 | FileExists 方法 | FolderExists 方法 | GetDrive 方法 | GetDriveName 方法 | IsReady 屬性

適用於：FileSystemObject 物件


FileExists 方法

如果指定的檔案存在的話，就會傳回 True；否則會傳回 False。

object.FileExists(filespec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
filespec
必要項。這是要確定是否存在的檔案名稱。如果不預期檔案存在目前的資料夾中，就必須提供完整的路徑規

格 (絕對或相對的)。

下面的範例說明 FileExists 方法的用法。

[JScript]
function ReportFileStatus(filespec)
{
   var fso, s = filespec;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FileExists(filespec))
      s += " exists.";
   else
      s += " doesn't exist.";
   return(s);
}
[VBScript]
Function ReportFileStatus(filespec)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FileExists(filespec)) Then
      msg = filespec & " exists."
   Else
      msg = filespec & " doesn't exist."
   End If
   ReportFileStatus = msg
End Function

請參閱

DriveExists 方法 | FolderExists 方法 | GetFile 方法 | GetFileName 方法

適用於：FileSystemObject 物件


Files 屬性

傳回一個包含在指定資料夾中組成所有 File 物件的 Files 集合物件，其中包含設定隱藏和系統檔案屬性的資料夾。

object.Files

object 通常是一個 Folder 物件。

附註

下面程式碼說明 Files 屬性的用法：

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]
   Function ShowFileList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name
      s = s &   "<BR>"
   Next
   ShowFileList = s
End Function

請參閱

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

適用於：Folder 物件


FolderExists 方法

如果指定的資料夾存在的話，就會傳回 True；否則會傳回 False。

object.FolderExists(folderspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
folderspec
必要項。這是要確定是否存在的資料夾名稱。如果不預期資料夾存在目前的資料夾中，就必須提供完整的路

徑規格 (絕對或相對的)。

下面的範例說明 FileExists 方法的用法。

[JScript]
function ReportFolderStatus(fldr)
{
   var fso, s = fldr;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FolderExists(fldr))
      s += " exists.";
   else
      s += " doesn't exist.";
   return(s);
}
[VBScript]
Function ReportFolderStatus(fldr)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FolderExists(fldr)) Then
      msg = fldr & " exists."
   Else
      msg = fldr & " doesn't exist."
   End If
   ReportFolderStatus = msg
End Function

請參閱

DriveExists 方法 | FileExists 方法 | GetFolder 方法 | GetParentFolderName 方法

適用於：FileSystemObject 物件


GetAbsolutePathName 方法

根據提供的路徑規格傳回完整、明確的路徑。

object.GetAbsolutePathName(pathspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
pathspec
必要項。要傳回之完整、明確路徑所依據的路徑規格。.

附註

如果路徑提供從指定磁碟機之根目錄開始的完整參考，則該路徑就是完整而明確的。只有當完整路徑指定了對應之磁碟機的根資料夾時，才能夠以路徑分隔字元 (\) 結束。

假設目前的目錄是 c:\mydocuments\reports，以下表說明 GetAbsolutePathName 方法的行為。

pathspec | 傳回的路徑
"c:" | "c:\mydocuments\reports"
"c:.." | "c:\mydocuments"
"c:\\" | "c:\"
"c:*.*\\may97" | "c:\mydocuments\reports\*.*\may97"
"region1" | "c:\mydocuments\reports\region1"
"c:\\..\\..\\mydocuments" | "c:\mydocuments"

下面的範例說明 GetAbsolutePathName 方法的用法。

function ShowAbsolutePath(path)
{
   var fso, s= "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetAbsolutePathName(path);
   return(s);
}

請參閱

GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法| GetTempName 方法

適用於：FileSystemObject 物件


GetBaseName 方法

傳回一個字串，其中包含路徑中最後一個元件的基底名稱 (去掉任何副檔名)。

object.GetBaseName(path)

引數

object
必要項。一律是 FileSystemObject 的名稱。
path
必要項。這是要傳回基底名稱之元件的路徑規格。

附註

如果沒有任何元件符合 path 引數的話，GetBaseName 方法會傳回長度為零的字串 ("")。

備註 GetBaseName 方法只會處理提供的 path 字串。它不會試圖分析該路徑，也不會檢查指定的路徑是否存在。

下面的範例例說明 GetBaseName 方法的用法。

[JScript]
function ShowBaseName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetBaseName(filespec);
   return(s);
}
[VBScript]
Function GetTheBase(filespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetTheBase = fso.GetBaseName(filespec)
End Function

請參閱

GetAbsolutePathName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetDrive 方法

傳回對應到指定路徑中磁碟機的 Drive 物件。

object.GetDrive ( drivespec );

引數

object
必要項。一律是 FileSystemObject 的名稱。
drivespec
必要項。drivespec 引數可以是一個磁碟機代號 (c)、加了冒號的磁碟機代號 (c:)、加了冒號和路徑分隔符號的磁碟機代號 (c:\)，或任何網路共用規格 (\\computer2\share1)。

附註

對於網路共用磁碟機，會先做檢查以確定共用磁碟機是否存在。

如果 drivespec 不符合任何一個有效形式，或不存在的話，將會出現錯誤。

若要對一般路徑字串呼叫 GetDrive 方法，請使用以下順序來取得適合作為 drivespec 的字串：

[JScript]

DriveSpec = GetDriveName(GetAbsolutePathName(Path))
[JScript]

下面的範例說明 GetDrive 方法的用法。

[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath.toUpperCase( ) + " - ";
   s += d.VolumeName + "<br>";
   s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
DriveSpec = GetDriveName(GetAbsolutePathName(Path))

[VBScript]

下面的範例說明 GetDrive 方法的用法。

[VBScript]
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetDriveName 方法

○傳回一個字串，其中包含指定路徑的磁碟機名稱。

object.GetDriveName(path)

引數

object
必要項。一律是 FileSystemObject 的名稱。
path
必要項。這是要傳回元件之磁碟機名稱的路徑規格。

備註

如果無法確定磁碟機的話，GetDriveName 方法會傳回長度為零的字串 ("")。

備註 GetDriveName 方法只會處理提供的 path 字串。它不會試圖分析該路徑，也不會檢查指定的路徑是否存在。

下面的範例說明 GetDriveName 方法的用法。

[JScript]
function GetDriveLetter(path)
{
   var fso, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(path)));
   return(s);
}
[VBScript]
Function GetAName(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAName = fso.GetDriveName(Drivespec)
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetExtensionName 方法

傳回一個字串，其中包含路徑中最後一個元件的副檔名。

object.GetExtensionName(path)

引數

object
必要項。一律是 FileSystemObject 的名稱。
path
必要項。這是要傳回副檔名之元件的路徑規格。

附註

對於網路磁碟機，會將根目錄 (\) 當成一個元件。

如果沒有任何元件符合 path 引數的話，GetExtensionName 方法會傳回長度為零的字串 ("")。

下面的範例說明 GetExtensionName 方法的用法。

[JScript]
function ShowExtensionName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetExtensionName(filespec);
   return(s);
}
[VBScript]
Function GetAnExtension(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAnExtension = fso.GetExtensionName(Drivespec)
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetFile 方法

傳回對應到指定路徑中檔案的 File 物件。

object.GetFile(filespec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
filespec
必要項。filespec 代表指定檔案的路徑 (絕對或相對的)。

附註

如果指定的檔案不存在的話，將會出現錯誤。

下面的範例說明 GetFile 方法的用法。

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Path.toUpperCase() + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Path & "<br>"
   s = s & "Created: " & f.DateCreated & "<br>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<br>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetFileName 方法

傳回指定的路徑中非磁碟機規格部分的最後一個元件。

object.GetFileName(pathspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
pathspec
必要項。某特定檔案的所在路徑 (絕對或相對的)。

附註

如果 pathspec 不是以指名元件結束的話，GetFileName 方法會傳回長度為零的字串 ("")。

備註 GetFileName 方法只會處理提供的路徑字串。它不會試圖分析該路徑，也不會檢查指定的路徑是否存在。

下面的範例說明 GetFileName 方法的用法。

[JScript]
function ShowFileName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetFileName(filespec);
   return(s);
}
[VBScript]
Function GetAName(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAName = fso.GetFileName(DriveSpec)
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetFileVersion 方法

傳回指定檔案的版本編號。

object.GetFileVersion(pathspec)

引數

object
必要項。一律是FileSystemObject 的名稱。
pathspec
必要項。某特定檔案的所在路徑 (絕對或相對的)。

附註

如果 pathspec 不是以命名的元件作結尾的話，GetFileVersion 方法會傳回零長度字串 ("")。

備註 GetFileVersion方法只有在提供的 path 字串中才有作用。它並不會嘗試解決路徑、也不會檢查指定的路徑是否存在。

下面的範例說明 GetFileVersion 方法的用法。

[JScript]
function ShowFileName(filespec){
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetFileVersion(filespec);
   return(s);
}
[VBScript]
Function GetVersion(DriveSpec)
   Dim fso, temp
   Set fso = CreateObject("Scripting.FileSystemObject")
   temp = fso.GetFileVersion(pathspec)
   If Len(temp) Then
      GetVersion = temp
   Else
      GetVersion = "No version information available."
   End If
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
適用於：FileSystemObject 物件


GetFolder 方法

傳回對應到指定路徑中資料夾的 Folder 物件。

object.GetFolder(folderspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
folderspec
必要項。folderspec 是特定資料夾所在的路徑 (絕對或相對的)。

附註

如果指定的資料夾不存在的話，將會出現錯誤。

下面的範例說明 GetFolder 方法的用法。

[JScript]
function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]
Sub AddNewFolder(path, folderName)
   Dim fso, f, fc, nf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(path)
   Set fc = f.SubFolders
   If folderName <> "" Then
      Set nf = fc.Add(folderName)
   Else
      Set nf = fc.Add("New Folder")
   End If
End Sub

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetParentFolderName 方法

傳回一個字串，其中包含指定路徑中最後一個元件的上層資料夾名稱。

object.GetParentFolderName(path)

引數

object
必要項。一律是 FileSystemObject 的名稱。
path
必要項。這是要傳回上層資料夾名稱之元件的路徑規格。

附註

如果 path 引數中未指定元件的任何上層資料夾的話，GetParentFolderName 方法會傳回長度為零的字串 ("")。

備註 GetParentFolderName 方法只有在提供的 path 字串中才有作用。它並不會嘗試解決路徑、也不會檢查指定的路徑是否存在。

下面的範例說明 GetParentFolderName 方法的用法。

[JScript]
function ShowParentFolderName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetParentFolderName(filespec);
   return(s);
}
[VBScript]
Function GetTheParent(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetTheParent = fso.GetParentFolderName(Drivespec)
End Function

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetSpecialFolder 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetSpecialFolder 方法

傳回指定的特殊資料夾物件。

object.GetSpecialFolder(folderspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
folderspec
必要項。這是要傳回的特殊資料夾名稱，它可以是顯示在「設定值」一節中的任何常數。

設定值

folderspec 引數可以具有下列的任何值：

常數 | 值 | 說明
WindowsFolder | 0 | Windows 資料夾，包含由 Windows 作業系統所安裝的檔案。
SystemFolder | 1 | System 資料夾，包含程式庫、字型和週邊設備驅動程式。
TemporaryFolder | 2 | Temp 資料夾，是用來儲存暫存檔。它的路徑設在 TMP 環境變數中。

下面的範例說明 GetSpecialFolder 方法的用法。

[JScript]
var fso, tempfile;
fso = new ActiveXObject("Scripting.FileSystemObject");

function CreateTempFile()
{
   var tfolder, tfile, tname, fname, TemporaryFolder = 2;
   tfolder = fso.GetSpecialFolder(TemporaryFolder);
   tname = fso.GetTempName();
   tfile = tfolder.CreateTextFile(tname);
   return(tfile);
}
tempfile = CreateTempFile();
tempfile.writeline("Hello World");
tempfile.close();
[VBScript]
Dim fso, tempfile
Set fso = CreateObject("Scripting.FileSystemObject")

Function CreateTempFile
   Dim tfolder, tname, tfile
   Const TemporaryFolder = 2
   Set tfolder = fso.GetSpecialFolder(TemporaryFolder)
   tname = fso.GetTempName
   Set tfile = tfolder.CreateTextFile(tname)
   Set CreateTempFile = tfile
End Function

Set tempfile = CreateTempFile
tempfile.WriteLine "Hello World"
tempfile.Close

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetTempName 方法

適用於：FileSystemObject 物件


GetTempName 方法

傳回隨機產生的暫存檔或暫存資料夾名稱，對於需要暫存檔或暫存資料夾才能執行的動作很有幫助。

object.GetTempName ( );

選擇性的 object 一律是 FileSystemObject 的名稱。

附註

GetTempName 方法不會建立檔案，只會提供暫存檔名稱給 CreateTextFile 用來建立檔案。

下面的範例說明 GetTempName 方法的用法。

[JScript]

[JScript]
var fso, tempfile;
fso = new ActiveXObject("Scripting.FileSystemObject");

function CreateTempFile()
{
   var tfolder, tfile, tname, fname, TemporaryFolder = 2;
   tfolder = fso.GetSpecialFolder(TemporaryFolder);
   tname = fso.GetTempName();
   tfile = tfolder.CreateTextFile(tname);
   return(tfile);
}
tempfile = CreateTempFile();
tempfile.writeline("Hello World");
tempfile.close();
[VBScript]
Dim fso, tempfile
Set fso = CreateObject("Scripting.FileSystemObject")

Function CreateTempFile
   Dim tfolder, tname, tfile
   Const TemporaryFolder = 2
   Set tfolder = fso.GetSpecialFolder(TemporaryFolder)
   tname = fso.GetTempName
   Set tfile = tfolder.CreateTextFile(tname)
   Set CreateTempFile = tfile
End Function

Set tempfile = CreateTempFile
tempfile.WriteLine "Hello World"
tempfile.Close

請參閱

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法

適用於：FileSystemObject 物件


Move 方法

將指定的檔案或資料夾從一個移到另一個位置。

object.Move( destination );

引數

object
必要項。一律是 File 或 Folder 物件的名稱。
destination
必要項。這是檔案或資料夾將移過去的目的地。不允許使用萬用字元。

附註

對 File 或 Folder 使用 Move 方法的結果，就等於是使用 FileSystemObject.MoveFile 或 FileSystemObject.MoveFolder 所執行的動作。但是請注意，替代的方法能夠移動多個檔案或資料夾。

請參閱

Copy 方法 | Delete 方法 | MoveFile 方法 | MoveFolder 方法 | OpenAsTextStream 方法

適用於：File 物件 | Folder 物件


MoveFile 方法

將一或多個檔案從一個位置移到另一個位置。

object.MoveFile ( source, destination );

引數

object
必要項。一律是 FileSystemObject 的名稱。
source
必要項。這是將要移動之一或多個檔案的來源路徑。只有 source 引數字串的最後一個路徑元件才可以包含萬用字元。
destination
必要項。這是一或多個檔案即將移過去的目標路徑。destination 引數不得包含萬用字元。

附註

如果 source 包含萬用字元，或 destination 以路徑分隔符號 (\) 結束的話，會假設 destination 是指定現有的資料夾，並把符合的檔案移過去；否則，會假設 destination 是要建立的目的地檔案名稱。不管那一種情況，在移動個別的檔案時可能會發生三種狀況：

  • 如果 destination 不存在，會移動檔案。這是一般的狀況。
  • 如果 destination 是現存檔案，將會出現錯誤。
  • 如果 destination 是目錄，將會出現錯誤。

如果 source 所使用的萬用字元不符合任何檔案的話，也會出現錯誤。MoveFile 方法會在遇到第一個錯誤時停止，而且不會嘗試復原在發生錯誤前所做的任何變更。

備註 只有當作業系統支援時，這個方法才允許在不同磁區之間移動檔案。

下面的範例說明 MoveFile 方法的用法：

[JScript]
function MoveFile2Desktop(filespec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.MoveFile(filespec, "c:\\windows\\desktop\\");
}
[VBScript]
Sub MoveAFile(Drivespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.MoveFile Drivespec, "c:\windows\desktop\"
End Sub

請參閱

CopyFile 方法 | DeleteFile 方法 | GetFile 方法 | GetFileName 方法 | Move 方法 | MoveFolder 方法 | OpenTextFile 方法

適用於：FileSystemObject 物件


MoveFolder 方法

將一個或多個資料夾從一個位置移到另一個位置。

object.MoveFolder ( source, destination );

引數

object
必要項。一律是 FileSystemObject 的名稱。
source
必要項。這是將要移動之一或多個資料夾的來源路徑。只有 source 引數字串的最後一個路徑元件才可以包含萬用字元。
destination
必要項。這是一或多個資料夾即將移過去的目標路徑。destination 引數不得包含萬用字元。

將一或多個資料夾從一個位置移到另一個位置。

附註

如果 source 包含萬用字元，或 destination 以路徑分隔符號 (\) 結束的話，會假設 destination 是指定現有的資料夾，並把符合的檔案移過去；否則，會假設 destination 是要建立的目的地資料夾名稱。不管那一種情況，在移動個別的資料夾時可能會發生三種狀況：

  • 如果 destination 不存在，會移動資料夾。這是一般的狀況。
  • 如果 destination 是現存檔案，將會出現錯誤。
  • 如果 destination 是目錄，將會出現錯誤。

如果 source 所使用的萬用字元不符合任何資料夾的話，也會出現錯誤。MoveFolder 方法會在遇到第一個錯誤時停止，而且不會嘗試復原在發生錯誤前所做的任何變更。

重要 只有當作業系統支援時，這個方法才允許在不同磁區之間移動資料夾。

下面的範例說明 MoveFolder 方法的用法：

[JScript]
function MoveFldr2Desktop(fldrspec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.MoveFolder(fldrspec, "c:\\windows\\desktop\\");
}
[VBScript]
Sub MoveAFolder(Drivespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.MoveFolder Drivespec, "c:\windows\desktop\"
End Sub

請參閱

CopyFile 方法 | DeleteFile 方法 | GetFile 方法 | GetFileName 方法 | Move 方法 | MoveFile 方法 | OpenTextFile 方法

適用於：FileSystemObject 物件


OpenAsTextStream 方法

開啟指定的檔案，並傳回一個 TextStream 物件，以便用來讀取、寫入和附加資料到該檔案。

object.OpenAsTextStream([iomode, [format]])

引數

object
必要項。一律是 File 物件的名稱。
iomode
選擇項。指出輸入/輸出模式。可以是以下三個常數之一：ForReading、ForWriting 或 ForAppending。
format
選擇項。這是三個 Tristate 值之一，用來指出已開啟檔案的格式。如果予於省略，會以 ASCII 方式開啟檔案。 OpenAsTextStream 方法的語法具有下列幾個部分：

設定值

iomode 引數可以是下列其中一個設定：

常數 | 值 | 說明
ForReading | 1 | 開啟唯讀檔案。您無法寫入此檔案。
ForWriting | 2 | 開啟可寫入的檔案。如果存在同名檔案的話，會覆寫原先的內容。
ForAppending | 8 | 開啟檔案，並寫入檔案的結尾處。

format 引數可以是下列其中一個設定：

常數 | 值 | 說明
TristateUseDefault | -2 | 使用系統預設值開啟檔案。
TristateTrue | -1 | 以 Unicode 方式開啟檔案。
TristateFalse | 0 | 以 ASCII 方式開啟檔案。

附註

OpenAsTextStream 方法所提供的功能與 FileSystemObject 的 OpenTextFile 方法一樣。此外，OpenAsTextStream 方法還可以用來寫入檔案。

下面的程式碼說明 OpenAsTextStream 方法的用法：

[JScript]
function TextStreamTest( )
{
   var fso, f, ts, s;
   var ForReading = 1, ForWriting = 2, ForAppending = 8;
   var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.CreateTextFile( "test1.txt" );           // 建立一個檔案。
   f = fso.GetFile("test1.txt");
   ts = f.OpenAsTextStream(ForWriting, TristateUseDefault);
   ts.Write( "Hello World" );
   ts.Close( );
   ts = f.OpenAsTextStream(ForReading, TristateUseDefault);
   s = ts.ReadLine( );
   ts.Close( );
   return(s);
}
[VBScript]
Function TextStreamTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
   Dim fso, f, ts
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.CreateTextFile "test1.txt"   ' 建立一個檔案。
   Set f = fso.GetFile("test1.txt")
   Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
   ts.Write "Hello World"
   ts.Close
   Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
   TextStreamTest = ts.ReadLine
   ts.Close
End Function

請參閱

Copy 方法 | CreateTextFile 方法 | Delete 方法 | Move 方法 | OpenTextFile 方法

適用於：File 物件


OpenTextFile 方法

開啟指定的檔案，並傳回一個 TextStream 物件，以便用來讀取、寫入和附加資料到該檔案。

object.OpenTextFile(filename[, iomode[, create[, format]]])

引數

object
必要項。一律是 FileSystemObject 的名稱。
filename
必要項。這是用來識別即將開啟之檔案的字串運算式。
iomode
選擇項。可以是以下三個常數之一：ForReading、ForWriting 或 ForAppending。
create
選擇項。這個布林值指出當指定的 filename 不存在時，是否要建立新檔案。如果要建立新檔案的話，此值為 True，否則為 False。如果予於省略，則不建立新檔案。
format
選擇項。這是三個 Tristate 值之一，用來指出已開啟檔案的格式。如果予於省略，會以 ASCII 方式開啟檔案。

設定值

iomode 引數可以是下列其中一個設定：

常數 | 值 | 說明
ForReading | 1 | 開啟唯讀檔案。您無法寫入此檔案。
ForWriting | 2 | 開啟可寫入的檔案。
ForAppending | 8 | 開啟檔案，並寫入檔案的結尾處。

format 引數可以是下列其中一個設定：

值 | 說明
TristateTrue | 以 Unicode 方式開啟檔案。
TristateFalse | 以 ASCII 方式開啟檔案。
TristateUseDefault | 使用系統預設值開啟檔案。

附註

下面的程式碼說明如何使用 OpenTextFile 方法來開啟檔案以加入文字：

[JScript]
var fs, a, ForAppending;
ForAppending = 8;
fs = new ActiveXObject("Scripting.FileSystemObject");
a = fs.OpenTextFile("c:\\testfile.txt", ForAppending, false);
...
a.Close();
[VBScript]
Sub OpenTextFileTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   f.Close
End Sub

請參閱

CreateTextFile 方法 | OpenAsTextStream 方法

適用於：FileSystemObject 物件


Read 方法 (FileSystemObject)

Scripting 執行階段程式庫

Read 方法

說明

從 TextStream 檔案讀取指定個數的字元，並傳回結果字串。

object.Read(characters)

引數

object
必要項。一律為 TextStream 物件的名稱。
characters
必要項。您要從檔案中讀取的字元數。

下面的範例說明如何使用 Read 方法從檔案讀取一個 6 個字元的前置資料，並傳回結果字串：

[JScript]
function GetHeader()
{
   var fso, f;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Header");
   f.Write("1234567890987654321");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   return(f.Read(6));
}
[VBScript]
Function ReadTextFileTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Dim fso, f, Msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ReadTextFileTest = f.Read(5)
End Function

請參閱

ReadAll 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法

適用於：TextStream 物件


ReadAll 方法 (FileSystemObject)

Scripting 執行階段程式庫

ReadAll 方法

讀取整個 TextStream 檔案並傳回結果字串。

object.ReadAll( );

object 一律為 TextStream 物件的名稱。

附註

若對大型的檔案使用 ReadAll 方法會浪費記憶體資源。應使用其他的方法來輸入檔案，例如逐行讀取檔案。

下面的範例說明 ReadAll 方法的用法：

[JScript]
function GetEverything()
{
   var fso, f;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Header");
   f.Write("1234567890987654321");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   return(f.ReadAll());
}
[VBScript]
Function ReadAllTextFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ReadAllTextFile =   f.ReadAll
End Function

請參閱

Read 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法

適用於：TextStream 物件


ReadLine 方法 (FileSystemObject)

Scripting 執行階段程式庫

ReadLine 方法

從 TextStream 檔案讀取整行 (幾乎一整行，但不包含換行字元)，並傳回結果字串。

object.ReadLine( )

object 引數一律為 TextStream 物件的名稱。

附註

下面的範例說明 Line 屬性的用法：

[JScript]
function GetLine()
{
   var fso, f, r;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   r =  f.ReadLine();
   return(r);
}
[VBScript]
Function ReadLineTextFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   MyFile.WriteLine "Hello world!"
   MyFile.WriteLine "The quick brown fox"
   MyFile.Close
   Set MyFile = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ReadLineTextFile = MyFile.ReadLine    ' Returns "Hello world!"
End Function

請參閱

Read 方法 | ReadAll 方法 | Skip 方法 | SkipLine 方法

適用於：TextStream 物件


Skip 方法 (FileSystemObject)

Scripting 執行階段程式庫

Skip 方法

說明

在讀取 TextStream 檔案時略過指定個數的字元。

object.Skip(characters)

引數

object
必要項。一律為 TextStream 物件的名稱。
characters
必要項。讀取檔案時要跳過的字元數。

附註

將會捨去跳過的字元。

下面的範例說明 Skip 方法的用法：

[JScript]
function SkipDemo()
{
   var fso, f, r;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   f.Skip(6);
   r = f.ReadLine();
   return(r);
}
[VBScript]
Function SkipTextFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   f.Skip(6)
   SkipTextFile =   f.ReadLine
End Function

請參閱

Close 方法 | Read 方法 | ReadAll 方法 | ReadLine 方法 | SkipLine 方法 | Write 方法 | WriteLine 方法 | WriteBlankLines 方法

適用於：TextStream 物件


SkipLine 方法 (FileSystemObject)

Scripting 執行階段程式庫

SkipLine 方法

讀取 TextStream 檔案時跳過下一行。

object.SkipLine( )

object 一律為 TextStream 物件的名稱。

附註

下面的範例說明 SkipLine 方法的用法：

[JScript]
function SkipLineDemo()
{
   var fso, f, r
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true)
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   f.SkipLine();
   r = f.ReadLine();
   return(r);
}
[VBScript]
Function SkipLineInFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!" & vbCrLf & "VB Script is fun!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   f.SkipLine
   SkipLineInFile = f.ReadLine
End Function

請參閱

Read 方法 | ReadAll 方法 | ReadLine 方法 | Skip 方法

適用於：TextStream 物件


Write 方法 (FileSystemObject)

Scripting 執行階段程式庫

Write 方法

在 TextStream 檔案中寫入指定的字串。

object.Write(string)

引數

object
必要項。一律為 TextStream 物件的名稱。
string
必要項。在檔案中寫入您想要的文字。

附註

當使用本方法在檔案中寫入指定的字串時，每個字串之間不會加上任何間距空格或字元。使用 WriteLine 方法可寫入換行字元或以換行字元結尾的字串。

下面的範例說明 Write 方法的用法：

[JScript]
function WriteDemo()
{
   var fso, f, r
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true)
   f.Write("Hello world!");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   r = f.ReadLine();
   return(r);
}
[VBScript]
Function WriteToFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   WriteToFile =   f.ReadLine
End Function

請參閱

WriteBlankLines 方法 | WriteLine 方法

適用於：TextStream 物件


WriteBlankLines 方法 (FileSystemObject)

Scripting 執行階段程式庫

WriteBlankLines 方法

在 TextStream 檔案中寫入指定個數的換行字元。

object.WriteBlankLines(lines)

引數

object
必要項。一律為 TextStream 物件的名稱。
lines
必要項。您要寫入檔案中的換行字元數。WriteBlankLines 方法的語法具有下列幾個部分：

附註

下面的範例說明 WriteBlankLines 方法的用法：

[JScript]
function WriteBlanksDemo()
{
   var fso, f, r;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Hello world!");
   f.WriteBlankLines(2);
   f.Write("JScript is fun!");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   r = f.ReadAll();
   return(r);
}
[VBScript]
Function WriteBlankLinesToFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.WriteBlankLines 2
   f.WriteLine "Hello World!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   WriteBlankLinesToFile = f.ReadAll
End Function

請參閱

Write 方法 | WriteLine 方法

適用於：TextStream 物件


WriteLine 方法 (FileSystemObject)

Scripting 執行階段程式庫

WriteLine 方法

在 TextStream 檔案中寫入指定的字串和換行字元。

object.WriteLine([string])

引數

object
必要項。一律為 TextStream 物件的名稱。
string
選擇項。這是您要寫入檔案中的文字，若予以省略，則會在檔案中寫入一個換行字元。

附註

下面的範例說明 WriteLine 方法的用法：

[JScript]
var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.CreateTextFile("c:\\testfile.txt", true);
f.WriteLine("This is a test.");
f.Close();
[VBScript]
Function WriteLineToFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.WriteLine "Hello world!"
   f.WriteLine "VBScript is fun!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   WriteLineToFile = f.ReadAll
End Function

請參閱

Write 方法 | WriteBlankLines 方法

適用於：TextStream 物件


FileSystemObject 物件

本節包括

Dictionary 物件
儲存資料索引鍵與項目對 (pair) 的物件。
Drive 物件
提供特殊磁碟機或網路共享屬性的存取。
File 物件
提供所有檔案屬性的存取。
FileSystemObject 物件
提供電腦檔案系統的存取。
Folder 物件
提供資料夾所有屬性的存取。
TextStream 物件
協助檔案的連續存取。

相關章節

Scripting 執行階段參照
構成 Scripting 執行階段參照的元素清單。
FileSystemObject 基礎概念
FileSystemObject 的基礎概念指南。
FileSystemObject 集合
可以與 FileSystemObject 物件模型一起使用的集合清單。


Drive 物件

提供對特定磁碟機或網路共用磁碟機的屬性存取方法。

附註

下面程式碼說明 Drive 物件存取磁碟機屬性的用法：

[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - " ;
   s += d.VolumeName + "<br>";
   s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

方法

Drive 物件沒有任何方法。

屬性

AvailableSpace 屬性 | DriveLetter 屬性 | DriveType 屬性 | FileSystem 屬性 | FreeSpace 屬性 | IsReady 屬性 | Path 屬性 | RootFolder 屬性 | SerialNumber 屬性 | ShareName 屬性 | TotalSize 屬性 | VolumeName 屬性

請參閱

Drives 集合物件 | File 物件 | Files 集合物件 | Folder 物件 | Folders 集合物件 | GetDrive 方法


File 物件

提供對檔案的所有屬性的存取方法。

附註

下面程式碼說明如何取得 File 物件，以及如何檢視其中一個屬性。

[JScript]
function ShowFileInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.DateCreated;
   return(s);
}
[VBScript]
Function ShowDateCreated(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   ShowDateCreated = f.DateCreated
End Function

方法

Copy 方法 | Delete 方法 | Move 方法 | OpenAsTextStream 方法

屬性

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | Type 屬性

請參閱

Drive 物件 | Drives 集合物件 | Files 集合物件 | Folder 物件 | Folders 集合物件


FileSystemObject 物件

提供對電腦檔案系統的存取方法。

附註

[JScript]

下面程式碼說明如何使用 FileSystemObject 來傳回可以讀寫的 TextStream 物件：

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();

[JScript]

在此範例程式碼中，會將 ActiveXObject 物件指定給 FileSystemObject (fso)。然後，CreateTextFile 方法就會建立如 TextStream 物件 (a) 的檔案，而且 WriteLine 方法會將一行文字寫入所建立的文字檔中。Close 方法會清除暫存區並關閉此檔案。

[VBScript]

下面程式碼說明如何使用 FileSystemObject 來傳回可以讀寫的 TextStream 物件：

[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close

[VBScript]

在上述的程式碼中，CreateObject 函數會傳回 FileSystemObject (fso)。CreateTextFile 方法稍後會建立檔案成為 TextStream 物件；而 WriteLine 方法會寫入一行文字至建立的文字檔。Close 方法會清除緩衝區然後關閉檔案。

方法

BuildPath 方法 | CopyFile 方法 | CopyFolder 方法 | CreateFolder 方法 | CreateTextFile 方法 | DeleteFile 方法 | DeleteFolder 方法 | DriveExists 方法 | FileExists 方法 | FolderExists 方法 | GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法 | MoveFile 方法 | MoveFolder 方法 | OpenTextFile 方法

屬性

Drives 屬性

請參閱

Dictionary 物件 | Drive 物件 | Drives 集合物件 | File 物件 | Files 集合物件 | Folder 物件 | Folders 集合物件 | TextStream 物件


Folder 物件

提供對所有資料夾屬性的存取方法。

附註

下面程式碼說明如何取得 Folder 物件，以及如何傳回其中一個屬性：

[JScript]
function ShowFolderInfo(folderspec)
{
   var fso, folder, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   folder = fso.GetFolder(folderspec);
   s = folder.DateCreated;
   return(s);
}
[VBScript]
Function ShowDateCreated(folderspec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   ShowDateCreated = f.DateCreated
End Function

方法

Copy 方法 | Delete 方法 | Move 方法 | OpenAsTextStream 方法

屬性

Attributes 屬性 | DateCreated 屬性 | DateLastAccessed 屬性 | DateLastModified 屬性 | Drive 屬性 | Files 屬性 | IsRootFolder 屬性 | Name 屬性 | ParentFolder 屬性 | Path 屬性 | ShortName 屬性 | ShortPath 屬性 | Size 屬性 | SubFolders 屬性 | Type 屬性

請參閱

Drive 物件 | Drives 集合物件 | File 物件 | Files 集合物件 | Folders 集合物件


TextStream 物件

方便對檔案的循序存取。

TextStream.{property  | method( )}

property 和 method 引數可以是任何與 TextStream 物件有關的屬性和方法。請注意，實際的用法是 TextStream 會由代表 TextStream 物件 (從 FileSystemObject 傳回) 的變數預留位置所取代。

附註

在下面的程式碼中，a 是 FileSystemObject 的 CreateTextFile 方法所傳回的 TextStream物件：

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile= fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close

WriteLine 和 Close 是 TextStream 物件的兩個方法。

方法

Close 方法 | Read 方法 | ReadAll 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法 | Write 方法 | WriteBlankLines 方法 | WriteLine 方法

屬性

AtEndOfLine 屬性 | AtEndOfStream 屬性 | Column 屬性 | Line 屬性

請參閱

Dictionary 物件 | FileSystemObject 物件


FileSystemObject 集合

本節包含

Drives 集合
所有可用磁碟機的唯讀集合。
Files 集合
資料夾內所有 File 物件的集合。
Folders 集合
Folder 物件內所包含的所有 Folder 物件的集合。

相關章節

Scripting 執行階段參照
構成 Scripting 執行階段參照的元素清單。
FileSystemObject 基礎概念
FileSystemObject 的基礎概念指南。


Drives 集合物件

包含所有可用磁碟機的唯讀集合物件。

附註

抽取式磁碟機並不需要將媒體插入，就能使它們出現在 Drives 集合物件中。

[JScript]

下面的範例說明如何使用 Drives 屬性來取得 Drives 集合物件，以及如何使用 Enumerator 物件來反覆處理集合物件︰

[JScript]
function ShowDriveList()
{
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=   n + "<br>";
   }
   return(s);
}

[VBScript]

下列程式碼列舉如何使用 For Each...Next 陳述式取得 Drives 集合以及反覆使用集合：

[VBScript]
Function ShowDriveList
   Dim fso, d, dc, s, n
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set dc = fso.Drives
   For Each d in dc
      n = ""
      s = s & d.DriveLetter & " - "
      If d.DriveType = Remote Then
         n = d.ShareName
      ElseIf d.IsReady Then
         n = d.VolumeName
      End If
      s = s & n & "<BR>"
   Next
   ShowDriveList = s
End Function

方法

Drives 集合物件沒有任何方法。

屬性

Count 屬性 | Item 屬性

請參閱

Drive 物件 | Drives 屬性 | File 物件 | Files 集合物件 | Folder 物件 | Folders 集合物件


Files 集合物件

包含資料夾內所有 File 物件的集合物件。

附註

[JScript]

下面的範例說明如何使用 Enumerator 物件和 for 陳述式，來取得 Files 集合物件並反覆處理此集合物件︰

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}

[VBScript]

下面程式碼說明如何使用 For Each...Next 陳述式取得 Files 集合並反覆使用集合：

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

方法

Files 集合物件沒有任何方法。

屬性

Count 屬性 | Item 屬性

請參閱

Drive 物件 | Drives 集合物件 | File 物件 | Folder 物件 | Folders 集合物件


Folders 集合物件

包含在某 Folder 物件內所有 Folder 物件的集合物件。

附註

[JScript]

下面的範例說明如何使用 Enumerator 物件和 for 陳述式取得 Folders 集合物件，以及如何反覆處理此集合物件︰

[JScript]
function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}

[VBScript]

下面的範例說明如何使用 For Each...Next 陳述式取得 Folders 集合以及以及如何反覆處理此集合：

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.SubFolders
   For Each f1 in fc
      s = s & f1.name
      s = s &   "<BR>"
   Next
   ShowFolderList = s
End Function

方法

Add 方法 (Folders)

屬性

Count 屬性 | Item 屬性

請參閱

Drive 物件 | Drives 集合物件 | File 物件 | Files 集合物件 | Folder 物件 | SubFolders 屬性


Script Encoder 概觀

Script Encoder 是一個簡單的指令行工具，它可以幫助 script 的設計者編寫最終的 script 程式碼，如此 Web hosts 和 Web clients 將無法檢視或修改其來源。注意：此種編碼方式只能避免他人隨意檢視您的程式碼；它並無法禁止駭客蓄意查看已經完成的程式碼或您如何編寫程式碼。

Web 設計者在網頁與伺服器端的主伺服器頁面 (.ASP) 使用 scripting 可實際上增加您所能想像的每種功能。此外，Windows® Scripting Host (WSH) 和許多其他的應用程式都會使用 scripting 來產生相當令人印象深刻的結果。

目前使用 scripts 的其中一個缺點就是對於其所包含的內容並沒有提供智慧財產權的保護，亦不提供使用者所取得的與設計者所建立的內容相同的任何擔保。由於 script 都是儲存成純文字，因此不論是精確的演算法或是精心設計的 scripts 內容可說完全透明化。因此，在每個階層的 script 使用者都能夠看見 script 設計者的程式碼，同時並能夠取得、修改或作為己用。明顯地，對於一個身處競爭激烈環境的 script 設計者而言，這並不是一個好現象。

在介紹 scriptlets 之後，保護來源程式碼成為更重要的工作。Script 設計者想要使用這種簡單的元件架構，但是不一定希望將他們的原始程式碼共享出來。在 script 編寫完成後，變更結果檔案的任何部份將會使其無法操作，因此請務必確定編碼 script 絕對的整合性。

請參閱

使用 Script Encoder | Script Encoder 語法 | Script 編碼方式範例


使用 Script Encoder

Script Encoder 僅編寫 scripting 程式碼並以純文字的格式出現，所有其他檔案內容並不會更動。若要使用 Script Encoder，請以常用的方式來開發與除錯您的 script，然後使用此公用程式來編碼最後的 script。Script Encoder 使用原始程式碼中的標記來識別編碼應該從何處開始。

在 Visual Basic® Scripting Edition (VBScript) 中，下列範例會列舉編碼標記如何用來顯示純文字的著作權訊息：

<SCRIPT LANGUAGE="VBScript">
'Copyright© 1998. XYZ Productions. All rights reserved.
'**Start Encode**
' Your code goes here.
</SCRIPT>

在 JScript® 中，編碼標記看起來會像下面這個樣子：

<SCRIPT LANGUAGE="JScript">
//Copyright© 1998. ZYX Productions. All rights reserved.
//**Start Encode**
// Your code goes here.
</SCRIPT>

當 Script Encoder 被呼叫時時，在開始標記前 script 區塊中的任何程式碼都不會被編碼，而 script 區塊中的其他程式碼則會進行編碼。因此，如果開始標記被忽略，整個 scripting 區塊都會被編碼；但是如果開始標記位於 scripting 區塊的最後，則不會有任何程式碼被編碼。

在編碼動作發生後，您應該會注意到 <SCRIPT> 標籤中的語言指示項已經變更。在 VBScript 中，新的指示項看起來會像這個樣子：

<SCRIPT LANGUAGE="VBScript.Encode">

在 Jscript 中，新的指示項看起來會像下面這個樣子：

<SCRIPT LANGUAGE="JScript.Encode">

Script Encoder 會在下列的條件下啟動：MS-DOS 指令行或是在如下的 [執行] 對話方塊：

SRCENC [switches] inputfile outputfile

請參閱

Script Encoder 概觀 | Script Encoder 語法 | Script 編碼方式範例


Script Encoder 語法

編寫 scripting 原始程式碼使其他使用者無法輕易地檢視或修改。

語法

SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] 輸入檔輸出檔

Script Encoder 語法有下列部份：

部份 | 說明
/s | 選擇項。指定 Script Encoder 在無提示模式下運作的選項，也就是說，沒有產生畫面輸出。如果忽略此選項，則預設設定會提供冗長輸出。
/f | 選擇項。指定要被輸出檔案覆寫的輸出檔案。請注意：此選項會覆蓋您的原始輸出來源檔案。如果忽略此選項，輸出檔案將不會被覆寫。
/xl | 選擇項。指定 @language 指示詞不會加到 .ASP 檔案的頂端。如果忽略此選項，@language 指示詞會加到所有 .ASP 檔案當中。
/l defLanguage | 選擇項。指定要在編碼期間使用的預設 scripting 語言 (JScript® 或 VBScript)。如果正在進行編碼的檔案沒有包含語言屬性，而 Script 區塊又包含在該檔案中的話，則該 Script 區塊會被假設成指定語言的 Script 區塊。如果忽略此選項，JScript 會成為 HTML 頁與 scriptlets 的預設語言，而 VBScript 則會是主伺服器頁面的預設語言。對於純文字檔案而言，副檔名 (.js 或 .vbs) 會決定預設的 scripting 語言。
/e defExtension | 選擇項。將輸入檔案與特定檔案類型加以關聯。當輸入檔案的副檔名無法突顯檔案類型，也就是說如果輸入檔案的副檔名不屬於可識別的副檔名，但是檔案內容確實屬於可識別的檔案類型時，請使用此選項。此選項並沒有預設值。如果發現檔案的副檔名無法識別，而且未指定此選項，Script Encoder 則無法處理該未識別的檔案。可識別的副檔名為 asa、asp、cdx、htm、html、js、sct 和 vbs。
inputfile | 必要項。要編碼的輸出檔案名稱，包括與目前目錄相關的任何必要路徑資訊。
outputfile | 必要項。要產生的輸出檔案名稱，包括與目前目錄相關的任何必要路徑資訊。

附註

Script Encoder能夠處理的檔案類型有四種，它們分別為：

  • ASP。此格式包含下列：在 <SCRIPT> ... </SCRIPT> 標籤或 <% ... %> 標籤中包含有效 HTML 與內嵌 scripting 區塊的文字主伺服器頁面。使用此格式的應用程式包括 Microsoft® Internet Information Services (IIS)。可識別的副檔名為 .asp、.asa 和 .cdx。
  • HTML。此格式包含下列：包含有效 HTML 與內嵌 script 區塊的文字檔。使用此 scripting 格式的應用程式包括 Microsoft FrontPage®、Microsoft® Visual InterDev™ 和實質上所有的 Web 設計工具與瀏覽器。可識別的副檔名為 .htm 和 .html。
  • 純文字。此格式包含下列：僅包含 script 而沒有環境標籤的文字檔。使用 scripting 格式的應用程式包括Windows® Scripting Host (WSH) 和 Microsoft® Outlook®。可識別的副檔名為.js 和 .vbs，在編碼後它們會分別變成為 .jse 和 .vbe。
  • Scriptlet。此格式包含下列：在 <SCRIPT> ... </SCRIPT> 標籤中包含有效 scriptlet 程式碼的文字檔。可識別的副檔名為.sct 和 .wsh。

範例

下面為 Script Encoder 的使用範例以及使用結果的簡要說明：

若要編碼輸入檔案 test.html 並產生輸出檔案 encode.html，請使用：

screnc test.html encode.html

若要將輸入檔案 test.htm 編碼並將輸入檔案用已編碼的輸出檔案覆寫，請使用：

screnc /f test.htm

若要將目前目錄中所有的 .ASP 檔案加以編碼，並將已編碼的輸出檔案放置在 c:\temp 中，請使用：

screnc *.asp c:\temp

若要將目前目錄中的所有編碼成 .ASP 檔案並將它們放置在 c:\temp，請使用： screnc /e asp *.* c:\temp

若要將輸入檔案 test.htm 編碼並產生輸出檔案 encode.htm，並確定所有 script 區塊並沒有指定使用 VBScript 的語言屬性，請使用：

screnc /l vbscript test.htm encode.htm

若要在目前的目錄中編碼所有 scriptlet 檔案並用已編碼的檔案加以覆寫，同時不顯示訊息，請使用：

screnc /s /f *.sct

請參閱

Script Encoder 概觀 | 使用 Script Encoder | Script Encoding 範例


Script 編碼方式範例

以下簡短範例說明包含需要保護的某些 JScript 程式碼的網頁：

<HTML>
<HEAD>
<TITLE>Script Encoder Sample Page</TITLE>
<SCRIPT LANGUAGE="JScript">
<!--//
//Copyright© 1998 Microsoft Corporation. All Rights Reserved.
//**Start Encode**
function verifyCorrectBrowser(){
  if(navigator.appName == "Microsoft Internet Explorer")
    if (navigator.appVersion.indexOf ("5.") >= 0)
      return(true);
    else
      return(false);
}
function getAppropriatePage(){
  var str1 = "此已經為實際的網站， ";
  var str2 = "而與 ";
  var str3 = "Microsoft Internet Explorer 5.0 ";
  var str4 = "以外瀏覽器相容的頁面將會被載入。";
  if (verifyCorrectBrowser())
    document.write(str1 + str3 + str4);
  else
    document.write(str1 + str2 + str3 + str4);
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="getAppropriatePage()">
</BODY>
</HTML>
下列頁面與透過 Script Encoder 執行的頁面相同:
<HTML>
<HEAD>
<TITLE>Script Encoder Sample Page</TITLE>
<SCRIPT LANGUAGE="JScript.Encode">
<!--//
//Copyright© 1998 Microsoft Corporation. All Rights Reserved.
//**Start Encode**#@~^QwIAAA==@#@&0;mDkWP7nDb0zZKD.n1YAMGhk+Dvb`@#@&P,kW`UC7kLlDGDcl22gl:n~{'~Jtr1DGkW6YP&xDnD+OPA62sKD+ME#@#@&P,~~k6PvxC\rLmYGDcCwa.n.kkWU bx[+X66Pcr*cJ#,@*{~!*P~P,P~.YEMU`DDEbIP,P,+s/n@#@&P~P,~PM+O;Mx`WC^/n#pN6EU1YbWx,oObaw.WaDrCD+nmL+v#@#@&~P7lMPdY.q,'~J_CN,Y4rkP4nnPCx,C1Y;mV,+(PkrY~~l,wCLPmKhwmYk(snPSkDt~JI@#@&P~\m.PkY.+,'PE8MWA/.kPGDtDPDtmUPri@#@&,P-CMP/D.&,'Pr\rmMWkWWY~(YnDnY,2a2^WDn.,* !,Ep@#@&,P7lD,/D.c,'~JSW;s9Ptm-+,4+U~VKl9+[REI,Pr0,c\DrWHZW..mOAMGS/nM`*#@#@&P,~P9W^Es+UOchDbO+v/YMq~_,/DDfPQ~kY.c*IP,+sd@#@&~~,P[W1;s+UDRSDkD+vdYMF~_,/O.yP_,dYM&P3~dYMc*iNz&R @*^#~@
//-->
</SCRIPT>
</HEAD>
<BODY onload="getAppropriatePage()">
</BODY>
</HTML>
備註 在編碼之後，即使您只是在編碼文字中變更一個字元，整個 script 的整合性將會喪失，而且您也將無法再使用它。

請參閱

Script Encoder 概觀 | 使用 Script Encoder | Script Encoder 語法


Windows Script Host

Windows Script Host

本節內容

入門

WSH 基本概念

執行您的 Script

基本 Windows Script Host 工作

安全性和 Windows Script Host

參考


入門

本節內容

WSH 的新增功能
WSH 5.6 的新功能描述。
文件慣例
WSH 5.6 說明文件中使用的語法和慣例描述。

相關章節

WSH 參考
組成 WSH 參考的項目清單。
WSH 基本概念
學習 WSH 的基本知識。


WSH 5.6 的新增功能

多個領域的功能已加入此最新版的 Windows Script Host (版本 5.6)。

  • 已改進引數處理 — 處理和記錄命令列引數較之前更為容易。已簡化了整合您的指令碼與其他命令列指令碼的處理程序，而且可更容易建立能提供使用者說明資訊的指令碼。請參考下表以取得 WSH 語言功能的資訊，這些資訊可讓您瞭解新增的功能。
    學習內容 | 請參閱
    將指令碼的參數分組。 | <runtime> 項目
    定義指令碼的具名參數。 | <named> 項目
    定義指令碼的未具名參數。 | <unnamed> 項目
    讓指令碼自我記錄。 <example> 項目

    <description> 項目
    共用目前處理程序的環境 (IOW, WSH) 與繁衍的處理程序。 | Exec 方法
    以程式方式存取標準的資料流。 Exec 方法

    WshScriptExec 物件
    以程式方式存取環境變數。 Environment 屬性

    WshEnvironment 物件

    ExpandEnvironmentStrings 方法

    Remove 方法
    判斷繁衍的指令碼處理程序是否正在執行。 | Status 屬性 (WshScriptExec)
    存取繁衍的指令碼處理程序的 StdIn 輸入資料流。 | StdIn 屬性 (WshScriptExec)
    存取繁衍的指令碼處理程序的 StdOut 輸出資料流。 | StdOut 屬性 (WshScriptExec)
    存取繁衍的指令碼處理程序的 StdErr 輸出資料流。 | StdErr 屬性 (WshScriptExec)
    終止繁衍的指令碼處理程序。 | Terminate 方法 (WshScriptExec)
    存取具名的命令列指令碼引數。 | WshNamed 物件
    判斷特定的鍵值是否存在 WshNamed 物件中。 | Exists 方法
    判斷 WshNamed 或 WshUnnamed 物件中的轉換數目。 | Count 方法
  • 您可以遠端執行指令碼 — 您可以將指令碼載入多個遠端電腦系統，及啟動它們同時執行。執行遠端指令碼時，您可以檢查其進度。完成後，您便可確保它已正確地執行，或判斷其提早中止的原因。有一個新的分派物件可用來建立遠端 WSH 物件 — 即 Controller 物件。此外，有一個新物件可代表執行中指令碼的執行個體 — 即 Remote WSH 物件。
    學習內容 | 請參閱
    建立遠端 script 物件 — 遠端 WSH 介面。 | WshController 物件
    建立遠端 script 物件 — 使用遠端 WSH 介面。 | CreateScript 方法
    建立遠端 script 物件 — 取得控點。 | WshRemote 物件
    啟動遠端指令碼處理序。 | Execute 方法
    判斷遠端指令碼是否正在執行。 | Status 屬性 (WshRemote)
    判斷遠端指令碼終止的原因。 | Description 屬性 (WshRemoteError)
    識別遠端指令碼的哪個陳述式是造成其終止的原因。 | Line 屬性 (WshRemoteError)
    遠端指令碼結束後存取錯誤資訊。 | WshRemoteError 物件
    識別包含著錯誤的程式碼行的字元。 | Character 屬性
    識別代表指令碼錯誤的錯誤編號。 | Number 屬性
    識別指令碼錯誤的來源。 | Source 屬性
    識別造成錯誤的來源程式碼行。 | SourceText 屬性
    處理遠端物件事件。 Start 事件

    End 事件

    Error 事件
  • 啟動新處理序時，您可以將它們視為物件 — 判斷繁衍處理序的狀態，及存取它們標準的 I/O 資料流。
    學習內容 | 請參閱
    繁衍處理序。 | Exec 方法
    存取代表執行中處理序的物件。 | WshScriptExec 物件
    存取處理序狀態資訊。 | Status 屬性 (WshScriptExec)
    存取標準的 I/O 資料流。 | StdOut 屬性 (WshScriptExec)
    StdIn 屬性 (WshScriptExec)
    StdErr 屬性 (WshScriptExec)
  • 您可以存取目前工作中的目錄 — 您可以決定/修改作用中處理序的目前工作目錄。
    學習內容 | 請參閱
    存取作用中目錄資訊。 | CurrentDirectory 屬性
  • 已指出指令碼唯一的安全課題 — 新的安全模型讓傳送和執行中的指令碼更安全。
    學習內容 | 請參閱
    指令碼簽名和驗證。 | 安全性和 Windows Script Host


升級 Windows Script Host

如果您目前使用的是 Windows 2000 或 Windows ME，則您的電腦系統已安裝 2.0 版的 WSH。如果執行 Windows 95、98 或 Windows NT 4.0，則您擁有 1.0 版。若要升級至 WSH 5.6，請造訪 Microsoft Windows Script 技術網站，網址是 (http://msdn.microsoft.com/scripting/)。

備註 最新版的 WSH 是 5.6，因為對編製檔案版本而言，略過部份版本編號可最容易解析版本。


文件慣例

在整個 Windows Script Host 5.6 [說明] 文件中，不同的字體、粗細和色彩是用來讓您的注意力集中在感興趣的文字上。

文字樣式的範例

資訊類型 | 範例
程式碼片段以藍色的 Courier 字體顯示
WScript.Echo "Hello from VBScript"
程式碼片段中的功能項目以藍色粗體的 Courier 字體顯示
WScript.Echo "Hello from VBScript"
顯示於使用者介面上的項目會加上中括弧 [] 來表示 | 在 [屬性] 對話內的 [Script] 索引標籤
連結將畫上底線出現 | WshNetwork Object
快顯連結將以斜體顯示，且畫上底線 | <?job error="flag" debug="flag" ?>


WSH 版本資訊

下表列出 Microsoft 主機應用程式所實行的 Windows Script Host 的版本。

主機應用程式 | 1.0 | 2.0 | 5.6
Microsoft Windows 98 | x |  |
Microsoft Windows NT 4 Option Pack | x |  |
Microsoft Windows 2000 |  | X |

下表列出 Windows Script Host 語言項目及這些項目在哪個版本被引入。

語言項目 | 1.0 | 2.0 | 5.6
<?job ?> 項目 |  | X |
<?XML ?> 項目 |  | X |
AddPrinterConnection 方法 | x |  |
AddWindowsPrinterConnection 方法 |  | X |
AppActivate 方法 |  | X |
Arguments 屬性 | x |  |
AtEndOfLine 屬性 |  | X |
AtEndOfStream 屬性 |  | X |
Character 屬性 |  |  | x
Close 方法 |  | X |
Column 屬性 |  | X |
ComputerName 屬性 | x |  |
ConnectObject 方法 |  | x |
Count 方法 | x |  |
CreateObject 方法 | x |  |
CreateScript 方法 |  |  | x
CreateShortcut 方法 | x |  |
Description 屬性 | x |  |
Description 屬性 (WshRemote) |  |  | x
DisconnectObject 方法 | x |  |
Echo 方法 | x |  |
EnumNetworkDrives 方法 | x |  |
EnumPrinterConnections 方法 | x |  |
Environment 屬性 | x |  |
Error 屬性 (WshRemote) |  |  | x
<example> 項目 |  |  | x
Exec 方法 |  |  | x
Execute 方法 |  |  | x
Exists 方法 |  |  | x
ExitCode 屬性 |  |  | x
ExpandEnvironmentStrings 方法 | x |  |
FullName 屬性 | x |  |
GetObject 方法 | x |  |
GetResource 方法 |  | x |
HotKey 屬性 | x |  |
IconLocation 屬性 | x |  |
Item 屬性 | x |  |
Item 屬性 (WshNamed) |  |  | x
Item 屬性 (WshUnnamed) |  |  | x
<job> 項目 |  | x | x
Length 屬性 | x |  |
Line 屬性 |  | x |
Line 屬性 (WshRemote) |  |  | x
LogEvent 方法 |  | x |
MapNetworkDrive 方法 | x |  |
Name 屬性 | x |  |
<named> 項目 |  |  | x
Number 屬性 |  |  | x
<object> 項目 |  | x |
<package> 項目 |  | x |
Path 屬性 | x |  |
Popup 方法 | x |  |
ProcessID 屬性 |  |  | x
Quit 方法 | x |  |
Read 方法 |  | x |
ReadAll 方法 |  | x |
ReadLine 方法 |  | x |
<reference> 項目 |  | x |
RegDelete 方法 | x |  |
RegRead 方法 | x |  |
RegWrite 方法 | x |  |
Remove 方法 | x |  |
RemoveNetworkDrive 方法 | x |  |
RemovePrinterConnection 方法 | x |  |
<resource> 項目 |  |  |
Run 方法 | x |  |
<runtime> 項目 |  |  | x
Save 方法 | x |  |
<script> 項目 |  | x |
ScriptFullName 屬性 | x |  |
ScriptName 屬性 | x |  |
SendKeys 方法 |  | x |
SetDefaultPrinter 方法 | x |  |
ShowUsage 方法 |  |  | x
Skip 方法 |  | x |
SkipLine 方法 |  | x |
Sleep 方法 |  | x |
Source 屬性 |  |  | x
SourceText 屬性 |  |  | x
SpecialFolders 屬性 | x |  |
Status 屬性 (WshRemote) |  |  | x
Status 屬性 (WshScriptExec) |  |  | x
StdErr 屬性 |  | x |
StdErr 屬性 (WshScriptExec) |  |  | x
StdIn 屬性 |  | x |
StdIn 屬性 (WshScriptExec) |  |  | x
StdOut 屬性 |  | x |
StdOut 屬性 (WshScriptExec) |  |  | x
TargetPath 屬性 | x |  |
Terminate 方法 (WshScriptExec) |  |  | x
<usage> 項目 |  |  | x
UserDomain 屬性 | x |  |
UserName 屬性 | x |  |
Version 屬性 | x |  |
WindowStyle 屬性 | x |  |
WorkingDirectory 屬性 | x |  |
Write 方法 |  | x |
WriteBlankLines 方法 |  | x |
WriteLine 方法 |  | x |
WScript 物件 | x |  |
WshArguments 物件 | x |  |
WshController 物件 |  |  | x
WshEnvironment 物件 | x |  |
WshNamed 物件 |  |  | x
WshNetwork 物件 | x |  |
WshRemote 物件 |  |  | x
WshRemoteError 物件 |  |  | x
WshScriptExec 物件 |  |  | x
WshShell 物件 | x |  |
WshShortcut 物件 | x |  |
WshSpecialFolders 物件 | x |  |
WshUnnamed 物件 |  |  | x
WshUrlShortcut 物件 | x |  |


Windows Script Host 基本概念

Microsoft® Windows® Script Host (WSH) 是與 Windows Script 相容的指令碼引擎，與程式語言無關的指令碼主機。它對 Windows 32 位元平台提供簡單、強大及具彈性的指令碼，可讓您從 Windows 桌面和命令提示字元執行指令碼。

Windows Script Host 也適用於非互動指令碼的需求，例如登入指令碼、管理指令碼和機器自動化。

本節內容

WSH 是什麼？
Windows Script Host 總覽
主控環境和 Script 引擎
關於您可以使用的 WSH 主機環境和指令碼引擎
建立 WSH 可使用的 Script
如何建立 WSH 相容的指令碼
Windows Script Host 物件模型
為結構的架構圖


WSH 是什麼？

Windows Script Host (WSH) 是一種 Windows 管理工具。

WSH 為裝載指令碼建立環境。換言之，當指令碼到達您的電腦時，WSH 將扮演主機的角色 — 它會為指令碼製作可用的物件和服務，及提供一組指南，以便在其中執行指令碼。另外，Windows Script Host 會管理安全性及觸發正確的 script 引擎。

針對 WSH 相容的指令碼引擎，WSH 與語言無關。它在 Windows 平台上提供簡單、強大和彈性的指令碼，可讓您從 Windows 桌面和命令提示字元下執行指令碼。

Windows Script Host 對非互動的指令碼需求而言是很適當的，如登入指令碼、管理指令碼及機器自動化。

WSH 物件和服務

Windows Script Host 提供多個可讓您用來直接操作指令碼執行的物件，且提供有用的功能以執行其它動作。使用這些物件和服務，您可以完成下列各項工作：

  • 將訊息列印至螢幕
  • 執行基本功能，如 CreateObject 和 GetObject
  • 對映網路磁碟機
  • 連線印表機
  • 擷取和修改環境變數
  • 修改登錄機碼

WSH 位於何處？

Windows Script Host 內建於 Microsoft Windows 98、2000 和 Millennium Editions。如果您正在執行 Windows 95，您可以從 Microsoft Windows Script 技術網站下載 Windows Script Host 5.6，網址是 (http://msdn.microsoft.com/scripting)。

備註 您也可以跳至以上列出的網站以升級您目前的引擎。Windows 98、2000 和 Millennium Editions 中的 WSH 版本為版本 1.0 或 2.0。您必須升級至版本 5.6 才能取得新功能。

請參閱

Windows Script Host 物件模型 | CreateObject | GetObject


Script 和自動化 Windows

電腦是可執行重覆工作的絕佳工具。但如果您需要執行一系列重覆工作時，該使用哪些工具？答案是使用指令碼。

Script 是什麼？

指令碼是以指令碼語言 (如 JScript 和 VBScript) 所撰寫的程式。其他的指令碼語言包括 Rexx、Python 和 Perl。相較於 C++ 和 Visual Basic 等程式語言，指令碼語言比較適合建立較短的應用程式，以快速提供小問題的解決方案。

自動化 Windows

在許多狀況下，指令碼是用來自動化手動工作，巨集便是個很好的例子。指令碼非常適用於：

  • 操作 Windows 環境
  • 執行其他程式
  • 自動化登入程序
  • 將按鍵順序傳至應用程式

例如，如果您有多個類似的工作，您可以撰寫一個通用的指令碼以處理所有工作。

您可以撰寫指令碼以啟動動作來回應事件。您可撰寫能維持著執行狀態的事件之指令碼，並只在符合特定條件時觸發部份動作。

指令碼對非重覆的工作也很有效。如果某個工作需要您循序執行許多事件，則您可以使用指令碼，將該序列工作轉換成一個工作。

請參閱

Script 檔案類型


Script 檔案的類型

獨立指令碼有多種類型，而且每種指令碼有它自己的副檔名。下表是部份常見類型的清單。

副檔名 | Script 類型 | 說明
.bat | MS-DOS 批次檔 | MS-DOS 作業系統批次檔
.asp | ASP 網頁 | Active Server Page 檔案
.html | HTML 檔案 | 網頁
.js | JScript 檔案 | Windows 指令碼
.vbs | VBScript 檔案 | Windows 指令碼
.wsf | Windows Script Host 檔案 | Windows 指令碼的容器或專案檔案；為 WSH 2.0 及更高版本所支援。
.wsh | Windows Script Host 檔案 | 指令碼檔的屬性檔；為 WSH 1.0 及更高版本所支援。

每個指令碼類型適用於不同的應用程式需要，且各有優缺點。您選擇的指令碼類型視您的需要而定。

而且在某些情況下，您可以將整個問題細分為數個較小的問題，並使用最適合的指令碼語言所撰寫的指令碼，為每個小問題撰寫個別的指令碼。

此時 Windows Script Host 檔案 (WSF 檔) 就非常有用。WSF 檔可能包括作為指令碼部份的其他指令碼檔案。因此，多個 WSF 檔可參考可能在單一地方所建立和存放的有用的函式程式庫。

請參閱

Windows Script Host 物件模型


主控環境和 Script 引擎

指令碼通常內嵌於網頁，可能在 HTML 網頁 (位於用戶端) 或 ASP 網頁 (位於伺服器端) 中。若指令碼內嵌於 HTML 網頁，則用來解譯和執行指令碼的引擎元件將由 Web 瀏覽器 (如 Internet Explorer) 載入。若指令碼內嵌於 ASP 網頁，則用來解譯和執行指令碼的引擎元件是內建於 Internet Information Services (IIS) 中。

Windows Script Host 執行存在於 HTML 或 ASP 網頁之外，且為文字檔的指令碼。

可用的 Script 引擎

通常，您會使用 Microsoft JScript 或 VBScript 來撰寫指令碼，這兩個指令碼引擎是隨附於 Microsoft Windows 98、2000 和 Millennium Editions。您可使用其他指令碼引擎 (如 Perl、REXX 和 Python) 與 Windows Script Host。

備註 如需其他資訊，請參閱 Microsoft Developer Network (MSDN) (http://msdn.microsoft.com/workshop/languages/clinic/vbsvjs.asp)。

以 Jscript 所撰寫的獨立指令碼有 .js 副檔名；以 VBScript 所撰寫的獨立指令碼有 .vbs 副檔名。這些副檔名是在 Windows 中登錄。當您執行這類檔案的其中一個時，Windows 會啟動 Windows Script Host，以便叫用相關的指令碼引擎來解譯和執行檔案。

備註 如果您需要執行另一個引擎，則也必須正確地登錄該引擎。


建立 WSH 可使用的 Script

Windows 指令碼是文字檔。只要您以 WSH 相容的指令碼副檔名 (.js、vbs 或 .wsf) 來儲存指令碼，您就可以使用任何文字編輯器來建立指令碼。

最常用的文字編輯器已安裝於電腦 — [記事本]。您也可以使用最喜歡的 HTML 編輯器，Microsoft Visual C++ 或 Visual InterDev。

若要使用記事本建立指令碼

  1. 啟動 [記事本]。
  2. 撰寫您的指令碼。例如，鍵入 WScript.Echo("Hello World!");
  3. 以 .js 副檔名 (而非預設的 .txt 副檔名) 儲存此文字檔。例如，Hello.js。
  4. 移至剛儲存的檔案，在上面連按兩下。
  5. Windows Script Host 叫用 JScript 引擎及執行您的指令碼。在此範例中，將出現顯示著訊息 "Hello World!" 的訊息方塊。


將 Script 分割為可重覆使用的部份

若要簡化您指令碼的撰寫，您可以將某個指令碼分割成多個部份。利用此方式，您可建立 .wsf 檔並將此檔作為執行的起點。其他的部份可為 .js 或 .vbs 檔。您可從 .wsf 檔參照這些檔案。

此方法可讓您的程式碼更為強固，因為它過濾其中片段，可讓您一次除錯一個片段。它也能讓您的程式碼重覆使用，因為它可讓您建立能重覆呼叫的函式。


Windows Script Host 物件模型

Windows Script Host 物件模型由 14 個物件組成。根物件為 WScript 物件。

接下來的圖例代表 Windows Script Host 物件模型階層。請按一下圖中的物件以查看其相關的 [說明] 主題。

WshScriptExec ObjectWshSpecialFolders CollectionWshEnvironment CollectionWshUrlShortCut ObjectWshShortCut ObjectWshShell ObjectWshNetwork ObjectWshRemoteError ObjectWshRemote ObjectWshController ObjectWshUnnamed CollectionWshNamed CollectionWshArguments CollectionWScript Object

Windows Script Host 物件模型提供一個邏輯及系統的方法以執行許多管理工作。它提供的 COM 介面集可放入兩個主類別：

  • 指令碼執行和疑難排解

    此介面集允許指令碼執行 Windows Script Host 的基本操作、將訊息輸出到螢幕，及執行基本的 COM 函式，如 CreateObject 和 GetObject。

  • Helper 函式

    Helper 函式是用於執行動作的屬性和方法，如對映網路磁碟機、連線至印表機、擷取和修改環境變數，及操作登錄機碼。管理員也可使用 Windows Script Host helper 函式以建立簡單的登入指令碼。

WSH 物件和相關的工作

下表是 WSH 物件及其相關的一般工作的清單。

物件 | 使用此物件可執行的作業
Wscript
  • 設定和擷取命令列引數
  • 決定指令碼檔案的名稱
  • 決定裝載檔案名稱 (wscript.exe 或 cscript.exe)
  • 決定裝載版本資訊
  • 建立、連線和中斷與 COM 物件的連線
  • 接收事件
  • 以程式方式停止指令碼的執行
  • 對預設輸出裝置 (例如，對話方塊或命令列) 輸出資訊
WshArguments | 存取命令列引數的整個集合
WshNamed | 存取具名命令列引數的集合
WshUnnamed | 存取未具名命令列引數的集合
WshNetwork
  • 網路共用及網路印表機的連線和中斷連線
  • 對應和非對應網路共用
  • 存取目前登入使用者的相關資訊
WshController | 使用 Controller 方法 CreateScript() 以建立遠端指令碼程序
WshRemote
  • 在電腦網路上遠端管理電腦系統
  • 以程式設計操作其他程式/指令碼
WshRemote Error | 當遠端指令碼 (WshRemote 物件) 因指令碼錯誤而終止，用來存取可用的錯誤資訊
WshShell
  • 本機執行程式
  • 操作登錄的內容
  • 建立捷徑
  • 存取系統資料夾
  • 操作環境變數 (如 WINDIR、PATH 或 PROMPT)
WshShortcut | 以程式方式建立捷徑
WshSpecialfolders | 存取任何 Windows 特殊資料夾
WshURLShortcut | 以程式方式建立 Internet 資源的捷徑
WshEnvironment | 存取任何環境變數 (如 WINDIR、PATH 或 PROMPT)
WshScriptExec 決定以 Exec() 來執行的指令碼的狀態和錯誤資訊

存取 StdIn、StdOut 和 StdErr 通道

除了 Windows Script Host 所提供的物件介面之外，管理者仍可使用任何 ActiveX 控制項以顯示自動化介面，進而在 Windows 平台上執行不同的工作。例如，管理員可撰寫指令碼以管理 Windows Active Directory Service Interface (ADSI)。


執行您的 Script

有三種方法可執行指令碼。

  • 在 Windows 環境中，連按兩下指令碼的圖示 (執行指令碼檔案的方法與執行一般可執行檔的方法相同)。
  • 在 Windows 環境中，按一下 [開始] 按鈕，然後按一下 [執行]。在 [執行] 對話方塊的 [開啟] 欄位，鍵入指令碼的完整路徑，再按一下 [確定]。
  • 從命令列，鍵入指令碼的名稱。

請參閱

以 WScript.exe 執行 Script | 以 CScript.exe 執行 Script | 併入哪些內容以執行 Script | 拖放支援


使用 Windows Script 檔案 (.wsf)

Windows 指令碼 (*.wsf) 檔案是包含「可延伸標記語言 (XML)」程式碼的文字文件。它納入多種功能，提供您擴增的指令碼彈性。由於 Windows 指令碼檔案非專屬於特定引擎，所以它們可以包含來自任何 Windows Script 相容指令碼引擎的指令碼。它們的功能像是容器。

藉由 .wsf 檔，您可以在建立指令碼時使用下列功能：

.wsf 檔支援 | 您可以
Include 陳述句 | 從 VBScript 或 JScript 檔將函數納入您的 Windows Script Host 專案。
多重引擎 | 每個檔案使用一個以上的指令碼語言。
型別程式庫 | 將常數加入程式碼。
工具 | 以任何 XML 編輯器來編輯檔案。
一個檔案的多個工作 | 在單一位置儲存所有的程式碼。

Include 陳述式

如果您有先前的 Windows Script Host 專案的 .js 和 .vbs 檔，則 .wsf 檔可讓您把它們與 Windows Script Host 一起使用。一個 .wsf 檔可封裝一個函式庫，以便由多個 .wsf 檔輪流使用。

下列範例顯示包括 JScript 檔 (fso.js) 的 .wsf 檔，以及呼叫 Include 檔中的函式 (GetFreeSpace) 之VBScript 函式。以下也將顯示 fso.js 的內容。

<job id="IncludeExample">
   <script language="JScript" src="FSO.JS"/>
   <script language="VBScript">
      ' 取得磁碟機 C 的可用空間。
      s = GetFreeSpace("c:")
      WScript.Echo s
   <sScript>
</job>

fso.js 檔包含下列內容：

function GetFreeSpace(drvPath) {
   var fs, d, s;
   fs = new ActiveXObject("Scripting.FileSystemObject");
   d = fs.GetDrive(fs.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - " ;
   s += d.VolumeName;
   s += " Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return s;
}

多重引擎支援

由於一種指令碼語言可能無法擁有所有您需要的功能，Windows Script Host 可讓您在單一 .wsf 檔中結合多種語言。下列範例顯示一個 .wsf 檔，此檔同時包括 VBScript 和 PerlScript 程式碼：

<job id="PERLandVBS">
   <script language="PerlScript">
      sub PerlHello {
         my $str = @_[0];
         $WScript->Echo($str);
      }
   </script>

   <script language="VBScript">
      WScript.Echo "Hello from VBScript"
      PerlHello "Hello from PERLScript"
   </script>
</job>

型別程式庫支援

在下列範例中，"MyComponent" 是使用 Microsoft Visual Basic 5.0 所開發的。"MyComponent" 以下列陳述式定義常數 MyError。

Public Const MyError = "You are not using MyComponent correctly"

此型別程式庫內含於 mycomponent.lib 中，其安裝於 C:\MyComponent 下。

<job id="IncludeExample">
   <reference progid="MyComponent.MyClass">
   <script language="VBScript">
      Dim MyVar
      Set MyVar = CreateObject("MyComponent.MyClass")
      Currentreturn = MyVar.MyMethod
      If Currentreturn = False then
         WScript.Echo MyError
      End If
   </script>
</job>

工具支援

由於 .wsf 檔為 XML 格式，所以您可以使用支援 XML 的任何編輯器來編輯 .wsf 檔。這包括如「記事本」等文字編輯器。

一個檔案的多個工作

您不需將所有指令碼保留在不同的檔案中，您可以將它們全部納入一個 .wsf 檔，並將其分割成多個不同的工作。接著您可以使用類似下列範例的語法以分別執行每一個工作，其中 "MyFirstJob" 是 MyScripts.wsf 檔所包含的工作名稱。

CScript //Job:MyFirstJob MyScripts.wsf


WSH 拖放支援

您可以將檔案拖曳至 WSH 指令碼。這些檔名將轉譯成命令列上的引數。這些檔名可顯示於清單中，您可以用 script 物件來處理這些檔案。

若要顯示指令碼的引數清單

  1. 建立檔案，及使用指令碼副檔名來命名它 (例如，DragDrop.vbs)。
  2. 將程式碼加入指令碼檔案，例如：
    Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next
  3. 將檔案儲存至硬碟。
  4. 將任何檔案拖放至您儲存的檔案。在此範例中，檔名會顯示於螢幕上。

您可以拖曳至指令碼的檔案數量受限於您系統的最大命令列長度。如果拖曳中的所有檔名的字元總數超過此限制，則拖放作業失敗。


設定和自訂 Script 屬性 (.wsh)

您可以使用 Windows Script Host 控制 (.wsh) 檔，為您的每一個個別的指令碼記錄特定設定。.wsh 檔是文字文件，您可以在其中自訂執行一或多個指令碼。當您設定支援的指令碼檔案的屬性時，它將自動建立。

如果您對單一指令碼建立多個 .wsh 檔，您便可以針對組織中的特定群組甚至個人的需要，製作指令碼執行的方式。例如，您可以建立一個登入指令碼，由兩個不同的 .wsh 檔所叫用，不同的 .wsh 檔包含不同的設定和參數。

當您連按兩下 .wsh 檔或從命令列執行它時，CScript.exe 或 WScript.exe 將讀取 .wsh 檔以決定用來執行指令碼所需要的特定設定。CScript/WScript 執行原來的指令碼，傳入在 .wsh 檔內所定義的屬性。

若要建立給定指令碼的 .wsh 檔

  1. 在 [Windows 檔案總管] 以滑鼠右鍵按一下指令碼檔案。
  2. 按一下快速鍵功能表的 [內容]。
  3. 選擇指令碼所要的設定。
  4. 按一下 [確定] 或 [套用]。

    .wsh 檔將以您選取的指令碼檔案的名稱來建立。

下列範例說明一般的 .wsh 檔：

[ScriptFile]
Path=C:\WINNT\Samples\WSH\showprop.vbs
[Options]
Timeout=0
DisplayLogo=1
BatchMode=0

[ScriptFile] 區段的 path 資訊識別與 .wsh 檔案相關的指令碼檔案。[Options] 區段中的設定值對應 [內容] 對話方塊的 [Script] 索引標籤的設定。

備註 執行 .wsh 檔時，您原來的指令碼檔案必須出現。若 .wsh 檔無法執行指令碼，請檢查 .wsh 檔中的 Path= 資訊，以確定它指向您嘗試執行的指令碼。


從命令提示字元執行 Script

Windows Script Host 可讓您從命令提示字元執行指令碼。CScript.exe 提供命令列參數以設定指令碼內容。

若要使用 CScript.exe 執行指令碼

  • 使用下列語法，在命令提示下鍵入命令：
    cscript [host options...] [script name] [script options and parameters]

Host Options 啟用或停用多種 Windows Script Host 功能。Host options 之前加上二條斜線 (//)。Script name 是含副檔名及必要路徑資訊的指令碼檔案的名稱，例如 d:\admin\vbscripts\chart.vbs。Script options and parameters 將傳遞到指令碼。Script 參數之前將有一條斜線 (/)。

每個參數都是選擇項；然而，您無法不指定指令碼名稱便指定指令碼選項。若不想指定參數，CScript 將顯示 CScript 語法及有效的參數。

CScript 範例

多個範例指令碼將與 Windows Script Host 一起安裝，您也可下載取得，網址是 (http://msdn.microsoft.com/scripting)。

針對此範例，假設您已將 Chart.vbs 範例指令碼複製到您電腦上的下列資料夾：

c:\sample scripts\chart.vbs

您可以如下所示，使用 (或不使用) 標誌來執行指令碼。

若要使用 (或不使用) 標誌來執行指令碼

  1. 啟動 MS-DOS 命令提示。
  2. 在命令提示下輸入下列命令 (如果您的範例指令碼位於不同的資料夾，請依需要修改)：
cscript //logo c:\"sample scripts"\chart.vbs
cscript //nologo c:\"sample scripts"\chart.VBScript

請參閱

從 Windows 執行 Script | 併入哪些內容以執行 Script | WScript.exe 和 CScript.exe 選項


從 Windows 執行 Script

Windows Script Host 可讓您從 Windows 從行指令碼。WScript.exe 提供視窗類型的對話方塊以設定指令碼屬性。使用 WScript.exe，您可藉由下列方式，在 Windows 下執行指令碼。不論使用的是 WScript 或 Cscript，您仍然是以相同的方式來執行指令碼。唯一的差異是輸出 — WScript 產生視窗輸出，而 CScript 將其輸出傳送至它在其中啟動的命令視窗中。

在最初安裝中，預設的主機是 Wscript。若要將它變更為 Cscript，請在命令列鍵入下列指令：

cscript //h:cscript

或者，若要將它從 Cscript 變更為 Wscript：

wscript //h:cscript

若要使用預設引擎來執行指令碼：

  1. 在 [Windows 檔案總管] 或桌面上連按兩下指令碼。
  2. 按一下 [開始]，選取 [執行]，再輸入指令碼名稱。
    備註 若在 Windows NT 和 Windows 2000 上，只要在命令列上輸入指令碼名稱。

若要使用特定引擎來執行指令碼：

  • 請在 [Windows 檔案總管] 中以滑鼠右鍵按一下指令碼，然後選取 [開啟] 以執行 Wscript，或選取 [開啟於 MS-DOS 視窗] (Windows 9x) 或 [開啟於命令視窗] (Windows NT 和 Windows 2000) 以執行 Cscript。

-或者-

  • 按一下 [開始]，選取 [執行]，輸入 "cscript" 或 "wscript"，接著輸入指令碼名稱。

-或者-

  • 在命令列上輸入 "cscript" 或 "wscript"，接著輸入指令碼名稱。

若要使用 WScript.exe 來執行指令碼

  • 連按兩下檔案或圖示。這可以是 [我的電腦]、[Windows 檔案總管]、[尋找] 視窗、[開始] 功能表或桌面上所列出的檔案或圖示。

-或者-

  1. 按一下 [開始] 按鈕，然後按一下 [執行]。
  2. 在 [開啟] 欄位，鍵入指令碼的完整路徑，然後按一下 [確定]。您也可以鍵入 WScript，接著鍵入要執行的指令碼的完整名稱和路徑。

若您連按兩下的指令碼檔案的副檔名尚未連結 WScript.exe，則會出現 [開啟方式] 對話方塊並詢問要使用哪個程式以開啟檔案。請選擇 WScript 和勾選 [永遠用這個程式來開啟這個檔案]，以便針對具有該副檔名的所有檔案，將 WScript 登錄為預設的應用程式。

WScript.exe 和 CScript.exe 內容對話方塊提供下列選項：

內容 | 說明
逾時值(單位為秒)：容許 Script 執行的最大時限。 | 指定指令碼可執行的最多秒數。預設值是無限制。 CScript.exe 相對用法： //T:nn
不顯示標誌：在執行階段不會出現標誌。 | 執行指令碼之前顯示標題。這是預設值。相反為 //nologo。 CScript.exe 相對用法： //logo 或 //nologo

藉由使用 WScript.exe [內容] 對話方塊，您可以對 Wscript 在本端機器上執行的所有指令碼，設定全域的指令碼選項。您也可以使用 .wsf 檔來設定個別指令碼的選項。

請參閱

從命令提示字元執行 Script | 併入哪些內容以執行 Script | WScript.exe 和 CScript.exe 選項


WScript.exe 和 CScript.exe 選項

下表所列的大部份選項同時適用於 WScript.exe 和 CScript.exe。例外情況會標示出來。

參數 | 說明
//B | 「批次」模式；抑制使用者提示和指令碼錯誤的命令列顯示。預設是 [互動] 模式。
//D | 開啟偵錯工具。
//E:engine | 以指定的指令碼引擎執行指令碼。
//H:CScript 或 //H:Wscript | 將 CScript.exe 或 WScript.exe 登錄為預設的應用程式以執行指令碼。若都未指定，則 WScript.exe 將為預設值。
//I | 預設值。「互動」模式；可顯示使用者提示和指令碼錯誤。為「批次」模式的相反參數。
//Job:<JobID> | 從 .wsf 檔執行指定的 JobID。
//logo | 預設值。顯示標誌。反義參數為 nologo。
//nologo | 避免在 Run Time 時顯示執行標誌。預設值是 logo。
//S | 儲存此使用者的現行命令列選項。
//T:nn | 啟用逾時： 指令碼可執行的最大秒數。預設值是無限制。//T 參數可藉由設定計時器，避免超時執行指令碼。當執行時間超過指定的值時，CScript 會使用 IActiveScript::InterruptThread 方法來中斷指令碼引擎，並中止此處理序。
//U | 使用於 Windows NT 和 Windows 2000 以強制命令列輸出為 Unicode 格式。CScript 並沒有辦法決定是以 Unicode 或 ANSI 來輸出；預設將會以 ANSI 輸出。
//X | 在偵錯工具中啟動程式。
//? | 為命令參數顯示用法資訊的簡要說明 (用法資訊)。


併入哪些內容以執行 Script

當您利用鍵入該指令碼名稱的方式來執行指令碼時，您所鍵入的資訊將會根據您執行中的 Windows 版本及用來執行指令碼的方法所決定。

WSH 可執行檔 | Windows 版本 | 包括
命令提示字元 | Windows NT 或 2000 | 指定不含副檔名的指令碼名稱。範例： myScript。 備註 如果您指定 WSH 可執行檔名稱，則必須同時併入指令碼的副檔名。範例： cscript myScript.wsf。
命令提示字元 | Windows 9x 或 Millennium | 指定指令碼的副檔名，及在指令碼名稱的前面加上 WSH 可執行檔名稱。 範例： cscript myScript.wsf
[開啟] 方塊的 [執行] 指令 | Windows NT、2000、9x 或 Millennium | 指定指令碼的副檔名。

請參閱

以 WScript.exe 執行 Script | 以 CScript.exe 執行 Script | 拖放支援


設定遠端 WSH

「遠端 WSH」 是 WSH 5.6 內建的新技術，其提供在遠端機器上執行指令碼的能力。藉由「遠端 WSH」，指令碼在執行之前會實際從本端機器複製到遠端機器。為了啟用「遠端 WSH」功能，您首先必須使用正確的安全設定來設定遠端機器。底下的步驟會執行啟用「遠端 WSH」的工作。

備註 遠端和本端機器都必須執行 Windows NT 4 SP3 或更新的版本，才能使用「遠端 WSH」。

若要啟用機器以執行遠端指令碼

  1. 在機器上安裝 WSH V5.6。如果您使用 Windows XP 或已安裝 Internet Explorer 6 或更新的版本，則 WSH 5.6 即已經安裝完畢。
    備註 WSH 5.6 可從網站下載取得，網址是 http://msdn.microsoft.com/scripting
  2. 將您自己新增至遠端機器的「本端管理員」群組。
  3. 若要啟用「遠端 WSH」，請在伺服器上使用 Poledit.exe。
    備註 要啟用「遠端 WSH」的管理者必須取得 Windows 2000 resource kit，或使用 http://msdn.microsoft.com/scripting 以取得包含 WSH 設定的必要 windowsscript.adm 檔。windowsscript.adm 檔必須複製到用來設定 gapplicabel 群組的原則之伺服器。雖然您不必將檔案複製到伺服器的 \WINNT\INF 目錄，但是預設的 adm 檔案將位於該目錄。
    備註 如需 Poledit.exe 的相關資訊，請參閱 Poledit.exe 的線上說明系統。
  4. WSH 現在應該在機器上啟用。若要測試它，請參閱遠端執行 Script。

請參閱

安全性和 Windows Script Host | 遠端執行 Script


基本的 Windows Script Host 工作

本節包含多個常用的 Windows Scripting Host 5.6 script，其示範基本的功能。

備註 下列工作所呈現的指令碼實質上與使用 JScript 或 VBScript 的開發者相同。在適用的情況下，將註記這些指令碼模型之間的差異。此外，每個工作將同時以 JScript 和 VBScript 兩者撰寫。

本節內容

  • 存取網路
  • 建立自動化登入 Script
  • 驅動應用程式
  • 執行檔案管理作業
  • 管理捷徑
  • 操作系統登錄
  • 遠端執行 Script
  • 簽署 Script
  • WSH 和 Windows Management Instrumentation (WMI)


存取網路

藉由 WSH，您可以用設計程式的方式來輕易地存取網路。下列工作示範其中的部份功能。

本節內容

存取網路連線

控制網路印表機

請參閱

WSH 範例


存取網路連線

Network 物件可讓您存取網路的相關資訊。下列指令碼示範如何對映網路磁碟機。在第一個步驟中，此指令碼會建立「Network 物件」。接著，MapNetworkDrive 方法 (為 Network 物件的其中一個方法) 會執行對映作業。MapNetworkDrive 方法採行五個引數：

  • 區域磁碟機指派 (例如，I:)
  • 指到映射遠端磁碟機的「通用命名慣例 (UNC)」路徑
  • 選擇性的 Boolean，指出是否永久連接磁碟機
  • 選擇性的使用者名稱，適用於當您要使用不同的認證時
  • 選擇性的密碼，適用於替代的使用者名稱
// JScript.
var net;
net = new ActiveXObject("WScript.Network");
net.MapNetworkDrive("I:", "\\\\computer2\\public","True","jdoe","jdoepassword");

' VBScript.
Dim net
Set net = CreateObject("WScript.Network")
net.MapNetworkDrive "I:", "\\computer2\public","True","jdoe","jdoepassword"

請參閱

存取網路


控制網路印表機

Network 物件可讓您存取網路的列印裝置。下列指令碼示範 Network 物件的用法，此方法可用來控制網路印表機裝置。

連線遠端印表機

下列指令碼示範如何連線網路共用的列印裝置。在第一個步驟中，此指令碼會建立 Network 物件。接著，AddWindowsPrinterConnection 方法 (為 Network 物件的其中一個方法) 會執行連線作業。AddWindowsPrinterConnection 方法採行兩個參數： 印表機的名稱，以及指到列印裝置的「通用命名慣例 (UNC)」路徑。

// JScript.
var net;
net = new ActiveXObject("WScript.Network");
net.AddWindowsPrinterConnection("\\\\ServerName\\PrinterName");

' VBScript.
Dim net
Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\ServerName\PrinterName"

設定預設印表機

下列指令碼示範如何設定所要的預設列印裝置。在第一個步驟中，此指令碼會建立 Network 物件。接著，SetDefaultPrinter 方法 (為 Network 物件的其中一個方法) 會執行此作業。SetDefaultPrinter 方法採行單一參數 (印表機的名稱)，它是使用指到列印裝置的「通用命名慣例 (UNC)」路徑的本端印表機名稱或遠端印表機名稱。

// JScript.
var net;
net = new ActiveXObject("WScript.Network");
net.SetDefaultPrinter("\\\\ServerName\\PrinterName");

' VBScript.
Dim net
Set net = CreateObject("WScript.Network")
net.SetDefaultPrinter "\\ServerName\PrinterName"

請參閱

存取網路 | AddWindowsPrinterConnection 方法 | SetDefaultPrinter 方法 | RemovePrinterConnection 方法


建立自動化登入 Script

藉由 WSH，您可以建立自動化登入 Script。下列範例假設某家公司有兩台檔案伺服器 (稱為 "server1" 和 "server2")，以及兩台列印伺服器 (稱為 "printer1" 和 "printer2")。為了平衡伺服器的用量，登入名稱開頭為 A - K 的每一個人進入第一台檔案和列印伺服器，而登入名稱開頭為 L - Z 的每一個人進入第兩台檔案和列印伺服器。

備註 在 Windows 9x 中將需要一段時間的延遲，如此使用者登入才會生效。
// JScript.
var oNet, sUser, cInitial, startTime;
oNet = new ActiveXObject("WScript.Network");
// 取得使用者名稱。在 Windows 98 和 Windows ME 上，當指令碼開始執行時，
// 使用者可能不會登入；且將會持續 1/2 秒檢查一次，
// 直到他們登入為止
sUser = oNet.UserName;
startTime = new Date();
while (sUser == "")
{
   var curTime = new Date();
   if (curTime – startTime > 30000) WScript.Quit();
   WScript.Sleep(500);
   sUser = oNet.UserName;
}
// 根據使用者名稱的第一個字母，
// 為 "h" 磁碟機和印表機新增共用
cInitial = sUser.charAt(0).toUpperCase();
if (cInitial < "L")
{
   oNet.MapNetworkDrive("h:", "\\\\server1\\users\\" + sUser);
   oNet.AddWindowsPrinterConnection("\\\\printer1\\hp", "HP LaserJet 4");
}
else
{
   oNet.MapNetworkDrive("h:", "\\\\server2\\users\\" + sUser);
   oNet.AddWindowsPrinterConnection("\\\\printer2\\hp", "HP LaserJet 4");
}

' VBScript.

Option Explicit
Dim oNet, sUser, cInitial, startTime
' Helper 物件
Set oNet = CreateObject("WScript.Network")
' 取得使用者名稱。在 Windows 9x，當指令碼開始執行時，
' 使用者可能不會登入；且將會持續 1/2 秒檢查一次，
' 直到他們登入為止。
sUser = oNet.UserName
startTime = Now
Do While sUser = ""
   If DateDiff("s", startTime, Now) > 30 Then Wscript.Quit
   Wscript.Sleep 500
   sUser = oNet.UserName
Loop
' 根據使用者名稱的第一個字母，
' 為 "h" 磁碟機和印表機新增共用
cInitial = UCase(Left(sUser, 1))
If (cInitial < "L") Then
   oNet.MapNetworkDrive "h:", "\\server1\users\" & sUser
   oNet.AddWindowsPrinterConnection "\\printer1\hp", "HP LaserJet 4"
Else
   oNet.MapNetworkDrive "h:", "\\server2\users\" & sUser
   oNet.AddWindowsPrinterConnection "\\printer2\hp", "HP LaserJet 4"
End If

請參閱

WSH 範例


驅動應用程式

利用 WSH，您可以啟動應用程式。下列指令碼示範其中部份功能。

建立本端伺服器應用程式

部份應用程式 (如 Microsoft Word) 展示可利用程式存取的物件。下列指令碼使用 Word 的拼字檢查器。

// JScript.
var Word, Doc, Uncorrected, Corrected;
var wdDialogToolsSpellingAndGrammar = 828;
var wdDoNotSaveChanges = 0;
Uncorrected = "Helllo world!";
Word = new ActiveXObject("Word.Application");
Doc = Word.Documents.Add();
Word.Selection.Text = Uncorrected;
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show();
if (Word.Selection.Text.length != 1)
   Corrected = Word.Selection.Text;
else
   Corrected = Uncorrected;
Doc.Close(wdDoNotSaveChanges);
Word.Quit();

' VBScript.

Dim Word, Doc, Uncorrected, Corrected
Const wdDialogToolsSpellingAndGrammar = 828
Const wdDoNotSaveChanges = 0

Uncorrected = "Helllo world!"
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add
Word.Selection.Text = Uncorrected
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show

If Len(Word.Selection.Text) <> 1 Then
Corrected = Word.Selection.Text
Else
   Corrected = Uncorrected
End If

Doc.Close wdDoNotSaveChanges
Word.Quit

利用 Shell.Exec 指令產生程式

Shell.Exec 指令在 Shell.Run 方法下提供其他的功能。這些功能包括：

  • 促進環境變數傳遞
  • 存取標準的可執行資料流的能力

下列 VBScript 範例示範如何使用標準的資料流和 Shell.Exec 指令，以搜尋符合通用運算式的檔案名稱之磁碟。

首先，這裡有一個小指令碼，其將現行目錄及以下的每個檔案的完整路徑傾至 StdOut：

' VBScript.
'  MYDIR.VBS
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
DoDir FSO.GetFolder(".")
Sub DoDir(Folder)
   On Error Resume Next
   Dim File, SubFolder
   For Each File In Folder.Files
      WScript.StdOut.WriteLine File.Path
   Next
   For Each SubFolder in Folder.SubFolders
      DoDir SubFolder
   Next
End Sub

接著，此指令碼將針對樣式來搜尋 StdIn，並將符合該樣式的所有行傾至 StdOut。

' MyGrep.VBS
Option Explicit
Dim RE, Line
If WScript.Arguments.Count = 0 Then WScript.Quit
Set RE = New RegExp
RE.IgnoreCase = True
RE.Pattern = WScript.Arguments(0)
While Not WScript.StdIn.AtEndOfStream
   Line = WScript.StdIn.ReadLine
   If RE.Test(Line) Then WScript.StdOut.WriteLine Line
WEnd

整合這兩個指令碼可執行我們所要的內容 — 一個列出某個目錄樹的所有檔案，而另一個則尋找符合通用運算式的行。現在我們撰寫第三支程式來作兩件事： 它使用作業系統將一支程式利用管道送至另一支程式，然後將所得的結果利用管道送至它自己的 StdOut：

// MyWhere.JS
if (WScript.Arguments.Count() == 0)
   WScript.Quit();
var Pattern = WScript.Arguments(0);
var Shell = new ActiveXObject("WScript.Shell");
var Pipe = Shell.Exec("%comspec% /c \"cscript //nologo mydir.vbs | cscript //nologo mygrep.vbs " + Pattern + "\"");
while(!Pipe.StdOut.AtEndOfStream)
   WScript.StdOut.WriteLine(Pipe.StdOut.ReadLine());

請參閱

WSH 範例 | Exec 方法 | Run 方法


執行檔案管理作業

利用 WSH，您可以使用程式來輕易地建立、複製、移動和刪除檔案和資料夾。下列工作示範這些功能。

本節內容

複製檔案和資料夾

對映至特殊資料夾

請參閱

WSH 範例


複製檔案和資料夾

檔案系統操作 (如複製檔案和資料夾) 需要使用「File System 物件 (FSO)」。下列指令碼示範如何使用 FSO 以複製檔案和資料夾兩者。

複製檔案

下列指令碼示範如何將檔案從一個本機資料夾複製到另一個。在第一個步驟，此指令碼建立一個File System 物件。CopyFile 方法 (為檔案系統物件方法) 會執行檔案複製作業。CopyFile 方法採用兩個參數：來源檔案和目的地。

// JScript.
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
FSO.CopyFile("c:\\COMPlusLog.txt", "c:\\x\\");

' VBScript.
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile "c:\COMPlusLog.txt", "c:\x\"

複製資料夾

下列指令碼示範如何將一個本端資料夾的內容複製到本端機器上的另一個資料夾。

備註 此方法必須已存在目的資料夾才能繼續。如需如何使用 WSH 以建立目錄的資訊，請參閱 CreateFolder 方法。

在第一個步驟，此指令碼建立一個File System 物件。CopyFolder 方法 (為檔案系統物件方法) 會執行資料夾複製作業。CopyFolder 方法採用兩個參數：來源資料夾和目的地。

// JScript.
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
FSO.CopyFolder("c:\\x", "c:\\y");

' VBScript.
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder "c:\x", "c:\y"

請參閱

執行檔案管理作業 | FileSystemObject 方法 | CopyFile 方法 | CopyFolder 方法 | CreateFolder 方法 | MoveFolder 方法


對映至特殊資料夾

對映特殊資料夾 (如 [我的文件] 桌面資料夾) 需要使用 Shell 物件。下列指令碼示範如何使用 Shell 物件以建立桌面上的資料夾捷徑。

// JScript.
var Shell, DesktopPath, URL;
Shell = new ActiveXObject("WScript.Shell");
DesktopPath = Shell.SpecialFolders("Desktop");
URL = Shell.CreateShortcut(DesktopPath + "\\MSDN Scripting.url");
URL.TargetPath = "HTTP://MSDN.Microsoft.com/scripting/";
URL.Save();

' VBScript.
Dim Shell, DesktopPath, URL
Set Shell = CreateObject("WScript.Shell")
DesktopPath = Shell.SpecialFolders("Desktop")
Set URL = Shell.CreateShortcut(DesktopPath & "\MSDN Scripting.URL")
URL.TargetPath = "HTTP://MSDN.Microsoft.com/scripting/"
URL.Save

請參閱

執行檔案管理作業


管理捷徑

利用 WSH， 您可以輕易地使用程式來建立、刪除、移動和複製捷徑。下列工作示範其中部份功能。

本節內容

複製捷徑

建立捷徑

刪除捷徑

移動捷徑

請參閱

WSH 範例


複製捷徑

複製捷徑需要使用「File System 物件 (FSO)」。下列指令碼示範使用如何 File System 物件來複製捷徑。

// JScript.
Shell = new ActiveXObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
DesktopPath = Shell.SpecialFolders("Desktop") + "\\MSDN Scripting url";
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") + "\\"
FSO.CopyFile(DesktopPath, MyDocumentsPath);

' VBScript.
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop") + "\MSDN Scripting.url"
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") + "\\"
FSO.CopyFile DesktopPath, MyDocumentsPath

請參閱

管理捷徑


建立捷徑

建立捷徑需要使用檔案 Shell 物件。下列指令碼示範如何使用檔案 Shell 物件來建立捷徑。

// JScript.
Shell = new ActiveXObject("WScript.Shell");
DesktopPath = Shell.SpecialFolders("Desktop");
link = Shell.CreateShortcut(DesktopPath + "\\test.lnk");
link.Arguments = "1 2 3";
link.Description = "test shortcut";
link.HotKey = "CTRL+ALT+SHIFT+X";
link.IconLocation = "foo.exe,1";
link.TargetPath = "c:\\blah\\foo.exe";
link.WindowStyle = 3;
link.WorkingDirectory = "c:\\blah";
link.Save();

' VBScript.
Set Shell = CreateObject("WScript.Shell")
DesktopPath = Shell.SpecialFolders("Desktop")
Set link = Shell.CreateShortcut(DesktopPath & "\test.lnk")
link.Arguments = "1 2 3"
link.Description = "test shortcut"
link.HotKey = "CTRL+ALT+SHIFT+X"
link.IconLocation = "foo.exe,1"
link.TargetPath = "c:\blah\foo.exe"
link.WindowStyle = 3
link.WorkingDirectory = "c:\blah"
link.Save

請參閱

管理捷徑


刪除捷徑

刪除捷徑需要使用「File System 物件 (FSO)」。下列指令碼示範如何使用 File System 物件來刪除捷徑。

// JScript.
Shell = new ActiveXObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
DesktopPath = Shell.SpecialFolders("Desktop");
FSO.DeleteFile(DesktopPath + "\\test.lnk")

' VBScript.
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop")
FSO.DeleteFile DesktopPath & "\test.lnk"

請參閱

管理捷徑


移動捷徑

移動捷徑需要使用「File System 物件 (FSO)」。下列指令碼示範如何使用File System 物件來移動捷徑。

// JScript.

Shell = new ActiveXObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
DesktopPath = Shell.SpecialFolders("Desktop") + "\\test.lnk";
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") + "\\test.lnk";
FSO.MoveFile(DesktopPath, MyDocumentsPath);
' VBScript.

Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop") & "\test.lnk"
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") & "\test.lnk"
FSO.MoveFile DesktopPath, MyDocumentsPath

請參閱

管理捷徑


操作系統登錄

利用 WSH，您可以管理系統登錄。下列指令碼示範其中部份功能。

// JScript.
Sh = new ActiveXObject("WScript.Shell");
key =  "HKEY_CURRENT_USER\\"
Sh.RegWrite( key + "WSHTest\\", "testkeydefault");
Sh.RegWrite( key + "WSHTest\\string1", "testkeystring1");
Sh.RegWrite( key + "WSHTest\\string2", "testkeystring2", "REG_SZ");
Sh.RegWrite( key + "WSHTest\\string3", "testkeystring3", "REG_EXPAND_SZ");
Sh.RegWrite( key + "WSHTest\\int", 123, "REG_DWORD");
WScript.Echo( Sh.RegRead(key + "WSHTest\\"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\string1"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\string2"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\string3"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\int"));
Sh.RegDelete(key + "WSHTest\\");

' VBScript.
Set Sh = CreateObject("WScript.Shell")
key =  "HKEY_CURRENT_USER\"
Sh.RegWrite key & "WSHTest\", "testkeydefault"
Sh.RegWrite key & "WSHTest\string1", "testkeystring1"
Sh.RegWrite key & "WSHTest\string2", "testkeystring2", "REG_SZ"
Sh.RegWrite key & "WSHTest\string3", "testkeystring3", "REG_EXPAND_SZ"
Sh.RegWrite key & "WSHTest\int", 123, "REG_DWORD"
WScript.Echo Sh.RegRead(key & "WSHTest\")
WScript.Echo Sh.RegRead(key & "WSHTest\string1")
WScript.Echo Sh.RegRead(key & "WSHTest\string2")
WScript.Echo Sh.RegRead(key & "WSHTest\string3")
WScript.Echo Sh.RegRead(key & "WSHTest\int")
Sh.RegDelete key & "WSHTest\"

請參閱

WSH 範例


遠端執行 Script

WSH 5.6 可執行常駐在遠端系統的指令碼。下列指令碼示範此功能。這些指令碼假設檔案位於稱為 "c:\wsh5.6" 的本端機器目錄上；請視需要變更本端路徑和遠端機器名稱。

在本端機器上一開始執行 RemoteTest.WSF 之後，當 DCOM 驗證您的身份時會發生暫停。當您看到 "Done" 訊息時，遠端機器上稱為 "c:\beenhere.txt" 的檔案將指出您執行指令的時間 (依遠端電腦的時鐘)。

// JScript.
RemoteTest.WSF
-------------------------------
<package>
<job>
<script language="JScript">
var oController = new ActiveXObject("WSHController");
var oProcess = oController.CreateScript("c:\\wsh5.6\\beenhere.wsf", "remmachine");
oProcess.Execute();
while (oProcess.Status != 2) WScript.Sleep(100);
WScript.Echo("Done");
</script>
</job>
</package>
-------------------------------
BeenHere.WSF
-------------------------------
<package>
<job>
<script language="JScript">
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fout = fso.CreateTextFile("c:\\beenhere.txt", true);
fout.WriteLine(new Date);
fout.Close();
</script>
</job>
</package>
-------------------------------

' VBScript.
RemoteTest.WSF
-------------------------------
<package>
<job>
<script language="VBScript">
set oController = CreateObject("WSHController")
set oProcess = oController.CreateScript("c:\wsh5.6\beenhere.wsf", "remmachine")
oProcess.Execute
While oProcess.Status <> 2
   WScript.Sleep 100
WEnd
WScript.Echo "Done"
</script>
</job>
</package>
-------------------------------

BeenHere.WSF
-------------------------------
<package>
<job>
<script language="VBScript">
set fso = CreateObject("Scripting.FileSystemObject")
set fout = fso.CreateTextFile("c:\beenhere.txt", true)
fout.WriteLine Now
fout.Close
</script>
</job>
</package>

請參閱

WSH 範例 | 設定遠端 WSH | WshRemote 物件


簽署 Script

下列指令碼示範如何建立使用於驗證過程的簽名。此指令碼使用 Signer 物件和 SignFile 方法以建立數位簽名。

// JScript.
<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="JScript">
   var Signer, File, Cert, Store;
   if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file")))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit();
   }
   Signer = new ActiveXObject("Scripting.Signer");
   File  = WScript.Arguments.Named("file");
   Cert  = WScript.Arguments.Named("cert");
   Store = WScript.Arguments.Named("store");
    Signer.SignFile(File, Cert, Store);
</script>
</job>

'VBScript
<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="VBScript">
   Dim Signer, File, Cert, Store
   If Not (WScript.Arguments.Named.Exists("cert")) And WScript.Arguments.Named.Exists("file")) Then
      WScript.Arguments.ShowUsage
      WScript.Quit
   End If
   Set Signer = CreateObject("Scripting.Signer")
   File  = WScript.Arguments.Named("file")
   Cert  = WScript.Arguments.Named("cert")
   Store = WScript.Arguments.Named("store")
    Signer.SignFile File, Cert, Store
</script>
</job>

請參閱

WSH 範例 | 驗證Script | 簽署 Script


WSH 和 Windows Management Instrumentation (WMI)

利用 WSH，您可以輕易使用「Windows Management Instrumentation (WMI)」。下列指令碼示範如何使用 WSH 和 WMI，透過 ADSI 來擷取使用者的登入時間。

備註 如需 WMI 的相關資訊，請參閱 WMI SDK，網址是 (http://msdn.microsoft.com)。
// JScript.
LoginProfiles = GetObject("winmgmts:").InstancesOf ("Win32_NetworkLoginProfile");
for(e = new Enumerator(LoginProfiles) ; !e.atEnd() ; e.moveNext())
{
   Profile = e.item();
   WScript.Echo(Profile.Name);
   WScript.Echo(Profile.LastLogon);
}

' VBScript.
Set LoginProfiles = GetObject("winmgmts:").InstancesOf ("Win32_NetworkLoginProfile")
   for each Profile in LoginProfiles
      WScript.Echo Profile.Name
      WScript.Echo Profile.LastLogon
   next

請參閱

基本 Windows Script Host 工作


WSH 逐步解說

下列逐步解說說明一般的網路管理者或其他 IT 專家如何使用 WSH 5.6，建立用來完成有用工作的程序。

備註 此逐步解說顯示於 VBScript 中。建立這些指令碼的程序幾乎與使用 VBScript 或 Jscript 的開發者的程序相同。

在此逐步解說的過程中，您將執行下列活動：

  • 建立指令碼，此指令碼會在多台遠端機器上建立一般共用，並使其常駐在檔案中。
  • 建立指令碼，此指令碼會在多台遠端機器上建立共用的列印裝置連線，並將它建立為預設的列印裝置。

若要完成逐步解說，必須正確設定所有遠端機器以啟用「遠端 WSH」。如需啟用這些安全設定的詳細資訊，請參閱設定遠端 WSH。

備註 下列程式碼取材自本文件的範例。若要檢視整個範例，請參閱 WSH 網路管理員範例 Script。

建立變數和常數

若要建立必要的變數和常數

  1. 在您的文字指令碼編輯器中，輸入變數。
    Dim FSO
Dim Services
Dim SecDescClass
Dim SecDesc
Dim Trustee
Dim ACE
Dim Share
Dim InParam
Dim Network
  2. 在您的文字指令碼編輯器中，輸入常數，變更值以反映適用您網路環境的 UNC 名稱和路徑。
    Const FolderName = "C:\Public"
Const AdminServer = "\\AdminMachine"
Const ShareName = "Pubs"
Const PrinterShare = "\\CorpPrinters\PrinterShare"

連線印表機並將其設為預設值

若要將機器連線至共用列印裝置

  • 在您的文字指令碼編輯器中，輸入用來建立列印裝置的程式碼。此程式碼使用前一個步驟所起始設定的 Network 變數和 PrinterShare 常數。
    Set Network = CreateObject("Wscript.Network")
Network.AddWindowsPrinterConnection PrinterShare

若要將機器設為預設的列印裝置

  • 在您的文字指令碼編輯器中，輸入用來設定預設列印裝置的程式碼。此程式碼使用在第一個步驟初始化的 Network 變數和 PrinterShare 常數。
    Network.SetDefaultPrinter PrinterShare

建立一般共用、將檔案複製到其中，再共用它

若要在機器上建立一般共用

  • 在您的文字指令碼編輯器中，輸入用來建立「File System 物件 (FSO)」和建立資料夾的程式碼。此指令碼驗證資料夾是否存在。若資料夾不存在，則指令碼會建立它。此程式碼使用在第一個步驟初始化的 FSO 變數和 FolderName 常數。
    Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(FolderName) Then
   FSO.CreateFolder(FolderName)
End If

若要將檔案複製到新建的資料夾

  • 在您的文字指令碼編輯器中輸入程式碼，此程式碼用來建立「File System 物件 (FSO)」，以及將檔案從您的本端機器複製到遠端機器。此程式碼使用在第一個步驟初始化的 FSO 變數和 FolderName 常數。
    Call FSO.CopyFile(AdminServer & "\Public\Images\*.*", FolderName)

若要建立與 WMI 共用的新建資料夾

  • 在您的文字指令碼編輯器中，使用 Windows Management Instrumentation (WMI) 來輸入建立共用的程式碼。此共用建立於以上所產生的資料夾。此指令碼首先連線至 WMI。接著，它會設定安全模擬等級和 Windows NT 特權，讓您能設定「判別存取控制清單 (DACLs)」和「安全存取控制清單 (SACLs)」。然後，它會建立新的安全描述項，並為新共用安裝一對「存取控制資料項目 (ACEs)」。最後，它會以新的安全描述項來建立新共用。此程式碼使用第一個步驟所起始設定的 Services、SecDescClass、SecDesc、Trustee、ACE、Share 和 InParam 變數，及 FolderName、AdminShare 和 ShareName 常數。
    備註 WMI 是依賴 Web Based Enterprise Management (WBEM).的強大且功能廣泛的技術。WMI 主要用於存取及管理企業環境下的管理資訊。如需 WMI 的相關資訊，請參閱 Microsoft Windows Management Instrumentation: Background and Overview，網址是 (http://msdn.microsoft.com/library/default.asp?URL=/library/backgrnd/html/wmixwdm.htm)。
    Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!" & AdminServer & "\ROOT\CIMV2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = Services.Get("Win32_Trustee").SpawnInstance_
Trustee.Domain = Null
Trustee.Name = "EVERYONE"
Trustee.Properties_.Item("SID") = Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
Set ACE = Services.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = 2032127
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)
Set Share = Services.Get("Win32_Share")
Set InParam = Share.Methods_("Create").InParameters.SpawnInstance_()
InParam.Properties_.Item("Access") = SecDesc
InParam.Properties_.Item("Description") = "Public Share"
InParam.Properties_.Item("Name") = ShareName
InParam.Properties_.Item("Path") = FolderName
InParam.Properties_.Item("Type") = 0
Share.ExecMethod_("Create", InParam)

執行完整的 Script

本文件所包含的這個範例有一個完整的可執行指令碼，此指令碼擁有上述所有功能。請參閱 WSH 網路管理者範例 Script。

執行指令碼之前，請確定已正確地設定所有遠端機器，才能執行遠端指令碼。您可使用伺服器上的 Poledit.exe 來完成這項作業。如需相關資訊，請參閱設定遠端 WSH。

執行遠端 WSH 時，會將指令碼複製到遠端機器。一旦遠端機器的安全設定通過驗證，且成功複製指令碼之後，將傳回指出成功或失敗的訊息。若成功，指令碼接著會在遠端機器上執行。如需執行遠端 WSH 指令碼的相關資訊，請參閱遠端執行指令碼。

請參閱

設定遠端 WSH | 存取網路 | 遠端執行 Script


WSH 網路管理員範例 Script

此 WSH 網路範例示範一般的網路管理員如何在網路上的多台遠端機器上使用指令碼。此範例指令碼執行有用的管理員工作，包括：

  • 將機器連線至網路列印裝置
  • 將新連線的列印裝置設為預設印表機
  • 在機器上建立一般公用的資料夾
  • 將檔案複製到新建的資料夾
  • 使用 Windows Management Instrumentation (WMI)，將新建的資料夾建立為共用。
    備註 WMI 是依賴 Web Based Enterprise Management (WBEM).的強大且功能廣泛的技術。WMI 主要用於存取及管理企業環境下的管理資訊。如需 WMI 的相關資訊，請參閱 Microsoft Windows Management Instrumentation: Background and Overview，網址是 (http://msdn.microsoft.com/library/default.asp?URL=/library/backgrnd/html/wmixwdm.htm)。

管理者必須在遠端機器上建立必要的安全設定。如需相關資訊，請參閱設定遠端 WSH。管理者接著必須將範例複製和貼上指令碼編輯器，及變更常數以反映對映的網路路徑和機器名稱。最後，管理者便可執行指令碼。

若要執行此範例

  1. 在遠端機器上建立必要的安全設定。
  2. 將以下的 AdminScript.vbs 指令碼複製到您的指令碼文字編輯器。
  3. 變更常數以反映您的網路路徑和機器名稱。
  4. 以適用的遠端機器名稱來取代 remmachine，再執行指令碼：
    var oController = new ActiveXObject"WSHController"
var oProcess = oController.CreateScript "c:\MyLocalDir\\AdminScript.vbs", "remmachine"
oProcess.Execute()
while (oProcess.Status != 2)
     WScript.Sleep(100)
WScript.Echo"Done"

AdminScript.vbs 範例

' 遠端 WSH Admin 範例  AdminScript.vbs
'
' 此範例程式碼將執行一些常見的管理工作，
' 這些工作可能是網路管理員
' 要在其網路上的許多機器上所執行的工作：  它會建立公用目錄、
' 以部份檔案來產生它，然後將此目錄與他人共用。  它也會安裝
' 機器預設的印表機連線。

' 請注意：為了不讓此範例程式碼太大，
' 我們省略了錯誤處理。  實際的程式碼產品將使用
' 正確的錯誤處理，因為這些作業的其中許多作業可能會失敗；
' 例如，磁碟可能用完空間。

Option Explicit

Dim FSO
Dim Services
Dim SecDescClass
Dim SecDesc
Dim Trustee
Dim ACE
Dim Share
Dim InParam
Dim Network

Const FolderName = "C:\Public"
Const AdminServer = "\\AdminMachine"
Const ShareName = "Pubs"
Const PrinterShare = "\\CorpPrinters\PrinterShare"

' 首先我們將印表機加入這台機器，並將其設為預設值。

Set Network = CreateObject("Wscript.Network")
Network.AddWindowsPrinterConnection PrinterShare
Network.SetDefaultPrinter PrinterShare

' 接著我們建立資料夾，並使其與部份檔案在一起。

Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(FolderName) Then
   FSO.CreateFolder(FolderName)
End If

Call FSO.CopyFile(AdminServer & "\Public\Images\*.*", FolderName)

' 使用 WMI，將資料夾製作成共用
' 如需此程式碼運作方式的資訊，請參閱 WMI SDK。

Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!" & AdminServer & "\ROOT\CIMV2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = Services.Get("Win32_Trustee").SpawnInstance_
Trustee.Domain = Null
Trustee.Name = "EVERYONE"
Trustee.Properties_.Item("SID") = Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
Set ACE = Services.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = 2032127
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)
Set Share = Services.Get("Win32_Share")
Set InParam = Share.Methods_("Create").InParameters.SpawnInstance_()
InParam.Properties_.Item("Access") = SecDesc
InParam.Properties_.Item("Description") = "Public Share"
InParam.Properties_.Item("Name") = ShareName
InParam.Properties_.Item("Path") = FolderName
InParam.Properties_.Item("Type") = 0
Share.ExecMethod_("Create", InParam)

' 此時便大功告成。

請參閱

WSH 逐步解說 | 存取網路 | 設定遠端 WSH | 遠端執行 Script


安全性和 Windows Script Host

Windows Script Host 是種自動化 Windows 的彈性工具，但在想進行破壞的人手中卻可能是危險的。

為了在防止濫用 Windows Script Host 的同時仍不減損其功能，Windows Script Host 5.6 使用了新的安全模型。

Script 使用者現在可在執行指令碼之前驗證其授權。Script 開發者可簽名其指令碼以防止未獲授權的修改。系統管理員可強制制訂嚴格的原則，以決定哪些使用者有本端或遠端執行指令碼的權限。

In this Section

CryptoAPI 工具

簽署 Script

簽署驗證原則

驗證 Script

軟體限制策略


CryptoAPI 工具

CryptoAPI 工具是用來建立和驗證 *.exe、*.cab、*.dll、*.ocx 和指令碼 (*js、*.vbs 和 *.wsf) 檔案中的數位簽名。

CryptoAPI 工具是用來數位簽名 Microsoft® Authenticode® 所使用的檔案，及檢視和管理認證、認證回收清單 (CRLs) 和認證信任清單 (CTLs)。如需「CrptoAPI 工具」的詳細資訊，請參閱 CryptoAPI Start Page，網址是 (http://msdn.microsoft.com/library/psdk/crypto/portalapi_3351.htm?RLD=290)。

請參閱

安全性和 Windows Script Host | 簽署 Script | 驗證 Script | 簽署驗證策略


簽署 Script

簽署指令碼將撰寫指令碼註解中的數位簽名區塊。包含作者身份的編碼相關資訊之簽章，也封裝了指令碼本身的編碼相關資訊。因此，任何對指令碼的變更嘗試也會讓簽名失效。

指令碼簽名是由 Scripting.Signer 物件的 SignFile 方法利用程式所完成的。

<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="JScript">
   var Signer, File, Cert, Store;
   if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file")))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit();
   }
   Signer = new ActiveXObject("Scripting.Signer");
   File  = WScript.Arguments.Named("file");
   Cert  = WScript.Arguments.Named("cert");
   if (WScript.Arguments.Named.Exists("store"))
   {
      Store = WScript.Arguments.Named("store");
   }
   else
   {
      Store = "";
   }
    Signer.SignFile(File, Cert, Store);
</script>
</job>
備註 為了簽名指令碼，您必須擁有有效的認證。請詢問您的系統管理員有關您的認證原則為何，或聯絡商業認證機構。

請參閱

安全性和 Windows Script Host | 驗證 Script | 簽署驗證策略 | WinTrust | 簽署 Script


軟體限制策略

「軟體限制原則」為系統管理員所設定的信任原則規範，用來限制未完全信任的指令碼以避免在作業系統中執行未獲授權的動作。

「軟體限制原則」使用下列三個準則以決定信任等級：

  • 指令碼中的任何簽名資訊
  • 從中執行指令碼的路徑
  • 檔案內容

「軟體限制原則」定義下列預設的容器：

  • 網域系統管理員
  • 機器系統管理員
  • 機器使用者
  • 訪客使用者
  • 拒絕

此外，您可以定義您自己的自訂容器和設定您自己的策略。

請參閱

安全性和 Windows Script Host


簽署驗證策略

在 WSH 中，系統管理員可選擇開啟或關閉簽章驗證。如果系統管理員開啟簽署驗證，則機器只會執行由信任授權所簽名的指令碼。在簽署驗證開啟情況下，有二種可能情況：

  • 若無法判斷信任與否，則會提示使用者確認是否要執行指令碼。
  • 若無法判斷信任與否，則不執行指令碼。

如果系統管理員關閉簽章驗證，則機器允許使用者執行任何指令碼。

在 Windows 2000 中，簽章驗證原則是透過「本端安全原則」編輯器設定。如需「本端安全原則」編輯器和 WSH 設定的相關資訊，請參閱線上的 Windows 說明系統。

簽署驗證策略註冊鍵位於下列位置：

\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows Script Host\Settings\TrustPolicy

此鍵設為下列 REG_DWORD 值的其中一個：

  • 0 執行所有指令碼
  • 1 若指令碼未信任則提示使用者
  • 2 只執行信任指令碼

請參閱

安全性和 Windows Script Host | 簽署 Script | 驗證 Script | WinTrust


驗證 Script

驗證指令碼會判斷將執行的指令碼是否來自信任的來源。它也可讓您確認指令碼的整合性。WSH 在嘗試執行指令碼之前會先驗證它們，但您可能想依自己所需來驗證指令碼。

指令碼驗證是由 Signer 物件的 VerifyFile 方法利用程式所完成的。

此 VerifyFile 方法：

  • 驗證簽署的有效性。
  • 驗證簽署屬於您「信任發行者清單」所信任的人。
  • 驗證指令碼自簽名以來尚未變更。
備註 雖然 VerifyFile 方法會以程式確認數位簽名，您仍必定確信真的信任「信任發行者清單」中的信任來源。

請參閱

安全性和 Windows Script Host | 簽署指令碼 | 簽署驗證原則 | WinTrust


參考

本節內容

XML 項目
WSH XML 項目的清單。
物件
WSH 物件的清單。
屬性
WSH 屬性的清單。
方法
WSH 方法的清單。
事件
WSH 事件的清單。
錯誤訊息
WSH 錯誤訊息的清單。

相關章節

WSH 基本概念
學習 WSH 的基本知識。


XML 項目

本節內容

<?job?> 項目
為 XML 處理指令，其指定錯誤處理的屬性。
<?XML?> 項目
指定檔案必須剖析為 XML。
<description> 項目
當使用者執行 ShowUsage()，或以 /? 命令列參數執行指令碼時，標記出現的說明文字。
<example> 項目
讓您的指令碼自我記錄。
<job> 項目
標記 Windows 指令碼檔案 (*.wsf) 中某個檔案的開頭和結尾。
<named> 項目
標記指令碼特殊的命名引數。
<object> 項目
為 XML 項目，用於 Windows Script 元件檔案及定義可為指令碼參照的物件。
<package> 項目
在一個 Windows Script Host 控制 (.wsf) 檔案納入多個工作定義。
<reference> 項目
為 XML 項目，包括對外部型別程式庫的參考。
<resource> 項目
為 XML 項目，其隔離無法硬是編碼至指令碼的文字或數值資料。
<runtime> 項目
為某個指令碼的執行階段引數集分組。
<script> 項目
為包含指令碼的 XML 項目，可用來定義 Windows Script 元件的行為。

相關章節

WSH 參考
組成 WSH 參考的項目清單。
WSH 基本概念
學習 WSH 的基本知識。


<?job?> 項目

指定錯誤處理的屬性。

<?job error="flag" debug="flag" ?>

引數

error
為布林值。False 是所有屬性的預設值。設為 true 可容許語法的錯誤訊息，或 Windows script (.wsf) 檔案中的執行階段錯誤。
Debug
為布林值。False 是所有屬性的預設值。設為 true 可啟用偵錯。若未啟用偵錯，您將無法啟動 Windows script 檔案的指令碼偵錯工具。

附註

雖然大部份 Windows Script 檔案通常在產生期間靜態地執行，但您會發現當您開發 Windows Script (.wsf) 檔案時，系統若能將檔案的錯誤通知您會對您很有用。

範例

下列範例使用兩種不同的指令碼語言，將兩個工作納入一個 .wsf 檔案。

<package>
   <job id="DoneInVBS">
      <?job debug="true"?>
      <script language="VBScript">
         WScript.Echo "This is VBScript"
      </script>
   </job>

   <job id="DoneInJS">
      <?job debug="true"?>
      <script language="JScript">
         WScript.Echo("This is JScript");
      </script>
   </job>
</package>

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <object> 項目 | <package> 項目 | <resource> 項目 | <?XML?> 項目


<?XML?> 項目

指出檔案必須剖析成 XML。

<?XML version="version" [standalone="DTDflag"] ?>

引數

version
格式為 n.n 的字串，指定檔案的 XML 層次。使用值 1.0。
DTDflag
選擇項。布林值指出 XML 檔案是否包括外部的「文件型別定義 (DTD)」的參考。Script 元件 XML 檔案不包括這類參考，所以此屬性的值恆為 [yes]。

附註

此宣告必須是檔案的第一個項目，且前面不能有任何空白行。

存在此宣告時，會將 script 元件編譯器置於嚴謹的 XML 模式，其中的項目型別和屬性名稱是區分大小寫的、屬性值以單引號或雙引號來含括，而且會剖析所有項目。若未包括此宣告，則編譯器將允許較不嚴謹的語法。

若您的指令碼元件檔案將在支援 XML 的編輯器中編輯，則您必須包括此宣告並遵循 XML 慣例。

範例

下列範例示範 <?XML?> 項目的用法：

<?XML version="1.0" standalone="yes" ?>

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <object> 項目 | <package> 項目 | <resource> 項目 | <?job?> 項目


<description> 項目

標示在執行 ShowUsage 方法，或使用 /? 命令行參數來執行指令碼時，所顯示的描述文字。

<description>
    此區段描述指令碼
</description>

附註

您的描述可以長於一行。

若不要括號出現於用法中，請不要在描述中加入括號。描述標籤之間的所有文字會出現在用法清單中。包括其它標籤、索引標籤、新行和特殊字元之間的文字。

<description> 項目類似 <example> 項目，除了它是出現在用法的開頭，而 <example> 項目出現在尾端。

範例

下列指令碼示範 <description> 項目的用法：

<runtime>
    <description>
        This script reboots a server
    </description>
    <!--...etc...-->
</runtime>

請參閱

ShowUsage 方法 | <runtime> 項目 | <named> 項目 | <unnamed> 項目 | <example> 項目


<example> 項目

為工作提供用法的範例。

<example>
   Example text
</example>

附註

<example> 項目含括於 <runtime> 項目中。

範例

下列指令碼示範 <example> 項目的用法：

<job>
    <runtime>
        <description>This script reboots a server</description>
        <named
            name = "Server"
            helpstring = "Server to run the script on"
            type = "string"
            required = "true"
        />
        <example>Example: reboot.wsf /Server:scripting</example>
    </runtime>
</job>

<example> 和 </example> 標籤之間的所有內容都會加以擷取，包括新行和多出的空白區。從該指令碼呼叫 ShowUsage 方法將產生下列輸出：

此指令碼重新開機伺服器

用法： reboot.wsf /server:value

選項

server ： 在其上執行指令碼的伺服器

範例:

reboot.wsf /server:scripting

請參閱

ShowUsage 方法


<job> 項目

標示 Windows Script 檔案 (*.wsf) 中的工作之開頭和結尾。

<job [id=JobID]>
    job code
</job>

引數

JobID
選擇項。唯一識別 Windows Script 檔案範圍中的工作。

附註

Windows 指令碼檔案中的每個 jobID 必須是唯一的。

一組工作標籤的每一個指令碼將從上至下地循序執行。

一個工作包含一或多個指令碼區塊。一個指令碼區塊是一組 <script> 標籤之間的任何指令碼。一個指令碼區塊可包含多個指令碼，而每一個指令碼可以是不同的指令碼語言。

若要執行特定的工作或執行多個工作，請使用 //Job 參數。若指定一個以上的工作，則工作將循序執行 (這將顯示於以下的範例)。若未指定工作，則只會執行第一個工作。若在 Windows Script 檔案中有兩個或多個工作，則必須以 <package> 標籤括住它們。

範例

下列指令碼範例是稱為 myScript.wsf 的 Windows Script 檔案。此檔案包含兩個不同的工作，每一個是用不同的指令碼語言所撰寫的。第一個工作以 VBScript 撰寫，其中包含識別碼 DoneInVBS。第兩個工作以 Jscript 撰寫，其中包含已知的識別碼 DoneInJS。

<package>
    <job id="DoneInVBS">
    <?job debug="true"?>
        <script language="VBScript">
           WScript.Echo "This is VBScript"
        </script>
    </job>
    <job id="DoneInJS">
    <?job debug="true"?>
        <script language="JScript">
           WScript.Echo("This is JScript");
        </script>
    </job>
</package>

若要在 Windows 指令碼檔案 (myScript.wsf) 中執行第兩個工作，請在命令提示字元下鍵入下列內容。

cscript myScript.wsf //job:DoneInJS

若要在 myScript.wsf 中同時執行這兩個工作，請在命令提示下鍵入下列內容。

cscript myScript.wsf //job:DoneInVBS //job:DoneInJS

請參閱

ShowUsage 方法 | <runtime> 項目 | <named> 項目 | <unnamed> 項目 | <description> 項目 | <example> 項目


<named> 項目

說明指令碼的命名引數。

<named
   name = namedname
   helpstring = helpstring
   type = "string|boolean|simple"
   required = boolean
/>

引數

name
代表說明中的引數名稱之字串。定義命令列和指令碼中的引數。
helpstring
代表引數的說明描述之字串。WSH 執行階段使用 ShowUsage 方法或 /? 引數來提供輔助說明。
type
選擇項。說明引數的類型，其定義如何從命令列剖析引數。預設值為 simple。
required
選擇項。為布林值，其指出是否需要某個引數。只影響用法的顯示。

附註

<named> 項目是由一組 runtime 標籤所包含 (包在括號之中)。

含名稱 server 的一個引數將在命令列提供一個 /server 引數，及在 WSHNamed 引數集合中提供一個 server 引數。

若型別為 string，則引數是字串。引數將當作 /named:stringvalue 傳到指令碼。

若型別為 Boolean，則引數是布林。引數將傳至指令碼，作為 /named+ 以開啟它，或作為 /named- 以關閉它。

若型別為 simple，則引數不會取得其它值，且只會以名稱 /named 來傳遞。

範例

下列指令碼示範 <named> 項目的用法：

<job>
<runtime>
  <named
    name="server"
    helpstring="Server to access"
    type="string"
    required="true"
  />
  <named
    name="user"
    helpstring="User account to use on server. Default is current account."
    type="string"
    required="false"
  />
  <named
    name="enable"
    helpstring="If true (+), enables the action. A minus(-) disables."
    type="boolean"
    required="true"
  />
  <named
    name="verbose"
    helpstring="If specified, output will be verbose."
    type="boolean"
    required="false"
  />
</runtime>
<script language="JScript">
  WScript.Arguments.ShowUsage();
</script>
</job>

當顯示用法時，此工作將產生下列輸出：

用法： example.wsf /server:value [/user:value] /enable[+|-] [/verbose]

選項：

server    ： 要存取的伺服器
user      ： 在伺服器上使用的使用者帳戶。預設值是目前帳戶。
enable    ： 若為 true (+)，則啟用帳戶。減 (-) 則停用。
verbose   ： 若指定，將輸出詳細資訊。

請參閱

ShowUsage 方法 | <runtime> 項目 | <unnamed> 項目 | <description> 項目 | <example> 項目


<object> 項目 (Windows Script Host)

Windows Script Host

<object> 項目

定義可為指令碼參考的 Windows Script (.wsf) 檔案中的物件。

<object id="objID" [classid="clsid:GUID" | progid="progID"] />

引數

objID
必要項。參照您指令碼的物件之名稱。物件 ID 值必須以一個字母開頭，且可包括字母、數字和底線 (_)。物件 ID 在 Windows Script 檔案的範圍中必須是唯一的。
GUID
選擇項。物件的類別 ID (GUID)。
progID
選擇項。物件的程式 ID，可指定為類別 ID 的取代品。

附註

<object> 項目提供一種方法以在全域顯示物件，以便使用於 Windows Script 檔案內部的指令碼，而不需使用如 CreateObject() 等函數。使用 <object> 項目可以全域範圍來使用物件，及允許指令碼工具提供物件成員的陳述式完成。

您必須指定 classid 或 progid。

範例

<job>
<obect id="fso" progid="Scripting.FileSystemObject"/>
<script language="Jscript">

var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();

</script>
</job>

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <package> 項目


<package> 項目 (Windows Script Host)

Windows Script Host

<package> 項目

在一個 Windows Script (.wsf) 檔案中包括多個工作定義。

<package>
   code for one or more jobs
</package>

附註

當一個 .wsf 檔案只包含一個工作時，<package> 項目是選用的。

範例

下列範例使用兩種不同的指令碼語言，將兩個工作納入一個 .wsf 檔案：

<package>
   <job id="DoneInVBS">
   <?job debug="true"?>
      <script language="VBScript">
         WScript.Echo "This is VBScript"
      </script>
   </job>

   <job id="DoneInJS">
   <?job debug="true"?>
      <script language="JScript">
         WScript.Echo("This is JScript");
      </script>
   </job>
</package>

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <object> 項目


<reference> 項目 (Windows Script Host)

Windows Script Host

<reference> 項目

包括外部型別程式庫的參考。

<reference [object="progID"|guid="typelibGUID"] [version="version"] />

引數

progID
型別程式庫衍生的來源程式 ID。它可以包括版本編號 (例如，ADO.Recordset.2.0)、型別程式庫明確的程式 ID，或納入型別程式庫的可執行檔的程式 ID (如 .DLL)。若使用物件屬性，便不需要指定版本屬性，因為版本可從程式 ID 推斷。若指定了物件屬性，您也無法指定 GUID 屬性。
typelibGUID
要參照的型別程式庫的 GUID。若指定了 GUID 屬性，則也無法指定物件屬性。
version
選擇項。要使用的型別程式庫的版本編號。它的格式必須是 <major version>[.<minor version>]。若未指定版本，則預設的版本為 1.0。若物件屬性是用來指定型別程式庫，且尚未指定版本，則將從指定的程式 ID 的註冊鍵來衍生版本。若找不到，則預設為 1.0。

附註

藉由參考您 Windows Script (.wsf) 檔案的型別程式庫，可讓您使用定義於指令碼的型別程式庫中的常數。<reference> 項目會尋找並使用與特定的程式 ID 或型別程式庫名稱所相關的型別程式庫。型別程式庫資訊可在 .tlb、.olb 或 .dll 檔案中取得。

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <object> 項目 | <package> 項目


<resource> 項目 (Windows Script Host)

Windows Script Host

<resource> 項目

隔離無法硬式編碼入指令碼的文字或數值資料。

<resource id="resourceID">
   text or number
</resource>

引數

resourceID
指令碼內部資源的唯一識別碼。

附註

<resource> 項目可讓您隔離要在指令碼中參照的 Windows Script (.wsf) 檔案中的字串或數值。例如，resource 項目通常用來保留可能區域化為其他語言的字串。

若要取得 resource 的值，請呼叫 getResource 方法，將要使用的resource 之 ID 傳給它。

將使用項目中的所有內容，包括空白區 (索引標籤、新行等)。

範例

下列程式碼定義一個資源 (errNonNumeric)，而且在變數 upperBound 不是數值的情況下傳回其值。

<resource id="errNonNumeric">
   Non-numeric value passed
</resource>

<script language="VBScript">
   <![CDATA[
      Function getRandomNumber(upperBound)
         If IsNumeric(upperBound) Then
            getRandomNumber = CInt(upperBound * Rnd + 1)
         Else
            getRandomNumber=getResource("errNonNumeric")
         End If
      End Function
   ]]>
</script>

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <object> 項目 | <package> 項目 | getResource 方法


<runtime> 項目

將一個指令碼的執行階段引數集分組。

<runtime>
    <named attributes etc. />
    <unnamed attributes etc. />
    <example>Example Text</example>
    ?
</runtime>

附註

此 ShowUsage 方法使用 <runtime> 項目所含括的資訊，以顯示一個指令碼的執行階段參數。

由於 <runtime> 項目含括於一組 job 標籤內，所以定義的 Run-Time 引數只適用該工作。

備註 藉由版本 5.6，<runtime> 項目所含括的工作只適用於自我記錄，及格式化 ShowUsage 所顯示的資料。<runtime> 項目不會強制執行它包含的引數之值集 (即，當命令列缺少 "required' 引數時不會引發錯誤)。若 <runtime> 項目併入 .wsf 檔案中，則以 "/?" 引數來執行指令碼將顯示用法並結束。

範例

下列指令碼示範 <runtime> 項目的用法：

<job>
    <runtime>
        <named
            name="server"
            helpstring="The server to run the script on"
            type="string"
            required="true"
        />
    </runtime>
<script language="JScript">
  if (!WScript.Arguments.Named.Exists("server"))
  {
    WScript.Arguments.ShowUsage();
  }
// ... 某些指令碼在此處
</script>
</job>

請參閱

ShowUsage 方法 | <named> 項目 | <unnamed> 項目 | <description> 項目 | <example> 項目


<script> 項目 (Windows Script Host)

Windows Script Host

<script> 項目

包含用來定義 Windows Script (.wsf) 檔案行為的指令碼。

<script language="language" [src="strFile"]>
     script here
</script>

引數

language
使用於指令碼區塊的指令碼語言的名稱，如 VBScript 或 Jscript。
strFile
併入指令碼區塊的指令碼檔案的名稱。

附註

若未啟用 XML 驗證，則 XML 剖析器會略過 <script> 項目內部的所有行。然而，若 XML 驗證藉由併入 Windows Script (.wsf) 檔案頂端的 <?XML?> 項目來啟用，則 XML 剖析器可能將大於 (>)、小於 (<) 和其他使用於指令碼的符號錯誤解譯為 XML 分隔符號。

若您正在建立極為符合 XML 語法的檔案，則必須確定未將 script 項目的字元視為 XML 保留的字元。若要這麼作，請將實際的指令碼含括於 <![CDATA[ ... ]]> 區段中。這適用於所有資料區塊 - <example>、<description> 和 <resource>。若指定了 <?XML?>，且若它們包括 XML 保留字元，則它們可能都需要 CDATA 標記。

附註 請勿包括 CDATA 區段，除非它們也包括 <?XML?> 宣告。

範例

下列範例使用兩種不同的指令碼語言，將兩個工作納入一個 .wsf 檔案：

<package>
   <job id="DoneInVBS">
   <?job debug="true"?>
      <script language="VBScript">
         WScript.Echo "This is VBScript"
      </script>
   </job>

   <job id="DoneInJS">
   <?job debug="true"?>
      <script language="JScript">
         WScript.Echo("This is JScript");
      </script>
   </job>
</package>

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <object> 項目 | <package> 項目 | <resource> 項目 | <?XML?> 項目


<unnamed> 項目

說明指令碼的未具名引數。

<unnamed
   name       = unnamedname
   helpstring = helpstring
   many       = boolean
   required   = boolean or integer
/>

引數

name
在用法中使用來代表引數的字串。此值無法使用於各處。
helpstring
代表引數的說明描述之字串。WSH 執行階段使用 ShowUsage 方法或 /? 引數來提供輔助說明。
many
選擇項。布林值。若為 true，則此引數重覆的次數可能比 required 屬性指定的還多。或者，此必要屬性代表required 引數之實際數量。詳細資訊請參閱以下的範例。
required
選擇項。為整數值，其指出此引數在命令列必須出現的次數。

附註

<unnamed> 項目由一組 runtime 標籤所包含 (包在括號之中)。

含名稱 server 的一個引數將在命令列提供一個 /server 引數，及在 WSHNamed 引數集合中提供一個 server 引數。

附註 此 unnamed 項目的 name 屬性只是用作顯示之用。

設定 "required" 屬性時，布林值將轉換成整數；"true" 變成 1 而 "false" 變成 0。

範例

這裡有一組範例，其顯示不同的屬性如何使用 unnamed 項目來影響用法。首先是一個簡單的範例：

<runtime>
<unnamed
  name="filename"
  helpstring="The file to process"
  many="false"
  required="true"
</>
</runtime>

這將產生下列內容：

用法: example.wsf filename

選項：

filename ： 要處理的檔案

將它變更為：

<runtime>
<unnamed
  name="filename"
  helpstring="The files to process"
  many="false"
  required="3"
</ >
</runtime>

則輸出將變更為：

用法： example.wsf filename1 filename2 filename3

選項：

filename ： 要處理的檔案

many 參數將顯示橢圓以指出您可輸入比指定的還多的檔案。若範例變更為：

<runtime>
<unnamed
  name="filename"
  helpstring="The file(s) to process"
  many="true"
  required="1"
</>
</runtime>

則輸出變更為：

用法： example.wsf filename1 [filename2...]

選項：

filename： 要處理的檔案。

請參閱

ShowUsage 方法 | <runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目


<usage> 項目

允許使用者覆寫預設的用法顯示。

<usage>
    此區段描述指令碼
</usage>

附註

此 <usage> 項目類似 <example> 和 <description> 項目 — 它包含開發者可併入用法的文字。其間的差異是當存在 <usage> 項目時，將忽略 <runtime> 項目的所有內容，而且只會顯示 <usage> 項目中的文字。這就是為什麼您可以完全覆寫用法顯示的原因。

備註 <usage> 項目必須一律以 <runtime> 項目括住。

範例

下列指令碼示範 <usage> 項目的用法：

<job>
<runtime>
<named name="arg1" helpstring="the first arg"/>
<usage>
Your usage text goes here.
</usage>
</runtime>
<script language="vbscript">
WScript.Arguments.ShowUsage
</script>
</job>

這會產生下列內容：

Your usage text goes here.

請參閱

<runtime> 項目 | <named> 項目 | <description> 項目 | <example> 項目 | <package> 項目 | <resource> 項目 | <?XML?> 項目


物件

本節內容

WScript 物件
提供對 WSH 物件模型大部份物件、方法和屬性的存取。
WshArguments 物件
提供您存取命令列參數的整個集合 — 以它們輸入的原始順序。
WshController 物件
顯示用來建立遠端指令碼處理序的方法 CreateScript()。
WshEnvironment 物件
提供您對 Microsoft Windows 系統環境變數的集合之存取。
WshNamed 物件
提供您存取 WshArguments 物件命名的命令列指令碼引數。
WshNetwork 物件
提供您存取電腦所連接的網路之共用資源。
WshRemote 物件
提供您存取遠端指令碼處理序。
WshRemoteError 物件
顯示當遠端指令碼 (WshRemote 物件) 因指令碼錯誤而結束時，可用的錯誤資訊。
WshScriptExec 物件
提供以 Exec 執行的指令碼的狀態和錯誤相關資訊，以及存取 stdIn、stdOut 和 stdErr 通道的狀態和錯誤相關資訊。
WshShell 物件
提供您存取原生 Windows shell 功能。
WshShortcut 物件
可讓您以程式方式建立捷徑。
WshSpecialFolders 物件
可讓您存取 Windows 特殊資料夾。
WshUnnamed 物件
提供您存取 WshArguments 物件內未具名的命令列指令碼引數。
WshUrlShortcut 物件
可讓您以程式方式建立 Internet 資源的捷徑。

相關章節

WSH 參考
組成 WSH 參考的項目清單。
WSH 基本概念
學習 WSH 的基本知識。


Scripting.Signer 物件

Scripting.Signer 物件可讓作者以數位簽名簽署指令碼，及讓接收者驗證簽名的驗證性和可性度。

附註

Scripting.Signer 物件需要有效的認證。

範例

下列 JScript 程式碼顯示 Scripting.Signer 物件數位簽署指令碼。

<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="JScript">
   var Signer, File, Cert, Store = "my";
   if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file")))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit();
   }
   Signer = new ActiveXObject("Scripting.Signer");
   File  = WScript.Arguments.Named("file");
   Cert  = WScript.Arguments.Named("cert");
   if (WScript.Arguments.Named.Exists("store"))
   {
      Store = WScript.Arguments.Named("store");
   }

    Signer.SignFile(File, Cert, Store);
</script>
</job>

請參閱

簽署 Script | Sign 方法 | SignFile 方法 | Verify 方法 | VerifyFile 方法


Scripting.Signer 物件方法

方法

Sign 方法

SignFile 方法

Verify 方法

VerifyFile 方法


WshArguments 物件

Windows Script Host

WScript 物件

提供存取 Windows Script Host 物件模型的根物件。

附註

WScript 物件是 Windows Script Host 物件模型階層的根物件。在叫用其屬性和方法之前，它絕不需執行個體化，而且它一律可從任何指令碼檔取得。WScript 物件提供存取的資訊如：

  • 命令列引數、
  • 指令碼檔名、
  • 主機檔名
  • 及主機版本資訊。

WScript 物件可讓您：

  • 建立物件、
  • 連接到物件、
  • 中斷連接物件、
  • 同步化事件、
  • 以程式方式停止指令碼的執行、
  • 將資訊輸出至預設的輸出裝置 (可能是 Windows 對話方塊或命令主控台)。

WScript 物件可用來設定指令碼執行的模式 (互動或批次)。

範例

由於 WScript 物件為 Windows Script Host 物件模型的根物件，所以有許多屬性和方法都適用此物件。若需特殊語法的範例，請參閱屬性和方法的連結。

屬性

Arguments 屬性 | FullName 屬性 (WScript 物件) | Interactive 屬性 | Name 屬性 | Path 屬性 | ScriptFullName 屬性 | ScriptName 屬性 | StdErr 屬性 | StdIn 屬性 | StdOut 屬性 | Version 屬性

方法

CreateObject 方法 | ConnectObject 方法 | DisconnectObject 方法 | Echo 方法 | GetObject 方法 | Quit 方法 | Sleep 方法

請參閱

執行您的 Script | WshShell 物件 | WshNetwork 物件


WScript 物件屬性和方法

屬性

Arguments 屬性

FullName 屬性

Name 屬性

Path 屬性

ScriptFullName 屬性

ScriptName 屬性

StdErr 屬性

StdIn 屬性

StdOut 屬性

Version 屬性

方法

CreateObject 方法

ConnectObject 方法

DisconnectObject 方法

Echo 方法

GetObject 方法

Quit 方法

Sleep 方法


WshEnvironment 物件

Windows Script Host

WshArguments 物件

Arguments PropertyWScript Object

提供對命令列參數整個集合的存取 — 以它們輸入的原始順序。

附註

WshArguments 物件是 WScript 物件的 Arguments 屬性所傳回的集合 (WScript.Arguments)。WshArguments 物件的其中兩個屬性是引數的篩選集合 — 一個包含命名的引數 (查詢此屬性傳回 WshNamed 物件)，另一個包含未命名的引數 (查詢此屬性傳回 WshUnnamed 物件)。有三種方法可存取命令列引數集。

  • 您可以利用 WshArguments 物件來存取整個引數集 (含或不含名稱)。
  • 您可以利用 WshNamed 物件來存取含名稱的引數集。
  • 您可以利用 WshUnnamed 物件來存取不含名稱的引數集。

範例

下列程式碼顯示 WshArguments 物件中的命令列參數。

[VBScript]
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next
[JScript]
objArgs = WScript.Arguments;
for (i = 0; i < objArgs.length; i++)
{
   WScript.Echo(objArgs(i));
}

屬性

Item 屬性 | Length 屬性 (WshArguments 物件) | Count 屬性 | Named 屬性 | Unnamed 屬性

方法

Count 方法 | ShowUsage 方法

請參閱

Arguments 屬性 | WshNamed 物件 | WshUnnamed 物件


WshArguments 物件屬性和方法

屬性

Item 屬性

Length 屬性

方法

Count 方法


WshController 物件

'WScript Object

提供對 CreateScript() 方法的存取 (用來建立遠端指令碼處理序)。

範例

下列範例使用控制程式物件以建立 WshRemote 物件。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("remote1.js")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

方法

CreateScript 方法

請參閱

CreateObject 方法


WshController 物件方法

方法

CreateScript 方法


WshEnvironment Object

Windows Script Host

WshEnvironment 物件

Environment PropertyWshShell Object

提供存取 Windows 環境變數的集合。

附註

WshEnvironment 物件是 WshShell 物件的 Environment 屬性所傳回的環境變數集合。此集合包含整個環境變數集 (含或不含名稱)。若要從此集合擷取個別的環境變數 (及其值)，請將環境變數名稱用作索引。

範例

下列程式碼顯示一個環境變數。

[VBScript]
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("SYSTEM");
WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS"));

屬性

Item 屬性 | Length 屬性 (WshEnvironment 物件)

方法

Count 方法 | Remove 方法

請參閱

Environment 屬性


WshEnvironment 物件屬性和方法

屬性

Item 屬性

Length 屬性

方法

Count 方法

Remove 方法


WshNamed 物件

Named PropertyWshArguments Object

從命令行提供存取命名的引數。

附註

WshArguments 物件的 Named 屬性傳回 WshNamed 物件，它是已命名的引數之集合。此集合將引數名稱用作索引以擷取個別的引數值。有三個方法可存取命令列引數集。

  • 您可以利用 WshArguments 物件來存取整個引數集 (含或不含名稱)。
  • 您可以利用 WshNamed 物件來存取含名稱的引數集。
  • 您可以利用 WshUnnamed 物件來存取不含名稱的引數集。

範例

下列程式碼會顯示命名和非命名指令行引數的數目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

屬性

Item 屬性 | Length 屬性

方法

Count 方法 | Exists 方法

請參閱

WshArguments 物件 | WshUnnamed 物件


WshNamed 物件屬性和方法

屬性

Item 屬性

Length 屬性

方法

Count 方法

Exists 方法


WshNetwork 物件

WScript Object

提供存取您電腦連接的網路之共用資源。

附註

當您要連接網路共用和網路印表機、中斷連接網路共用和網路印表機、對映或移除網路共用，或存取網路上使用者的相關資訊，您會建立 WshNetwork 物件。

範例

下列範例示範使用 WshNetwork 物件在目前的電腦中顯示網域名稱、電腦名稱和使用者名稱。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
         WScript.Echo
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         WScript.Echo();
         WScript.Echo("Network drive mappings:");
         for(i=0; i<oDrives.Count(); i+=2){
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i+1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i=0; i<oPrinters.Count(); i+=2){
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i+1));
         }
      </script>
   </job>
</package>

屬性

ComputerName 屬性 | UserDomain 屬性 | UserName 屬性

方法

AddWindowsPrinterConnection 方法 | AddPrinterConnection 方法 | EnumNetworkDrives 方法 | EnumPrinterConnection 方法 | MapNetworkDrive 方法 | RemoveNetworkDrive 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法

請參閱

執行您的 Script | WScript 物件


WshNetwork 物件屬性和方法

屬性

ComputerName 屬性

UserDomain 屬性

UserName 屬性

方法

AddPrinterConnection 方法

EnumNetworkDrives 方法

EnumPrinterConnection 方法

MapNetworkDrive 方法

RemoveNetworkDrive 方法

RemovePrinterConnection 方法

SetDefaultPrinter 方法


WshRemote 物件

WshController Object

提供對遠端指令碼處理序的存取。

附註

WshRemote 物件可讓您遠端管理電腦網路上的電腦系統。它代表 WSH 指令碼的執行個體，即含有下列一個副檔名的指令碼檔： .wsh、 .wsf、 .js、 .vbs、 .jse、 .vbe 等等。正在執行的指令碼的執行個體是處理序。您可以在本端機器或在遠端機器上執行處理序。如果您未提供網路路徑，它將在本端執行。當 WSHRemote 物件建立後 (藉由使用 CreateScript() 方法)，指令碼會複製到目標電腦系統。複製後，指令碼不會立即開始執行；它會在叫用 WSHRemote 方法 Execute 時才開始執行。透過 WshRemote 物件介面，您的指令碼可以操作其他程式或指令碼。此外，外部的應用程式也可以操作遠端指令碼。WshRemote 物件可透過 DCOM 來非同步的操作。

範例

下列範例示範如何使用 WshRemote 物件來啟動遠端指令碼。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

屬性

Status 屬性 | Error 屬性

方法

Execute 方法 | Terminate 方法

事件

Start 事件 | End 事件 | Error 事件

請參閱

WshController 物件


WshRemote 物件屬性、方法和事件

屬性

Status 屬性

Error 屬性

方法

Execute 方法

Terminate 方法

事件

Start 事件

End 事件

Error 事件


WshRemoteError 物件

Error PropertyWshRemote Object

提供當遠端指令碼 (WshRemote 物件) 因指令碼錯誤而結束時，存取可用的錯誤資訊。

附註

WshRemoteError 物件是由 WshRemote 物件的 Error 屬性所傳回。

範例

下列範例示範如何使用 WshRemoteError 物件來顯示指令碼中的錯誤發生位置和錯誤的說明。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

WScript.DisconnectObject(RemoteScript);

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

屬性

Description 屬性 | Line 屬性 | Character 屬性 | SourceText 屬性 | Source 屬性 | Number 屬性

請參閱

WshRemote 物件


WshRemoteError 物件屬性

屬性

Description 屬性

Line 屬性

Character 屬性

SourceText 屬性

Source 屬性

Number 屬性


WshScriptExec Object

Windows Script Host

WshScriptExec 物件

Exec MethodWshShell Object

提供以 Exec 執行的指令碼的狀態資訊，以及對 StdIn、StdOut 和 StdErr 資料流的存取等狀態資訊。

附註

WshScriptExec 物件是由 WshShell 物件的 Exec 方法所傳回的。一旦指令碼或程式執行完畢，或指令碼或程式開始執行之前，Exec 方法將傳回 WshScriptExec 物件。

範例

下列程式碼會執行 calc.exe 並回應最後狀態至畫面。

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("calc")

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}

WScript.Echo(oExec.Status);

屬性

Status 屬性 | StdOut 屬性 | StdIn 屬性 | StdErr 屬性

方法

Terminate 方法

請參閱

WScript 物件 | Exec 方法


WshScriptExec 物件屬性和方法

屬性

ExitCode 屬性

ProcessID 屬性

Status 屬性

StdOut 屬性

StdIn 屬性

StdErr 屬性

方法

Terminate 方法


WshShell 物件

WScript Object

提供存取原生的 Windows shell。

附註

每當您要在本機上執行程式、操作登錄的內容、建立捷徑，或存取系統資料夾時，您會建立 WshShell 物件。WshShell 物件提供 Environment 集合。此集合可讓您處理環境變數 (如 WINDIR、PATH 或 PROMPT)。

範例

下列範例示範建立執行中指令碼的捷徑，及 www.microsoft.com 的 URL 捷徑：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

屬性

CurrentDirectory 屬性 | Environment 屬性 | SpecialFolders 屬性

方法

AppActivate 方法 | CreateShortcut 方法 | ExpandEnvironmentStrings 方法 | LogEvent 方法 | Popup 方法 | RegDelete 方法 | RegRead 方法 | RegWrite 方法 | Run 方法 | SendKeys 方法 | Exec 方法

請參閱

執行您的 Script


WshShellObject 屬性和方法

屬性

CurrentDirectory 屬性

Environment 屬性

SpecialFolders 屬性

方法

AppActivate 方法

CreateShortcut 方法

ExpandEnvironmentStrings 方法

LogEvent 方法

Popup 方法

RegDelete 方法

RegRead 方法

RegWrite 方法

Run 方法

SendKeys 方法


WshShortcut 物件

WshShell Object

可讓您以程式方式建立捷徑。

範例

下列範例示範建立執行中指令碼的捷徑：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

屬性

Arguments 屬性 | Description 屬性 | FullName 屬性 (WshShortcut 物件) | Hotkey 屬性 | IconLocation 屬性 | TargetPath 屬性 | WindowStyle 屬性 | WorkingDirectory 屬性

方法

Save 方法

請參閱

執行您的 Script | CreateShortcut 方法


WshShortcut 物件屬性和方法

屬性

Arguments 屬性

Description 屬性

FullName 屬性

Hotkey 屬性

IconLocation 屬性

TargetPath 屬性

WindowStyle 屬性

WorkingDirectory 屬性

方法

Save 方法


WshSpecialFolders 物件

SpecialFolders PropertyWshShell Object

提供存取 Windows 特殊資料夾的集合。

附註

WshShell 物件的 SpecialFolders 屬性傳回 WshSpecialFolders 物件，其為特殊資料夾的集合。此集合包含對 Windows 特殊資料夾的參照 (例如，Desktop 資料夾、Start Menu 資料夾和 Personal Documents 資料夾)。此集合會使用作為索引的特殊資料夾的名稱來擷取特殊資料夾的路徑。特殊資料夾的路徑依使用者環境而定。特殊資料夾中儲存的資訊對登入電腦系統的使用者是唯一的。如果相同的電腦系統上擁有多個不同的使用者之帳戶，則硬碟上會儲存多個不同的特殊資料夾組。

下列是可用的特殊資料夾：

  • AllUsersDesktop
  • AllUsersStartMenu
  • AllUsersPrograms
  • AllUsersStartup
  • Desktop
  • Favorites
  • Fonts
  • MyDocuments
  • NetHood
  • PrintHood
  • Programs
  • Recent
  • SendTo
  • StartMenu
  • Startup
  • Templates

範例

下列指令碼示範 WshSpecialFolders 物件的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

屬性

Item 屬性

方法

Count 方法

請參閱

執行您的 Script | SpecialFolders 屬性


WshSpecialFolders 物件屬性和方法

屬性

Item 屬性

Length 屬性

方法

Count 方法


WshUnnamed 物件

Unnamed PropertyWshArguments Object

從命令列提供對未具名引數的存取。

附註

WshUnnamed 物件為 WshArguments 物件的 Unnamed 屬性所傳回的唯讀集合。個別引數值是使用從零開始的索引從此集合所擷取出來的。WshArguments 物件的其中兩個屬性是篩選的引數集合 — 一個包含命名的引數 (WshNamed 物件)，另一個包含未命名的引數 (WshUnnamed 物件)。它們總共可讓您使用三種方法來存取命令列引數集。

  • 您可以利用 WshArguments 物件來存取整個引數集 (含或不含名稱)。
  • 您可以利用 WshNamed 物件來存取含名稱的引數集。
  • 您可以利用 WshUnnamed 物件來存取不含名稱的引數集。

範例

下列程式碼會顯示已具名和非已具名指令行引數的數目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

屬性

Item 屬性 | Length 屬性 (WshArguments 物件)

方法

Count 方法

請參閱

WshArguments 物件 | WshNamed 物件


WshUnnamed 物件屬性和方法

屬性

Item 屬性

Length 屬性

方法

Count 方法


WshUrlShortcut 物件

WshShell Object

可讓您以程式方式建立 Internet 資源的捷徑。

附註

WshUrlShortcut 物件是 WshShell 物件的子物件 — 您必須使用 WshShell 方法 CreateShortcut 以建立 WshUrlShortcut 物件 (例如，WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk"))。

範例

下列範例示範建立至 www.microsoft.com 的 URL 捷徑。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

屬性

FullName 屬性 (WshUrlShortcut 物件) | TargetPath 屬性

方法

Save 方法

請參閱

執行您的 Script | CreateShortcut 方法


WshUrlShortcut 物件屬性和方法

屬性

FullName 屬性

TargetPath 屬性

方法

Save 方法


屬性

本節內容

Arguments 屬性
傳回 WshArguments 物件。
AtEndOfLine 屬性
傳回布林值，指出是否已到達輸入行的尾端。
AtEndOfStream 屬性
傳回布林值，指出是否已到達輸入資料流的尾端。
Character 屬性
報告包含錯誤的程式碼行中的特殊字元。
Column 屬性
傳回輸入資料流中的目前字元位置的欄編號。
ComputerName 屬性
傳回電腦的名稱。
CurrentDirectory 屬性
可讓您設定或擷取作用中指令碼的目前工作資料夾。
Description 屬性
傳回捷徑的描述。
Environment 屬性
傳回 WshEnvironment 物件。
Error 屬性 (WshRemote)
顯示 WshRemoteError 物件。
ExitCode 屬性
傳回使用 Exec() 方法執行的指令碼/程式所設定的結束代碼。
FullName 屬性
傳回完整的路徑名稱。
Hotkey 屬性
可讓您指派捷徑的鍵盤組合，及決定捷徑的鍵盤組合。
IconLocation 屬性
可讓您指派捷徑的圖示，及決定哪個圖示已指派給捷徑。
Interactive 屬性
可讓您以程式方式設定指令碼模式，及以程式方式決定指令碼模式。
Item 屬性
顯示集合的指定項目。
Item 屬性 (WshNamed)
提供您存取 WshNamed 物件中的項目。
Item 屬性 (WshUnnamed)
使用索引 (從 0 開始) 傳回項目。
Length 屬性
傳回集合中的項目數。
Line 屬性 (WScript)
傳回輸入資料流的目前行號。
Line 屬性 (WshRemote)
識別包含導致錯誤的陳述式指令碼中的行。
Name 屬性
傳回 WScript 物件的易記名稱 (主機可執行檔)。
Number 屬性
報告代表指令碼錯誤的錯誤編號。
Path PropertyPath
傳回包含 WScript 物件的目錄名稱 (主機可執行檔)。
ProcessID 屬性
報告以 WshScriptExec 物件開始的處理序的處理序識別碼 (PID)。
ScriptFullName 屬性
傳回目前執行中指令碼的完整路徑名稱。
ScriptName 屬性
傳回目前執行中指令碼的檔名。
Source 屬性
識別引發指令碼錯誤的 COM 物件。
SourceText 屬性
包含引發錯誤的來源程式碼行。
SpecialFolders 屬性
傳回 WshSpecialFolders 物件。
Status 屬性 (WshRemote)
報告遠端指令碼的目前執行狀況。
Status 屬性 (WshScriptExec)
提供以 Exec() 方法執行的指令碼的相關狀態資訊。
StdErr 屬性 (WScript)
顯示目前指令碼的唯寫錯誤輸出資料流。
StdErr 屬性 (WshScriptExec)
顯示 Exec 物件的唯讀 stderr 輸出資料流。
StdIn 屬性 (WScript)
顯示目前指令碼的唯讀輸入資料流。
StdIn 屬性 (WshScriptExec)
顯示 Exec 物件的唯寫 stdin 輸入資料流。
StdOut 屬性 (WScript)
顯示目前指令碼的唯寫輸出資料流。
StdOut 屬性 (WshScriptExec)
顯示 Exec 物件的唯寫 stdout 輸出資料流。
TargetPath 屬性
可讓您對捷徑指向的可執行檔指派路徑，以及決定捷徑指向的可執行檔的路徑。
UserDomain 屬性
傳回使用者的網域名稱。
UserName 屬性
傳回使用者的名稱。
Version 屬性
傳回 WSH 的版本。
WindowStyle 屬性
可讓您指派捷徑的視窗樣式，以及決定捷徑所使用的視窗樣式型別。
WorkingDirectory 屬性
可讓您指派捷徑的工作目錄，以及決定捷徑所使用的工作目錄。

相關章節

WSH 語言
組成 WSH 參考的項目清單。
WSH 基本概念
學習 WSH 的基本知識。


Arguments 屬性 (Shortcut 物件)

設定捷徑的引數，或識別捷徑的引數。

object.Arguments

引數

object
WshShortcut 物件。

附註

Arguments 屬性傳回字串。

範例

下列程式碼設定 Arguments 屬性。

[VBScript]
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
oShellLink.TargetPath = WScript.ScriptFullName
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "Ctrl+Alt+f"
oShellLink.IconLocation = "notepad.exe, 0"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Arguments = "C:\myFile.txt"
oShellLink.Save
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var strDesktop = WshShell.SpecialFolders("Desktop");
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
oShellLink.TargetPath = WScript.ScriptFullName;
oShellLink.WindowStyle= 1;
oShellLink.Hotkey= "Ctrl+Alt+f";
oShellLink.IconLocation= "notepad.exe, 0";
oShellLink.Description= "Shortcut Script";
oShellLink.WorkingDirectory= strDesktop;
oShellLink.Arguments = "C:\\myFile.txt"; oShellLink.Save();

請參閱

WshShortcut 物件 | WshShell 物件 | CreateShortcut 方法


Arguments 屬性 (WScript Object)

Windows Script Host

Arguments 屬性 (WScript 物件)

傳回 WshArguments 物件 (引數的集合)。

object.Arguments

引數

object
WScript 物件。

附註

Arguments 屬性包含 WshArguments 物件 (引數的集合)。使用從 0 開始的索引可從此集合擷取個別引數。

範例

下列程式碼範例顯示與某個指令碼相關的整個命令列參數集。

[VBScript]
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next
[JScript]
objArgs = WScript.Arguments;
for (i = 0; i < objArgs.length; i++)
{
   WScript.Echo(objArgs(i));
}

請參閱

WScript 物件 | WshArguments 物件 | WshNamed 物件 | WshUnnamed 物件


AtEndOfLine 屬性 (Windows Script Host)

Windows Script Host

AtEndOfLine 屬性

傳回布林值，指出是否已到達輸入資料流中的行尾端。

object.AtEndOfLine

引數

object
StdIn 文字資料流物件。

附註

AtEndOfLine 屬性包含布林值，其指出是否已到達輸入資料流中的行尾端。如果資料流指標的前頭緊跟著輸入資料流的行尾標記，則 AtEndOfLine 屬性傳回 True，否則傳回 False。StdIn、StdOut 及 StdErr 屬性和方法只有在指令碼以 CScript.exe 執行時才會運作。若指令碼以 WScript.exe 執行，將產生錯誤。

範例

下列範例將會從鍵盤讀取一文字行，並顯示當看到行尾時所鍵入的內容。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfLine
   Input = Input & WScript.StdIn.Read(1)
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfLine)
{
   input += WScript.StdIn.Read(1);
}
WScript.Echo(input);

請參閱

StdIn 屬性 | 錯誤訊息


AtEndOfStream 屬性 (Windows Script Host)

Windows Script Host

AtEndOfStream 屬性

傳回布林值，其指出是否已到達輸入資料流的尾端。

object.AtEndOfStream

引數

object
StdIn 文字資料流物件。

附註

AtEndOfStream 屬性包含布林值，指出是否已到達輸入資料流中的行尾端。如果資料流指標在輸入資料流的尾端，則 AtEndOfStream 屬性傳回 True，否則傳回 False。StdIn、StdOut 及 StdErr 屬性和方法只有在指令碼以 CScript.exe 執行時才會運作。若指令碼以 WScript.exe 執行，將產生錯誤。

範例

下列的程式碼示範 AtEndOfStream 屬性。方法是藉由從 "dir" 讀取標準目錄清單、除去實際上不為輸入項的頂端和底部，然後將目錄輸入項的空間加大一倍。

[VBScript]
Dim StdIn, StdOut, Str1, Str2

Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Str1 = ""
Str2 = ""For i = 0 to 4
   StdIn.SkipLine
Next

i = 0
Do While Not StdIn.AtEndOfStream
     If i >= 2 Then
          StdOut.WriteLine Str1
     End If
     i = i + 1
     Str1 = Str2
     Str2 = StdIn.ReadLine
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;
var str1, str2 = "";
var i;
for (i = 0; i < 5; i++)
     stdin.SkipLine();
i = 0;
while (!stdin.AtEndOfStream)
{
     if (i++ >= 2)
     {
          stdout.WriteLine(str1);
     }
     str1 = str2;
     str2 = stdin.ReadLine();
}

請參閱

StdIn 屬性 | 錯誤訊息


BuildVersion 屬性

傳回 Windows Script Host 建置版本編號。

Object.BuildVersion

參數

Object
WScript 物件。

附註

BuildVersion 屬性傳回整數值。

Windows Script Host 的完整版本編號由產品版次版本編號，及隨後接著的建置版本編號所組成。例如，如果 Windows Script Host 產品版次版本編號為 5.6，而建置版本編號為 6626，則完整的版本編號為 5.6.6626。

範例

下列程式碼傳回 Windows Script Host 的完整版本編號。此完整版本編號由產品版次版本編號，及建置版本編號所組成。

WScript.Echo WScript.Version & "." & WScript.BuildVersion;

請參閱

Version 屬性


Character 屬性

報告包含錯誤的程式碼行中的特定字元。

Object.Character

引數

Object
WshRemoteError 物件。

附註

Character 屬性傳回帶正負號的 long 整數。

部份錯誤無關於特定的字元位置。例如，請參考錯誤 Expected End If。在此案例中，並不存在行 (缺少一行程式碼)。在這類案例中，Character 屬性傳回零 (0)。

字元位置是依據一 (1) 的偏移 (常駐於位置一的某行之第一個字元)。

範例

下列程式碼示範 WshRemoteError 物件如何顯示包含錯誤的程式碼行中的字元。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

請參閱

WshRemote 物件 | WshRemoteError 物件 | Line 屬性| Description 屬性 | SourceText 屬性 | Number 屬性 | Source 屬性


Column 屬性 (Windows Script Host)

Windows Script Host

Column 屬性

傳回輸入資料流中目前字元位置的欄號。

object.Column

引數

object
StdIn 文字資料流物件。

附註

Column 屬性包含唯讀整數值，指出輸入資料流中目前字元位置的欄號。寫入換行字元之後 (即使在寫入其他任何字元之前)，Column 屬性等於 1。只有當指令碼以 CScript.exe 執行時，StdIn、StdOut 和 StdErr 屬性和方法才會運作。如果指令碼以 WScript.exe 執行，將發生錯誤。

範例

下列程式碼示範 Column 屬性的用法，方法是從鍵盤讀取輸入並將它分成 20 個字元的數行。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfLine
   Input = Input & WScript.StdIn.Read(1)
   If (WScript.StdIn.Column - 1) Mod 20 = 0 Then
      Input = Input & vbCrLf
   End If
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfLine)
{
   input += WScript.StdIn.Read(1);
   if ((WScript.StdIn.Column - 1) % 20 == 0)
   input += "\n";
}
WScript.Echo(input);

請參閱

StdIn 屬性 | 錯誤訊息


ComputerName 屬性

傳回電腦系統的名稱。

object.ComputerName

引數

object
WshNetwork 物件。

附註

ComputerName 屬性包含字串值，其值指出電腦系統的名稱。

範例

下列範例示範 ComputerName 屬性的用法。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         }
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshNetwork 物件


CurrentDirectory 屬性

擷取或變更目前作用中的目錄。

object.CurrentDirectory

引數

object
WshShell 物件。

附註

CurrentDirectory 會傳回字串，此字串包含作用中處理序目前工作目錄的完整路徑。

範例

下列程式碼顯示目前作用中目錄。

[VBScript]
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.CurrentDirectory
[JScript]
var WshShell = WScript.CreateObject ("WScript.Shell");
WScript.Echo (WshShell.CurrentDirectory);

請參閱

WshShell 物件


Description 屬性 (Windows Script Host)

Windows Script Host

Description 屬性

傳回捷徑的描述。

object.Description

引數

object
WshShortcut 物件。

附註

Description 屬性包含用來描述捷徑的字串值。

範例

下列範例示範 Description 屬性的用法。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShortcut 物件


Description 屬性 (WshRemoteError)

包含造成遠端指令碼結束的錯誤之簡短描述。

Object.Description

引數

Object
WshRemoteError 物件。

附註

Description 屬性傳回字串。

如果無可用的錯誤描述，則 Description 屬性會傳回空字串。

範例

下列程式碼示範 WshRemoteError 物件如何顯示錯誤的描述。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

請參閱

WshRemote 物件 | WshRemoteError 物件 | Line 屬性 | Character 屬性 | SourceText 屬性 | Number 屬性 | Source 屬性


Environment 屬性

傳回 WshEnvironment 物件 (環境變數的集合)。

object.Environment ([strType])

引數

object
WshShell 物件。
strType
選擇項。指定環境變數的位置。

附註

Environment 屬性包含 WshEnvironment 物件 (環境變數的集合)。如果提供了 strType，它會指定可能值 System、User、Volatile 或 Process 與環境變數常駐的位置。如果未提供 strType，則 Environment 屬性會依作業系統傳回不同的環境變數型別。

環境變數型別 | 作業系統
系統 | Microsoft Windows NT/2000
處理序 | Windows 95/98/Me
附註 若為 Windows 95/98/Me，則只允許一個 strType — Process。

下表列出 Windows 作業系統所提供的部份變數。指令碼可存取其他應用程式已設定的環境變數。

附註 下列變數都無法從 Volatile 型別取得。
名稱 | 描述 | 系統 | 使用者 | 處理序 (NT/ 2000) | 處理序 (98/ME)
NUMBER_OF_PROCESSORS | 機器上執行的處理器數量。 | X | - | X | -
PROCESSOR_ARCHITECTURE | 使用者工作站的處理器型別。 | X | - | X | -
PROCESSOR_IDENTIFIER | 使用者工作站的處理器 ID。 | X | - | X | -
PROCESSOR_LEVEL | 使用者工作站的處理器等級。 | X | - | X | -
PROCESSOR_REVISION | 使用者工作站的處理器版本。 | X | - | X | -
OS | 使用者工作站上的作業系統。 | X | - | X | -
COMSPEC | 命令提示的可執行檔 (通常為 cmd.exe)。 | X | - | X | X
HOMEDRIVE | 主本機磁碟機 (通常為 C 磁碟機)。 | - | - | X | -
HOMEPATH | 使用者的預設目錄 (通常為 Windows 2000 中的 \users\default)。 | - | - | X | -
PATH | PATH 環境變數。 | X | X | X | X
PATHEXT | 可執行檔的副檔名 (通常為 .com、 .exe、 .bat 或 .cmd)。 | X | - | X | -
PROMPT | 命令提示 (通常為 $P$G)。 | - | - | X | X
SYSTEMDRIVE | 系統目錄所在的本機磁碟機 (通常為 c:\)。 | - | - | X | -
SYSTEMROOT | 系統目錄 (例如，c:\winnt)。這相同於 WINDIR。 | - | - | X | -
WINDIR | 系統目錄 (例如， c:\winnt)。這相同於 SYSTEMROOT。 | X | - | X | X
TEMP | 用來儲存暫時檔的目錄 (例如，c:\temp)。 | - | X | X | X
TMP | 用來儲存暫時檔的目錄 (例如，c:\temp)。 | - | X | X | X

範例

下列程式碼擷取系統環境變數 NUMBER_OF_PROCESSORS。

[VBScript]
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("SYSTEM");
WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS"));

請參閱

WshEnvironment 物件 | WshShell 物件


Error 屬性 (WshRemote)

顯示 WshRemoteError 物件，此物件保留引發遠端指令碼提早結束的錯誤相關資訊。

Object.Error

引數

Object
WshRemote 物件。

附註

Error 屬性傳回 WshRemoteError 物件。

範例

下列程式碼示範 WshRemote 物件的 Error 屬性如何顯示 WshRemoteError 物件，其顯示錯誤的行、字元和描述。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);    WScript.Quit(-1);
}

請參閱

WshController 物件 | WshRemote 物件 | WshRemoteError 物件 | Status 屬性 | Execute 方法 | Terminate 方法 | Start 事件 | End 事件 | Error 事件


FullName 屬性 (WshShortcut 物件)

Windows Script Host

ExitCode 屬性

傳回指令碼所設定的結束代碼，或使用 Exec() 方法所執行的程式。

Object.ExitCode

參數

Object
WshScriptExec 物件

附註

可執行檔在執行完畢時會設定結束代碼。這會在處理序結束時探查狀態資訊。通常，它用來將錯誤代碼 (或其他資訊片段) 傳回呼叫者。如果處理尚未完成，則 ExitCode 屬性會傳回 0。從 ExitCode 傳回的值依呼叫的應用程式而定。

範例

The following code shows an example of the ExitCode property.

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("%comspec% /c dire")

Function ReadAllFromAny(oExec)

     If Not oExec.StdOut.AtEndOfStream Then
          ReadAllFromAny = oExec.StdOut.ReadAll
          Exit Function
     End If

     If Not oExec.StdErr.AtEndOfStream Then
          ReadAllFromAny = oExec.StdErr.ReadAll
          Exit Function
     End If

     ReadAllFromAny = -1
End Function

Dim allInput, tryCount

allInput = ""
tryCount = 0

Do While True

     Dim input
     input = ReadAllFromAny(oExec)

     If -1 = input Then
          If tryCount > 10 And oExec.Status = 1 Then
               Exit Do
          End If
          tryCount = tryCount + 1
          WScript.Sleep 100
     Else
          allInput = allInput & input
          tryCount = 0
     End If
Loop

If oExec.ExitCode <> 0 Then
     WScript.Echo "Warning: Non-zero exit code"
End If

WScript.Echo allInput
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("%comspec% /c dire");

function ReadAllFromAny(oExec)
{
     if (!oExec.StdOut.AtEndOfStream)
          return oExec.StdOut.ReadAll();

     if (!oExec.StdErr.AtEndOfStream)
          return oExec.StdErr.ReadAll();

     return -1;
}

var allInput = "";
var tryCount = 0;

while (true)
{
     var input = ReadAllFromAny(oExec);
     if (-1 == input)
     {
          if (tryCount++ > 10 && oExec.Status == 1)
               break;
          WScript.Sleep(100);
     }
     else
     {
          allInput += input;
          tryCount = 0;
     }
}

if (oExec.ExitCode != 0)
{
     WScript.Echo("Warning: Non-zero exit code");
}

WScript.Echo(allInput);

請參閱

Exec 方法 | WshScriptExec 物件


FullName 屬性 (WScript 物件)

傳回主機可執行檔的完整路徑 (CScript.exe 或 WScript.exe)。

object.FullName

引數

object
WScript 物件。

附註

FullName 屬性為唯讀字串，代表主機可執行檔的完整路徑。

範例

下列 JScript 程式碼使用 FullName 屬性：

WScript.Echo (WScript.FullName);

產生下列輸出。

C:\WINNT\System32\cscript.exe

請參閱

Path 屬性 | WScript 物件 | WshShortcut 物件 | WshUrlShortcut 物件


FullName 屬性 (WshShortcut 物件)

傳回捷徑物件的目標之完整路徑。

object.FullName

引數

object
WshShortcut 物件。

附註

FullName 屬性包含唯讀字串值，指出捷徑的目標之完整路徑。

範例

下列程式碼擷取捷徑的完整路徑。

[VBScript]
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
oShellLink.TargetPath = WScript.ScriptFullName
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "CTRL+SHIFT+F"
oShellLink.IconLocation = "notepad.exe, 0"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Save
WScript.Echo oShellLink.FullName
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
strDesktop = WshShell.SpecialFolders("Desktop");
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
oShellLink.TargetPath = WScript.ScriptFullName;
oShellLink.WindowStyle = 1;
oShellLink.Hotkey = "CTRL+SHIFT+F";
oShellLink.IconLocation = "notepad.exe, 0";
oShellLink.Description = "Shortcut Script";
oShellLink.WorkingDirectory = strDesktop;
oShellLink.Save();
WScript.Echo(oShellLink.FullName);

請參閱

Path 屬性 | WScript 物件 | WshShortcut 物件 | WshUrlShortcut 物件


FullName 屬性 (WshUrlShortcut 物件)

傳回捷徑物件目標的完整路徑。

object.FullName

引數

object
WshUrlShortcut 物件。

附註

字串。唯讀。

FullName 屬性為唯讀字串，代表捷徑目標之完整路徑。

範例

下列程式碼擷取 URL 捷徑的完整路徑。

[VBScript]
set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
oUrlLink.TargetPath = "http://www.microsoft.com"
oUrlLink.Save
WScript.Echo oUrlLink.FullName
[JScript]
var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
oUrlLink.TargetPath = "http://www.microsoft.com";
oUrlLink.Save();
WScript.Echo (oUrlLink.FullName);

請參閱

Path 屬性 | WScript 物件 | WshShortcut 物件 | WshUrlShortcut 物件


Hotkey 屬性

指派捷徑的鍵組合，或識別指派給捷徑的鍵組合。

object.Hotkey = strHotkey

引數

object
WshShortcut 物件。
strHotkey
為字串，代表指派給捷徑的鍵組合。

語法

strHotkey 的語法為：

[KeyModifier]KeyName
KeyModifier
可為下列任一： ALT+、CTRL+、SHIFT+、EXT+。

附註 EXT+ 意為「擴充鍵」。 — 如果新型別的 SHIFT 鍵加入未來的字元集，它便會在這裡出現。

KeyName
a ... z、 0 ... 9、F1 ?F12、 ...

KeyName 是不區分大小寫的。

附註

熱鍵為按鍵組合，同時按住所有相關鍵時，它會啟動捷徑。

  • 熱鍵可用來啟動您系統桌面和 Windows [開始] 功能表上的捷徑。
    附註 熱鍵的另一個名稱為鍵盤快速鍵。

在 Windows 2000 中，有效的熱鍵恆以 CTRL + ALT 開頭。

範例

下列範例示範 HotKey 屬性的用法。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | 執行您的 Script | WshSpecialFolders 物件 | WshShortcut 物件


IconLocation 屬性

指派捷徑的圖示，或識別指派給捷徑的圖示。

object.IconLocation = strIconLocation

引數

object
WshShortcut 物件。
strIconLocation
用來尋找圖示的字串。字串應該包含與圖示相關的完整路徑和索引。詳細資訊，請參閱範例。

附註

字串。

範例

下列範例示範 IconLocation 屬性的用法。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"  'Zero is the index
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";  //零為索引
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShortcut 物件


Interactive 屬性

設定指令碼模式，或識別指令碼模式。

object.Interactive

引數

object
WScript 物件。

附註

Interactive 屬性傳回布林值。

有兩個模式：即批次和互動。在互動模式中 (預設值)，指令碼會提供使用者互動。與 Windows Script Host 的輸入和輸出已啟用。指令碼可將資訊回應至對話方塊且可等待使用者提供回饋。在批次模式下，並不支援這類使用者互動 — 將停用對 WSH 的所有輸入和輸出。您也可以使用 Windows Script Host 命令列參數 //I (適用於互動) 和 //B (適用於批次) 來設定指令碼模式。

範例

下列 JScript 程式碼顯示指令碼模式。

WScript.Echo WScript.Interactive;

下列 JScript 程式碼將指令碼模式設為批次。

WScript.Interactive = false;

請參閱

WScript 物件


Item 屬性 (Windows Script Host)

Windows Script Host

Item 屬性

從集合顯示指定項目。

Object.Item(natIndex)

引數

Object
EnumNetworkDrive 或 EnumPrinterConnections 方法的結果，或 Environment 或 SpecialFolders 屬性所傳回的物件。
natIndex
要擷取的項目。

附註

Item 是每一個集合的預設屬性。若為 EnumNetworkDrive 和 EnumPrinterConnections 集合，index 是整數；若為 Environment 和 SpecialFolders 集合，index 是字串。

如果無法使用要求的資料夾 (strFolderName)，WshShell.SpecialFolders.Item (strFolderName) 在 VBScript 中會傳回 "Empty"，而在 Jscript 中會傳回 "undefined"。

下表列出特殊資料夾和支援這些資料夾的 Windows 版本。

資料夾 | Windows 版本
AllUsersDesktop | Windows 2000
AllUsersStartMenu | Windows 2000
AllUsersPrograms | Windows 2000
AllUsersStartup | Windows 2000
Desktop | Windows 98/ME、Windows 2000
Favorites | Windows 98/ME、Windows 2000
Fonts | Windows 98/ME、Windows 2000
My Documents | Windows 98/ME、Windows 2000
NetHood | Windows 98/ME、Windows 2000
PrintHood | Windows 98/ME、Windows 2000
Programs | Windows 98/ME、Windows 2000
Recent | Windows 98/ME、Windows 2000
SendTo | Windows 98/ME、Windows 2000
Start Menu | Windows 98/ME、Windows 2000
StartupB | Windows 2000
Templates | Windows 2000

範例

下列程式碼顯示磁碟機和印表機的網路對映資訊。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo();
         WScript.Echo("Network drive mappings:");
         for(i = 0; i < oDrives.length; i += 2){
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i + 1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i = 0; i < oPrinters.length; i += 2){
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));
         }
      </script>
   </job>
</package>

請參閱

EnumNetworkDrive 方法 | EnumPrinterConnections 方法 | Environment 屬性 | SpecialFolders 屬性


Item 屬性 (WshNamed)

提供存取 WshNamed 物件中的項目。

Object.Item(key)

參數

Object
WshNamed 物件
key
您要擷取的項目名稱。

附註

Item 屬性傳回字串。若為集合，它會依指定鍵傳回項目。在命令列輸入引數時，如果要以引號含括字串，您可以在字串引數中使用空白。請參酌下列範例：
myscript.vbs /stringarg:"This string has spaces"

這些引號將在 WshNamed 集合中移除。若要在 WshNamed 集合中加入引號，則必須已在命令列中使用此引號。如果引數沒有值 (如簡單引數或空字串)，則 Item 屬性會傳回空字串。從 Item 屬性要求不存在的命名引數將造成錯誤。若要檢查某個引數是否存在，請使用 Exists 方法。

範例 1

在下列範例中，提供了兩個命名引數以執行一個指令碼。在指令碼中，程式碼會輸出命名引數。此 Item 屬性是用來製作具名引數集合的索引。

下行是在命令提示下鍵入以執行指令碼。

myScript.vbs /c:arg1 /d:arg2

如果下列程式碼在指令碼內部執行：

WScript.Echo WScript.Arguments.Named.Item("c")
WScript.Echo WScript.Arguments.Named.Item("d")

則以下是所產生的輸出：

arg1
arg2

請參閱

WshNamed 物件 | WshUnnamed 物件 | Count 方法 | Item 屬性 | Exists 方法


Item 屬性 (WshUnnamed)

使用從零開始的索引傳回項目。

Object.Item(key)

參數

Object
WshUnnamed 物件。
key
與集合相關聯或 WshUnnamed 物件。

附註

此 Item 屬性傳回字串。若為集合，它會依指定鍵傳回項目。

若為未命名物件，將不會命名項目，所以您無法傳遞 WshUnnamed 引數的名稱。

WshUnnamed 引數項目是以它們在命令列中的順序所儲存的。

在命令列中輸入 WshUnnamed 引數時，如果要以括號含括它們，您可以在字串引數中使用空白。

這些括號會在 WshUnnamed 集合中移除。

範例

下列範例示範如何使用 Item 屬性以傳回 WshUnnamed 集合中的項目。在此範例中，提供了兩個未命名引數以執行一個指令碼。在指令碼中，程式碼會輸出未具名引數。此 Item 屬性是用來製作未具名引數集合的索引。

 下行是在命令提示下鍵入以執行指令碼。

myScript.vbs arg1 arg2

當下列程式碼在指令碼內部執行：

WScript.Echo WScript.Arguments.Unnamed.Item(0)
WScript.Echo WScript.Arguments.Unnamed.Item(1)

以下是所產生的輸出：

arg1
arg2

請參閱

Arguments 屬性 | WshUnnamed 物件 | WshUnnamed 物件 | Count 方法 | Item 屬性 (WshNamed) | Exists 方法


length 屬性 (WshArguments 物件)

傳回某個指令碼擁有的命令列參數數量 (一個引數的集合中的項目數量)。

object.length

引數

object
WshArguments 物件。

附註

length 屬性為唯讀整數，可讓您在 Jscript 中撰寫時使用於指令碼中。它類似 VBScript 的 Count 方法。

請參閱

WshArguments 物件 | Arguments 屬性 | Count 方法


length 屬性 (WshEnvironment 物件)

傳回本機電腦系統上的 Windows 環境變數數量 (Environment 集合中的項目數量)。

object.length

引數

object
WshEnvironment 物件。

附註

length 屬性為唯讀整數，可讓您在 Jscript 中撰寫時使用於指令碼中。它類似 VBScript 的 Count 方法。

請參閱

WshEnvironment 物件 | Count 方法


length 屬性 (WshSpecialFolders 物件)

傳回本機電腦系統上的 Windows 特殊資料夾數量 (SpecialFolders 集合中的項目數量)。

object.length

引數

object
WshSpecialFolders 物件。

附註

length 屬性為唯讀整數，可讓您在 Jscript 中撰寫時使用於指令碼中。它類似 VBScript 的 Count 方法。

請參閱

WshSpecialFolders 物件 | Count 方法


Line 屬性 (WScript)

傳回輸入資料流中的目前行號。

object.strStream.Line

引數

object
WScript 物件。
strStream
StdIn 屬性。

附註

Line 屬性為唯讀整數。

第一次開啟資料流之後；Line 將初始值設為 1。

只有當指令碼以 CScript.exe 執行時，StdIn、StdOut 和 StdErr 屬性和方法才會運作。如果指令碼以 WScript.exe 執行，將發生錯誤。

範例

下列程式碼示範 Line 屬性的用法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.WriteLine "Line " & (StdIn.Line - 1) & ": " & str
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

請參閱

錯誤訊息 | StdIn 屬性


Line 屬性 (WshRemoteError)

識別包含錯誤的指令碼中的行。

Object.Line

引數

Object
WshRemoteError 物件。

附註

Line 屬性傳回不帶正負號的 long 整數。

請注意：部份錯誤不會發生在某特定行。例如，請參考錯誤 Expected End If。在此案例中，並不存在行 (缺少一行程式碼)。在這類案例中，Line 屬性傳回零 (0)。

範例

下列 JScript 程式碼示範 WshRemoteError 物件如何顯示發生錯誤的行。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

請參閱

WshRemote 物件 | WshRemoteError 物件 | Character 屬性 | Description 屬性 | Line 屬性 | SourceText 屬性 | Number 屬性 | Source 屬性


Name 屬性 (WScript 物件)

傳回 WScript 物件的名稱 (主機可執行檔)。

object.Name

引數

object
WScript 物件。

附註

Name 屬性為唯讀字串。

範例

下列 JScript 程式碼顯示如何使用 Name 屬性。

WScript.Echo (WScript.Name);

請參閱

WScript 物件


Named 屬性

傳回 WshNamed 物件 (named 引數的集合)。

Object.Named

參數

Object
WshArguments 物件。

附註

Named 屬性傳回 WshNamed 集合，即 named 引數的集合。使用引數的名稱可找出是否已併入此引數及存取其值。

範例

下列程式碼顯示命名與未命名的命令列引數數目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

請參閱

WshArguments 物件 | WshNamed 物件 | Unnamed 屬性


Number 屬性 (Windows Script Host)

Windows Script Host

Number 屬性

報告代表指令碼錯誤的錯誤編號。

Object.Number

引數

Object
WshRemoteError 物件。

附註

該 Number 屬性傳回不帶正負號的 long 整數。

範例

下列程式碼示範 WshRemoteError 物件如何顯示錯誤編號。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

請參閱

WshRemote 物件 | WshRemoteError 物件 | Description 屬性 | Line 屬性 | Character 屬性| SourceText 屬性| Source 屬性


Path 屬性 (Windows Script Host)

Windows Script Host

Path 屬性

傳回包含主機可執行檔的目錄名稱 (CScript.exe 或 WScript.exe)。

object.Path

引數

object
WScript 物件。

備註

Path 屬性為唯讀字串。

範例

下列 VBScript 程式碼回應可執行檔常駐的目錄。

WScript.Echo (WScript.Path);

請參閱

FullName 屬性 | WScript 物件


ProcessID 屬性

處理序的處理 ID (PID) 會以 WshScriptExec 物件啟動。

Object.ProcessID

參數

Object
WshScriptExec 物件。

附註

您可以使用 ProcessID 屬性以啟動應用程式 (作為 AppActivate 方法的引數)。

範例

下列程式碼使用 ProcessID 屬性以啟動小算盤和記事本應用程式。

[VBScript]
Sub delayedSendKeys(str)
     WScript.Sleep 100
     WshShell.SendKeys str
End Sub

Dim WshShell, oCalc, oNotepad
Set WshShell = CreateObject("WScript.Shell")
Set oCalc = WshShell.Exec("calc")
Set oNotepad = WshShell.Exec("notepad")
WScript.Sleep 500

WshShell.AppActivate oCalc.ProcessID
delayedSendKeys "1{+}1~"
delayedSendKeys "^C"
delayedSendKeys "%{F4}"

WshShell.AppActivate oNotepad.ProcessID
delayedSendKeys "1 {+} 1 = ^V"
[JScript]
function delayedSendKeys(str)
{
     WScript.Sleep(100);
     WshShell.SendKeys(str);
}

var WshShell = new ActiveXObject("WScript.Shell");
var oCalc = WshShell.Exec("calc");
var oNotepad = WshShell.Exec("notepad");
WScript.Sleep(500);

WshShell.AppActivate(oCalc.ProcessID);
delayedSendKeys("1{+}1~");
delayedSendKeys("^C");
delayedSendKeys("%{F4}");

WshShell.AppActivate(oNotepad.ProcessID);
delayedSendKeys("1 {+} 1 = ^V");

請參閱

WshScriptExec 物件 | AppActivate 方法


RelativePath 屬性

指派捷徑的相對路徑，或識別捷徑的相對路徑。

object.RelativePath

引數

object
WshShortcut 物件。

附註

字串。

範例

下列程式碼設定捷徑的相對路徑。

[VBScript]
Dim WshShell, WshShortcut
Set WshShell = WScript.CreateObject ("WScript.Shell")
Set WshShortcut = WshShell.CreateShortcut("MyScript.lnk")
WshShortcut.RelativePath = "C:\Scripts\"
[JScript]
var WshShell = WScript.CreateObject ("WScript.Shell");
var WshShortcut = WshShell.CreateShortcut("MyScript.lnk");
WshShortcut.RelativePath = "C:\\Scripts\\";

請參閱

WshShortcut 物件


ScriptFullName 屬性

傳回目前執行中的指令碼的完整路徑。

object.ScriptFullName

引數

object
WScript 物件。

附註

ScriptFullName 屬性為唯讀字串。

範例

下列範例示範 ScriptFullName 屬性的用法。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | ScriptName 屬性 | WScript 物件


ScriptName 屬性

傳回目前執行中的指令碼的檔名。

object.ScriptName

引數

object
WScript 物件。

附註

ScriptName 屬性為唯讀字串。

範例

下列 VBScript 程式碼回應執行中的指令碼的名稱。

WScript.Echo WScript.ScriptName

請參閱

ScriptFullName 屬性 | WScript 物件


Source 屬性 (Windows Script Host)

Windows Script Host

Source 屬性

識別造成指令碼錯誤的 COM 物件。

Object.Source

引數

Object
WshRemoteError 物件。

附註

Source 屬性傳回字串。

範例

下列程式碼示範 WshRemoteError 物件如何顯露造成指令碼錯誤的 COM 物件。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description & vbCrLf & "Source: " & theError.Source
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description + "\nSource: " + theError.Source);
    WScript.Quit(-1);
}

請參閱

WshRemote 物件 | WshRemoteError 物件 | Description 屬性 | Line 屬性 | Character 屬性| SourceText 屬性 | Number 屬性


SourceText 屬性

包含造成錯誤的來源程式碼行。

Object.SourceText

引數

Object
WshRemoteError 物件。

附註

SourceText 屬性傳回字串。

不是必定能取得來源文字。如果無法取得，SourceText 屬性會傳回空字串。

範例

下列程式碼示範 WshRemoteError 物件如何顯露造成錯誤的原始程式碼行。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description & vbCrLf & "Source Text: " & theError.SourceText
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description + "\nSource Text: "_+ theError.SourceText);
    WScript.Quit(-1);
}

請參閱

WshRemote 物件 | WshRemoteError 物件 | Description 屬性 | Line 屬性 | Character 屬性| Number 屬性 | Source 屬性


SpecialFolders 屬性

傳回 SpecialFolders 物件 (特殊資料夾的集合)。

object.SpecialFolders(objWshSpecialFolders)

引數

object
WshShell 物件。
objWshSpecialFolders
特殊資料夾的名稱。

附註

  • WshSpecialFolders 物件為集合。它包含整個 Windows 特殊資料夾集，如 Desktop 資料夾、Start Menu 資料夾和 Personal Documents 資料夾。特殊資料夾名稱是用來索引至集合以擷取您要的特殊資料夾。如果要求的資料夾 (strFolderName) 不是變數，SpecialFolders 屬性會傳回空字串。例如，如果 strFolderName 為 AllUsersDesktop，則 Windows 95 沒有 AllUsersDesktop 資料夾且傳回空字串。

下列是可用的特殊資料夾：

  • AllUsersDesktop
  • AllUsersStartMenu
  • AllUsersPrograms
  • AllUsersStartup
  • Desktop
  • Favorites
  • Fonts
  • MyDocuments
  • NetHood
  • PrintHood
  • Programs
  • Recent
  • SendTo
  • StartMenu
  • Startup
  • Templates

範例

下列範例示範 SpecialFolders 屬性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshSpecialFolders 物件 | WshShell 物件


Status 屬性 (WshRemote)

報告遠端指令碼的目前狀態。

Object.Status

引數

Object
WshRemote 物件。

附註

Status 屬性傳回唯讀的列舉資料型別。

值

Status 屬性傳回三個可能值的其中一。

傳回 | 數值 | 描述
NoTask | 0 | 已建立遠端指令碼物件，但尚未執行。
Running | 1 | 遠端指令碼物件目前執行中。
Finished | 2 | 遠端指令碼物件已執行完畢。

範例

下列程式碼示範如何使用測試區塊的 Status 屬性，以檢查遠端指令碼是否正常的結束。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

請參閱

WshController 物件 | WshRemote 物件 | Error 屬性 | Execute 方法 | Terminate 方法 | Start 事件 | End 事件 | Error 事件


Status 屬性 (WshScriptExec)

提供以 Exec() 方法執行指令碼時的相關狀態資訊。

Object.Status

引數

Object
WshScriptExec 物件。

附註

非同步執行程式時會使用此 Status 屬性。

傳回值

Status 屬性從列舉型別傳回值。

WshRunning ( = 0)
工作仍執行中。
WshFinished ( = 1)
工作已完成。

範例

下列程式碼會執行 calc.exe 並將最後狀態回應至畫面。

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("calc")

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}

WScript.Echo(oExec.Status);

請參閱

Exec 方法 | WshScriptExec 物件


StdErr 屬性 (WScript)

顯露目前指令碼的唯寫錯誤輸出資料流。

object.StdErr

引數

object
WScript 物件。

附註

StdErr 屬性傳回一個代表標準錯誤資料流的物件。只使用 CScript.exe 時，可存取 StdIn、StdOut 和 StdErr 資料流。若在使用 WScript.exe 時嘗試存取這些資料流，將產生錯誤。

請參閱

錯誤訊息 | WScript 物件


StdErr 屬性 (WshScriptExec)

提供存取 Exec 物件的 stderr 輸出資料流。

Object.StdErr

引數

Object
WshScriptExec 物件。

附註

使用 StdErr 屬性，從使用 Exec 所啟動的處理序擷取傳送到 stderr 資料流的資料。

範例

下列程式碼會藉由嘗試執行非現有指令並顯示結果的方式來示範 StdErr 物件。

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("%comspec% /c dire")

Function ReadAllFromAny(oExec)

     If Not oExec.StdOut.AtEndOfStream Then
          ReadAllFromAny = oExec.StdOut.ReadAll
          Exit Function
     End If

     If Not oExec.StdErr.AtEndOfStream Then
          ReadAllFromAny = "STDERR: " + oExec.StdErr.ReadAll
          Exit Function
     End If

     ReadAllFromAny = -1
End Function

Dim allInput, tryCount

allInput = ""
tryCount = 0

Do While True

     Dim input
     input = ReadAllFromAny(oExec)

     If -1 = input Then
          If tryCount > 10 And oExec.Status = 1 Then
               Exit Do
          End If
          tryCount = tryCount + 1
          WScript.Sleep 100
     Else
          allInput = allInput & input
          tryCount = 0
     End If
Loop

WScript.Echo allInput
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("%comspec% /c dire");

function ReadAllFromAny(oExec)
{
     if (!oExec.StdOut.AtEndOfStream)
          return oExec.StdOut.ReadAll();

     if (!oExec.StdErr.AtEndOfStream)
          return "STDERR: " + oExec.StdErr.ReadAll();

     return -1;
}

var allInput = "";
var tryCount = 0;

while (true)
{
     var input = ReadAllFromAny(oExec);
     if (-1 == input)
     {
          if (tryCount++ > 10 && oExec.Status == 1)
               break;
          WScript.Sleep(100);
     }
     else
     {
          allInput += input;
          tryCount = 0;
     }
}

WScript.Echo(allInput);

請參閱

WshScriptExec 物件 | StdIn 屬性 | StdOut 屬性


StdIn 屬性 (WScript)

顯露目前指令碼的唯讀輸入資料流。

object.StdIn

引數

object
WScript 物件。

附註

StdIn 屬性傳回一個代表標準輸入資料流的物件。只使用 CScript.exe 時，可存取 StdIn、StdOut 和 StdErr 資料流。若在使用 WScript.exe 時嘗試存取這些資料流，將產生錯誤。

請參閱

錯誤訊息 | WScript 物件 | Read 方法 | ReadAll 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法 | AtEndOfLine 屬性 | Close 方法 | Column 屬性 | Line 屬性 (WScript)


StdIn 屬性 (WshScriptExec)

顯示 Exec 物件的 stdin 輸入資料流。

Object.StdIn

引數

Object
WshScriptExec 物件。

附註

使用 StdIn 屬性，將資料傳到使用 Exec 所啟動的處理序。

範例

下列程式碼會啟動一個批次檔並等待使用者輸入提示。在透過 StdIn 資料流輸入需要的資料後，批次檔將能夠完成。

[VBScript]
Dim WshShell, oExec, input
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("test.bat")
input = ""

Do While True

     If Not oExec.StdOut.AtEndOfStream Then
          input = input & oExec.StdOut.Read(1)
          If InStr(input, "Press any key") <> 0 Then Exit Do
     End If
     WScript.Sleep 100
Loop

oExec.StdIn.Write VbCrLf

Do While oExec.Status <> 1
     WScript.Sleep 100
Loop
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("test.bat");
var input = "";

while (true)
{
     if (!oExec.StdOut.AtEndOfStream)
     {
          input += oExec.StdOut.Read(1);
          if (input.indexOf("Press any key") != -1)
               break;
     }
     WScript.Sleep(100);
}

oExec.StdIn.Write("\n");

while (oExec.Status != 1)
     WScript.Sleep(100);

請參閱

WshScriptExec 物件 | StdIn 屬性 | StdErr 屬性


StdOut 屬性 (WScript)

顯露目前指令碼的唯寫輸出資料流。

object.StdOut

引數

object
WScript 物件。

附註

StdOut 屬性傳回一個代表標準輸出資料流的物件。只使用 CScript.exe 時，可存取 StdIn、StdOut 和 StdErr 資料流。若在使用 WScript.exe 時嘗試存取這些資料流，將產生錯誤。

請參閱

錯誤訊息 | WScript 物件 | Write 方法 | WriteBlankLines 方法 | WriteLine 方法 | Close 方法 | Column 屬性 | Line 屬性 (WScript)


StdOut 屬性 (WshScriptExec)

顯露 Exec 物件的唯寫 stdout 輸出資料流。

Object.StdOut

引數

Object
WshScriptExec 物件。

附註

StdOut 屬性包含指令碼可能已傳到標準輸出的任何資訊的唯讀複本。

範例

下列程式碼會啟動一個批次檔並等待使用者輸入提示。在透過 StdIn 資料流輸入需要的資料後，批次檔將能夠完成。

[VBScript]
Dim WshShell, oExec, input
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("test.bat")
input = ""

Do While True

     If Not oExec.StdOut.AtEndOfStream Then
          input = input & oExec.StdOut.Read(1)
          If InStr(input, "Press any key") <> 0 Then Exit Do
     End If
     WScript.Sleep 100
Loop

oExec.StdIn.Write VbCrLf

Do While oExec.Status <> 1
     WScript.Sleep 100
Loop
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("test.bat");
var input = "";

while (true)
{
     if (!oExec.StdOut.AtEndOfStream)
     {
          input += oExec.StdOut.Read(1);
          if (input.indexOf("Press any key") != -1)
               break;
     }
     WScript.Sleep(100);
}

oExec.StdIn.Write("\n");

while (oExec.Status != 1)
     WScript.Sleep(100);

請參閱

WshScriptExec 物件 | StdIn 屬性 | StdErr 屬性


TargetPath 屬性

捷徑的可執行檔的路徑。

object.TargetPath

引數

object
WshShortcut 或 WshUrlShortcut 物件。

附註

字串。

此屬性只適用捷徑的目標路徑。對捷徑的任何引數必須置於引數的屬性中。

範例

下列範例示範 TargetPath 屬性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShortcut 物件 | WshUrlShortcut 物件


Unnamed 物件

Windows Script Host

Unnamed 屬性

傳回 WshUnnamed 物件 (unnamed 引數的集合)。

Object.Unnamed

參數

Object
WshArguments 物件。

附註

Unnamed 屬性傳回 WshUnnamed 集合，即 Unnamed 引數的集合。引數將以它們在命令列輸入的順序來呈現。第一個未具名引數位於索引 0。

範例

下列程式碼顯示命名與未命名的命令列引數數目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

請參閱

WshArguments 物件 | WshUnnamed 物件 | Named 屬性


UserDomain 屬性

傳回使用者的網域名稱。

object.UserDomain

引數

object
WshNetwork 物件。

附註

字串。

除非設定 USERDOMAIN 環境變數，否則 UserDomain 屬性無法在 Windows98 和 Windows ME 上運作。預設不會設定此變數。

範例

下列範例示範 UserDomain 屬性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         }
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshNetwork 物件


UserName 屬性

傳回使用者的名稱。

object.UserName

引數

object
WshNetwork 物件。

附註

字串。

如果您在登入指令碼中使用此屬性，請參閱建立自動化登入指令碼。

範例

下列範例示範 UserName 屬性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         }
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshNetwork 物件


Version 屬性

傳回 Windows Script Host 的版本。

object.Version

引數

object
WScript 物件。

附註

字串。

範例

下列 VBScript 程式碼回應 Windows Script Host 的現行版本。

WScript.Echo WScript.Version

請參閱

WScript 物件


WindowStyle 屬性

對捷徑指派視窗樣式，或識別捷徑所使用的視窗樣式的型別。

object.WindowStyle = intWindowStyle

引數

object
WshShortcut 物件。
intWindowStyle
設定執行中程式的視窗樣式。

附註

WindowStyle 屬性傳回整數。

下表列出 intWindowStyle 的可用設定。

IntWindowStyle | 描述
1 | 啟動和顯示視窗。如果視窗已最小化或最大化，則系統會將它還原成原來的大小和位置。
3 | 啟動視窗，及將它顯示為最大化視窗。
7 | 最小化視窗，和啟動下一個頂層視窗。

範例

下列範例示範 WindowStyle 屬性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShortcut 物件


WorkingDirectory 屬性

指派捷徑的工作目錄，或識別捷徑使用的工作目錄。

object.WorkingDirectory = strWorkingDirectory

引數

object
WshShortcut 物件。
strWorkingDirectory
字串。捷徑在其上啟動的目錄。

附註

字串。

範例

下列範例示範 WorkingDirectory 屬性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script


方法

本節內容

AddPrinterConnection 方法
將 DOS 樣式印表機連線加入您的電腦。
AddWindowsPrinterConnection 方法
將 Windows 樣式印表機連線加入您的電腦。
AppActivate 方法
啟動應用程式視窗。
Close 方法
關閉開啟的資料流。
ConnectObject 方法
將物件的事件來源連接到含給定前置詞的函數。
Count 方法
傳回 WshNamed 或 WshUnnamed 物件中的參數數量。
CreateObject 方法
建立 strProgID 參數指定的物件。
CreateScript 方法
建立 WshRemote 物件 (此物件代表執行於遠端處理序的指令碼之執行個體)。
CreateShortcut 方法
對捷徑或 URLshortcut 建立物件參照。
DisconnectObject 方法
從 Windows Script Host 中斷連接先前連接的物件。
Echo 方法
將輸出傳到對話方塊或主控台。
EnumNetworkDrives 方法
傳回目前的網路磁碟機對映。
EnumPrinterConnections 方法
傳回目前的網路印表機對映。
Exec 方法
在子命令 shell 中執行應用程式、提供存取 stdin/stdout/stderr 通道，及共用環境變數。
Execute 方法
開始執行遠端 script 物件。
Exists 方法
指出特定鍵值是否存在 WshNamed 物件中。
ExpandEnvironmentStrings 方法
從執行中的處理序展開需要的環境變數，及傳回結果字串。
GetObject 方法
擷取檔案的 Automation 物件，或擷取 strProgID 參數所指定的物件。
getResource 方法
傳回以 resource 項目所定義的資源值。
LogEvent 方法
記錄 Windows NT 事件日誌或 WSH.log 檔中的事件。
MapNetworkDrive 方法
將 strRemoteName 所指定的共用點對應至本機資源名稱 strLocalName。
Popup 方法
顯示快顯訊息方塊視窗，其包含 strText 所包含的訊息。
Quit 方法
以指定的錯誤碼結束執行。
Read 方法
從輸入資料流讀取指定數量的字元，及傳回結果字串。
ReadAll 方法
讀取整個輸入資料流及傳回結果字串。
ReadLine 方法
從輸入資料流讀取整行 (最多到換行字元，但不包含換行字元) 及傳回結果字串。
RegDelete 方法
從登錄中刪除 strName 所命名的鍵或值。
RegRead 方法
傳回 strName 所命名的註冊鍵或值。
RegWrite 方法
設定 strName 所命名的註冊鍵或值。
Remove 方法
刪除 strName 所指定的環境變數。
RemoveNetworkDrive 方法
移除 strName 所代表的現行資源連接。
RemovePrinterConnection 方法
移除 strName 所代表的現行資源連接。
Run 方法
建立用來執行 strCommand 的新處理序。
Save 方法
將捷徑儲存到指定的位置。
SendKeys 方法
將一或多個按鍵傳到作用中視窗 (如同在鍵盤上鍵入一般)。
SetDefaultPrinter 方法
將預設印表機設定為指定的遠端印表機。
ShowUsage 方法
顯示應如何使用指令碼的資訊。
Skip 方法
讀取輸入資料流時略過指定數量的字元。
SkipLine 方法
讀取輸入資料流時略過下一行。
Sleep 方法
將指令碼處理序置於非現用狀態指定的毫秒數，然後繼續執行。
Terminate 方法 (WshScriptExec)
指示指令碼引擎來結束 Exec 方法所啟動的處理序。
Write 方法
將指定字串寫至輸出資料流。
WriteBlankLines 方法
將指定數量的新行字元寫至輸出資料流。
WriteLine 方法
將指定字串和新行字元寫至輸出資料流。

相關章節

WSH 語言
組成 WSH 參考的項目清單。
WSH 基本概念
學習 WSH 的基本知識。


AddPrinterConnection 方法

將遠端 MS-DOS 架構印表機連接新增至您的電腦系統。

object.AddPrinterConnection(strLocalName, strRemoteName[,bUpdateProfile][,strUser][,strPassword])

引數

object
WshNetwork 物件。
strLocalName
為字串值，其指出指定到連接印表機的本端名稱。
strRemoteName
為字串值，指出遠端印表機的名稱。
bUpdateProfile
選擇項。為布林值，指出印表機對映是否儲存在目前的使用者設定檔中。若 bUpdateProfile 已提供且為 true，則對映儲存於使用者設定檔中。預設值是 false。
strUser
選擇項。為字串值，指出使用者名稱。如果您使用現行使用者以外的使用者所擁有的設定檔，來對映遠端印表機，您即可指定 strUser 和 strPassword。
strPassword
選擇項。為字串值，指出使用者密碼。如果您使用現行使用者以外的使用者所擁有的設定檔來對映遠端印表機，您即可指定 strUser 和 strPassword。

附註

AddPrinterConnection 方法會將網路印表機加入 MS-DOS 印表機埠，如 LPT1。您無法使用此方法來加入遠端 Windows 架構印表機連線。若要加入遠端 Windows 架構印表機連線，請使用 AddWindowsPrinterConnection 方法。

範例

下列程式碼使用 AddPrinterConnection 方法，將網路印表機連接至 LPT1。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.AddPrinterConnection "LPT1", "\\Server\Print1"
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.AddPrinterConnection ("LPT1", "\\\\Server\\Print1");

請參閱

WshNetwork 物件 | AddWindowsPrinterConnection 方法 | EnumPrinterConnections 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法


AddWindowsPrinterConnection 方法

將 Windows 架構印表機連接加入您的電腦系統。

Windows NT/2000:
object.AddWindowsPrinterConnection(
   strPrinterPath
)
Windows 9x/Me:
object.AddWindowsPrinterConnection(
   strPrinterPath,
   strDriverName[,strPort]
)

引數

object
WshNetwork 物件。
strPrinterPath
為字串值，指出印表機連接的路徑。
strDriverName
為字串值，指出驅動程式的名稱 (如果使用於 Windows NT/Windows 2000，則略過)。
strPort
選擇項。為字串值，指定印表機連接的印表機埠 (如果在 Windows NT/Windows 2000，則略過)。

附註

使用此方法來加入印表機連線，類似於使用 [控制台] 的 [印表機] 選項。不像 AddPrinterConnection 方法，此方法可讓您建立印表機連線，而不需將它導向特定埠 (如 LPT1)。如果連線失敗，將丟出錯誤。在 Windows 9x/Me 中，機器必須已安裝印表機驅動程式，AddWindowsPrinterConnection 方法才能運作。如果未安裝驅動程式，Windows 將傳回錯誤訊息。

範例 1

下列程式碼使用 AddWindowsPrinterConnection 方法，將網路印表機連接至 Windows NT/2000 電腦系統。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
WshNetwork.AddWindowsPrinterConnection PrinterPath
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\printserv\\DefaultPrinter";
WshNetwork.AddWindowsPrinterConnection(PrinterPath);

範例 2

下列程式碼使用 AddWindowsPrinterConnection 方法，將網路印表機連接至 Windows 9x/Me 電腦系統。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
PrinterDriver = "Lexmark Optra S 1650"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\printserv\\DefaultPrinter";
var PrinterDriver = "Lexmark Optra S 1650";
WshNetwork.AddWindowsPrinterConnection(PrinterPath, PrinterDriver);

請參閱

WshNetwork 物件 | AddPrinterConnection 方法 | EnumPrinterConnections 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法


AppActivate 方法

啟動應用程式視窗。

object.AppActivate title

引數

object
WshShell 物件。
title
指定要啟動的應用程式。這可能是字串，其包含應用程式的標題 (當它出現於標題列) 或應用程式的處理序 ID。

附註

AppActivate 方法會傳回布林值，以識別程序呼叫是否成功。此方法會將焦點變更為命名的應用程式或視窗，但它不會影響最大化或最小化。當使用者採取行動以變更焦點 (或關閉視窗) 時，焦點會從啟動的應用程式視窗移動。

在決定啟動的應用程式時，指定的標題會比較每個正在執行的應用程式的標題字串。如果不存在完全符合的項目，將啟動標題字串以 title 開頭的任何應用程式。如果仍找不到這類應用程式，將啟動標題字串以 title 結尾的任何應用程式。如果存在一個以上以 title 命名的應用程式的執行個體時，將任意啟動一個執行個體。

範例

下列範例示範以不同的指令碼語言 (VBScript 和 JScript)，針對兩個工作來使用單一的 .wsf 檔。 兩個工作的功能是相同的 — 每一個都執行 Windows 計算器，並傳給它按鍵以執行簡單的計算。

下列範例啟動 Windows 計算機及使用 AppActivate，確保計算機位於頂端。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         WshShell.Run "calc"
         WScript.Sleep 100
         WshShell.AppActivate "Calculator"
         WScript.Sleep 100
         WshShell.SendKeys "1{+}"
         WScript.Sleep 500
         WshShell.SendKeys "2"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 500
         WshShell.SendKeys "*3"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 2500
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         WshShell.Run("calc");
         WScript.Sleep(100);
         WshShell.AppActivate("Calculator");
         WScript.Sleep(100);
         WshShell.SendKeys("1{+}");
         WScript.Sleep(500);
         WshShell.SendKeys("2");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(500);
         WshShell.SendKeys("*3");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(2500);
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShell 物件 | SendKeys 方法


Close 方法 (Windows Script Host)

Windows Script Host

Close 方法

關閉文字資料流。

object.Close

引數

object
StdIn、StdOut 或 StdErr 文字資料流物件。

附註

StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時將傳回錯誤。您不必關閉標準的資料流；因為在處理序結束時它們會自動關閉。如果您關閉標準的資料流，請注意指向該標準資料流的其他任何指標都會失效。此方法是提供來與 TextStream 物件相容。

請參閱

StdErr 屬性 | StdIn 屬性 | StdOut 屬性 | 錯誤訊息


ConnectObject 方法

將物件的事件來源連接至含給定前置詞的函數。

object.ConnectObject(strObject, strPrefix)

引數

object
WScript 物件。
strObject
必要項。為字串值，指出要連接的物件名稱。
strPrefix
必要項。為字串值，指出函數前置詞。

附註

當您要同步化物件的事件時，連接的物件是很有用的。建立物件之後，ConnectObject 方法會將物件的輸出介面連接至指令碼檔案。Event 函數是此前置詞和事件名稱的組合。

範例

下列範例示範使用 ConnectObject 方法來連接 WshRemote 物件的 Error 事件。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

請參閱

WScript 物件 | DisconnectObject 方法 | CreateObject 方法 | GetObject 方法


Count 方法

傳回 WshNamed 或 WshUnnamed 物件的參數數量。

object.Count

引數

object
Arguments 物件。

附註

Count 方法傳回整數值。方法主要是供 VBScript 使用者所使用。JScript 的使用者一般應該會用length 屬性來代替。

範例 (WshNamed)

下列範例使用 WshNamed 物件來示範 Count 方法。以在命令列鍵入下列文字開始。

myScript.vbs /c:"WSH is a wonderful thing" /s:"scripts are wonderful"

接著，加入下列 VBScript 程式碼。

For i = 0 to WScript.Arguments.Count-1
    WScript.Echo WScript.Arguments.Named(i)
next i

以下是結果：

WSH is a wonderful thing
scripts are wonderful

範例 (WshUnnamed)

下列範例使用 WshUnnamed 物件來示範 Count 方法。以在命令列鍵入下列文字開始。

myscript.vbs "WSH is a wonderful thing" "scripts are wonderful"

接著，加入下列 VBScript 程式碼。

For i = 0 to WScript.Arguments.Count-1
    WScript.Echo WScript.Arguments.Unnamed(i)
next i

以下是結果：

WSH is a wonderful thing
scripts are wonderful

請參閱

Arguments 屬性 | WshNamed 物件 | WshUnnamed 物件 | Item 屬性 | Exists 方法


CreateObject 方法

建立 COM 物件。

object.CreateObject(strProgID[,strPrefix])

引數

object
WScript 物件。
strProgID
為字串值，指出要建立的物件之程式識別碼 (ProgID)。
strPrefix
選擇項。為字串值，指出函數前置詞。

附註

使用 strPrefix 引數而以 CreateObject 方法所建立的物件是連接的物件。當您要同步化物件的事件時，這些是很有用的。建立物件後，此物件的輸出介面會連接到指令碼檔案。Event 函式是此前罝詞和事件名稱的組合。如果您建立物件且未提供 strPrefix 引數，您仍可使用 ConnectObject 方法來同步化物件的事件。當物件引發事件時，WSH 會以附加至事件名稱開頭的 strPrefix 來呼叫副程式。例如，如果 strPrefix 為 MYOBJ，且物件引發稱為 OnBegin 的事件，Windows Script Host 會呼叫指令碼上的 MYOBJ_OnBegin 副程式。CreateObject 方法會傳回指向物件的 IDispatch 介面的指標。

範例

下列 VBScript 程式碼使用 CreateObject 方法來建立 WshNetwork 物件：

Set WshNetwork = WScript.CreateObject("WScript.Network")

請參閱

WScript 物件 | GetObject 方法 | ConnectObject 方法 | DisconnectObject 方法


CreateScript 方法

建立 WshRemote 物件。

object.CreateScript(CommandLine,[MachineName])

參數

object
WshController 物件。
Commandline
必要項。為字串值，指出指令碼的路徑和參數，就如同它們是在命令提示字元下鍵入一般。指令碼的路徑應該從控制程式的電腦系統上看到，而非從要在其上執行指令碼的電腦系統看到。
MachineName
選擇項。為字串值，指出遠端電腦系統 (您要在其上執行遠端指令碼的電腦) 的名稱。它指定在「制式命名規格 (UNC)」中。

附註

CreateScript 方法將處理傳回 WshRemote 物件的執行個體。指令碼名稱的路徑部份不必是本機的 — 它可參考網路共用的指令碼。這讓它可以位於某個電腦系統，從另一個電腦系統擷取指令碼，然後在第三個電腦系統上執行它。如果沒有提供機器名稱，則遠端指令碼物件會在控制程式電腦系統上執行 (這是預設值)。如果提供機器名稱，則遠端指令碼物件會在命名的電腦系統上執行。CreateScript 方法會建立與遠端電腦系統的連接，及設定它來執行指令碼，但直到您呼叫 WshRemote 物件的 Execute 方法之後，指令碼才會真正啟動。

範例

下列範例示範 WshController 物件的 CreateScript 方法如何建立 WshRemote 物件 (遠端指令碼的執行個體)。

var Controller = WScript.CreateObject("WScript.WshController");
var RemoteScript = Controller.CreateScript("d:\\scripts\\myScript.js");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

WScript.Echo("Completed Successfully!");
function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("An Error Occurred at Line " + theError.Line + ", Char " + theError.Character + ": " + theError.Description);
    WScript.Quit(-1);
}

請參閱

CreateObject 方法 | CreateScript 方法 | WshRemote 物件 | Execute 方法


CreateShortcut 方法

建立新捷徑，或開啟現有的捷徑。

object.CreateShortcut(strPathname)

引數

object
WshShell 物件。
strPathname
為字串值，指出要建立的捷徑的路徑名稱。

附註

CreateShortcut 方法傳回 WshShortcut 物件或 WshURLShortcut 物件。僅呼叫 CreateShortcut 方法不會建立捷徑。您對它製作的捷徑物件和變更會儲存於記憶體，直到您使用 Save 方法將它存回磁碟為止。若要建立捷徑，您必須：

  1. 建立 WshShortcut 物件的執行個體。
  2. 初始化其屬性。
  3. 使用 Save 方法將它存回磁碟。
    備註 有一個常見的問題是在捷徑物件的 TargetPath 屬性所放置的引數無法運作。捷徑的所有引數必須放在 Arguments 屬性。

範例

下列範例建立 WshShell 物件及使用 CreateShortcut 方法來建立兩個捷徑。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShortcut 物件 | WshUrlShortcut 物件 | WshShell 物件


DisconnectObject 方法

中斷連接已連接物件的事件來源。

object.DisconnectObject(obj)

引數

object
WScript 物件。
obj
為字串值，指出要中斷連接的物件之名稱。

附註

「中斷連接」物件之後，WSH 將不會回應其事件。雖然此物件仍然可以引發事件。請注意：若指定的物件尚未連接，則 DisconnectObject 方法不會執行任何內容。

範例

下列範例示範使用 DisconnectObject 方法在遠端的指令碼完成後中斷連接 WshRemote 物件的 Error 事件。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

WScript.DisconnectObject(RemoteScript)

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

請參閱

WScript 物件 | ConnectObject 方法 | CreateObject 方法 | GetObject 方法


Echo 方法

將文字輸出至訊息方塊或命令主控台視窗。

object.Echo [Arg1] [,Arg2] [,Arg3] ...

引數

object
WScript 物件。
Arg1, Arg2, Arg3 ...
選擇項。為字串值，指出要顯示的項目清單。

附註

根據您使用的 WSH 引擎，Echo 方法會執行不同的行為。

WSH 引擎 | 文字輸出
Wscript.exe | 圖形訊息方塊
Cscript.exe | 命令主控台視窗

每個顯示的項目以一個空格字元分隔。使用 CScript.exe 時，每個項目以一個換行字元顯示。如果未提供項目來作為 Echo 方法的引數，將輸出空白行。

範例

下列範例使用 Echo 方法以顯示目前機器的網域名稱、電腦名稱和使用者名稱，及顯示磁碟機和印表機的網路對映資訊。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
         WScript.Echo
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         WScript.Echo();
         WScript.Echo("Network drive mappings:");
         for(i=0; i<oDrives.Count(); i+=2){
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i+1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i=0; i<oPrinters.Count(); i+=2){
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i+1));
         }
      </script>
   </job>
</package>

請參閱

執行您的 Script | WScript 物件


EnumNetworkDrives 方法

傳回目前的網路磁碟機對映資訊。

objDrives = object.EnumNetworkDrives

引數

object
WshNetwork 物件。
objDrives
保留網路磁碟機對映資訊的變數。

附註

EnumNetworkDrives 方法會傳回集合。此集合是一個陣列，其連結項目配對 — 網路磁碟機本機名稱及其相關的 UNC 名稱。集合中的雙數號項目代表邏輯磁碟機的本機名稱。奇數號編號的項目代表相關的 UNC 共用名稱。集合中的第一個項目位於索引零 (0)。

範例

下列範例使用 EnumNetworkDrives 來產生網路磁碟機的清單，及顯示對映資訊。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo("Network drive mappings:");
         for(i = 0; i < oDrives.length; i += 2) {
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i + 1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i = 0; i < oPrinters.length; i += 2) {
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));
         }
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshNetwork 物件 | MapNetworkDrive 方法 | RemoveNetworkDrive 方法


EnumPrinterConnections 方法

傳回目前的網路印表機對映資訊。

objPrinters = object.EnumPrinterConnections

引數

object
WshNetwork 物件。
objPrinters
保留網路印表機對映資訊的變數。

備註

EnumPrinterConnections 方法會傳回集合。此集合是一個陣列，其聯結項目配對 — 網路印表機本機名稱及其相關的 UNC 名稱。集合中的雙數號項目代表印表機埠。奇數編號的項目代表網路印表機 UNC 名稱。集合中的第一個項目位於索引零 (0)。

範例

下列範例使用 EnumPrinterConnections 來產生網路印表機的清單，及顯示此對映資訊。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
   </script>
</job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo("Network drive mappings:");
         for(i = 0; i < oDrives.length; i += 2) {
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i + 1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i = 0; i < oPrinters.length; i += 2) {
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));
         }
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshNetwork 物件 | AddPrinterConnection 方法 | AddWindowsPrinterConnection 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法


Exec 方法

在子命令 shell 中執行應用程式，提供對 StdIn/StdOut/StdErr 資料流的存取。

object.Exec(strCommand)

引數

object
WshShell 物件。
strCommand
為字串值，指出用來執行指令碼的命令列。若在命令提示下鍵入命令列，則此命令列必須出現在應該出現的地方。

附註

Exec 方法傳回 WshScriptExec 物件，其提供以 Exec 執行的指令碼及存取 StdIn、StdOut 和 StdErr 通道等狀態和錯誤資訊。Exec 方法只允許執行命令列應用程式。Exec 方法無法用來執行遠端指令碼。請勿混淆 Exec 方法與 Execute 方法 (屬於 WshRemote 物件)。

範例

下列 JScript 範例示範如何從命令列指令碼執行 Exec 方法。

var aJob = WshShell.Exec("%comspec% /c myScript.js");

請參閱

WshScriptExec 物件


Execute 方法 (Windows Script Host)

Windows Script Host

Execute 方法

啟動遠端指令碼物件的執行。

object.Execute

參數

object
WshRemote 物件

附註

當指令碼開始執行時，將引發 WshRemote 物件的 Start 事件。請勿混淆 Execute 方法與 Exec 方法 (屬於 WScript 物件)。

範例

下列範例示範如何使用 Execute 方法以建立 WshRemote 物件 (啟動遠端指令碼的執行個體)。

// 您必須建立控制程式才能建立遠端 script 物件。
var Controller = WScript.CreateObject("WScript.WSHController");

// 建立 WshRemote 物件。
var remoteScript = Controller.CreateScript("d:\\scripts\\myScript.js");

// 造成 remoteScript 丟出 Start 事件。
remoteScript.Execute();

請參閱

WshController 物件 | WshRemote 物件 | Status 屬性 | Error 屬性 | Terminate 方法 | Start 事件 | End 事件


Exists 方法 (Windows Script Host)

Windows Script Host

Exists 方法

指定特定的鍵值是否存在 WshNamed 物件。

object.Exists(key)

參數

object
WshNamed 物件。
Key
為字串值，指出 WshNamed 物件的引數。

附註

Exists 方法傳回布林值。若要求的引數指定於命令列，則傳回 true (否則，傳回 false)。

範例

請將下列資訊視為在命令列中鍵入。

myScript.vbs /c:"WSH is a wonderful thing"

您可以使用這兩行 JScript 程式碼，查看下列命令列參數是否用來啟動指令碼。

WScript.Echo(WScript.Arguments.Named.Exists("C"));
WScript.Echo(WScript.Arguments.Named.Exists("D"));

請參閱

Arguments 屬性 | WshNamed 物件 | WshUnnamed 物件 | Count 方法 | Item 屬性


ExpandEnvironmentStrings 方法

傳回環境變數的展開值。

object.ExpandEnvironmentStrings(strString)

引數

object
WshShell 物件。
strString
為字串值，指出要展開的環境變數的名稱。

附註

ExpandEnvironmentStrings 方法只會展開定義於 PROCESS 環境空間的環境變數。必須以 % 字元來含括的環境變數是不區分大小寫的。

範例

下列程式碼展開 Windows 目錄環境變數並將它顯示：

[VBScript]
set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "WinDir is " & WshShell.ExpandEnvironmentStrings("%WinDir%")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
WScript.Echo("WinDir is " + WshShell.ExpandEnvironmentStrings("%WinDir%"));

請參閱

WshShell 物件


GetObject 方法

以指定的 ProgID 來擷取現有的物件，或從檔案建立新的物件。

object.GetObject(strPathname [,strProgID], [strPrefix])

引數

object
WScript 物件。
strPathname
包含磁碟永久物件的檔案之完整路徑名稱。
strProgID
選擇項。物件的程式識別碼 (ProgID)。
strPrefix
選擇項。使用於要同步化物件的事件時。如果您提供 strPrefix 引數，則在建立物件之後，WSH 會將物件的輸出介面連接到指令碼檔案。

附註

當物件的執行個體存在記憶體，或當您要從檔案建立物件時，請使用 GetObject 方法。如果目前不存在執行個體，而且您不想從檔案建立物件，請使用 CreateObject 方法。GetObject 方法可使用所有 COM 類別，而與用來建立物件的語言無關。如果您提供 strPrefix 引數，則在建立物件之後，WSH 會將物件的輸出介面連接到指令碼檔案。當物件引發事件時，WSH 會以附加至事件名稱開頭的 strPrefix 來呼叫副程式。例如，如果 strPrefix 為 MYOBJ，且物件引發稱為 OnBegin 的事件，WSH 會呼叫指令碼上的 MYOBJ_OnBegin 副程式。

如果某個物件註冊為單一的執行個體物件，則只會建立物件的一個執行個體 (而不管執行幾次 GetObject)。使用零長度的字串語法 ("") 來呼叫時，GetObject 方法一律傳回相同的執行個體，且如果您未提供路徑參數，它會造成錯誤。您無法使用 GetObject 方法以取得使用 Visual Basic 4.0 或更早版本所建立的 Microsoft Visual Basic 類別的參考。

範例

下列 VBScript 程式碼啟動與指定檔案相關的應用程式 (strPathname)：

Dim MyObject As Object
Set MyObject = GetObject("C:\CAD\SCHEMA.CAD")
MyApp = MyObject.Application

部份應用程式可讓您啟動一個檔案的部份。若要這麼作，請將驚嘆號 (!) 加入檔名的結尾，並在其後接著字串來識別您要啟動的檔案部份。例如，在繪圖應用程式中，儲存在某個檔案的繪圖可能有多個圖層。下列程式碼會啟動稱為 SCHEMA.CAD 的繪圖檔的某個圖層：

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

如果您未指定物件的類別 (strProgID)，COM 會決定從檔名啟動的應用程式。部份檔案可支援一個以上的物件類別。例如，一個繪圖可能支援三種不同型別的物件： 即應用程式物件、繪圖物件及工具列物件。所有物件可能都是同一個檔案的部份。

在下列 VBScript 程式碼中，繪圖應用程式 FIGMENT 從 SAMPLE.DRW 檔中啟動和開啟物件 DRAWING。

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

請參閱

WScript 物件 | CreateObject 方法 | DisconnectObject 方法


getResource 方法

傳回以 <resource> 項目所定義的資源值。

getResource(resourceID)

引數

resourceID
為字串，其唯一識別一個 *.WSF 指令碼檔案的一組資源標籤所包含的資源資訊。

附註

getResource 方法傳回字串。請使用 <resource> 項目來隔離 .wsf 檔中您要參照的字串或數值。此功能可輕鬆地維護已區域化為多種語言的一組字串。一個 WSH 指令碼檔案 (*.wsf) 可包含多種不同的資源資訊片段 — 每一種都有唯一的資源識別碼。

範例

下列 WSH 指令碼定義稱為 errNonNumeric 的資源。如果參數 upperBound 不是數值，則會顯示 errNonNumeric 的值。

<package>
<job id="JS">
<resource id="errNonNumeric">Error: A non-numeric value was entered where a number was expected.</resource>
<script language="JScript">

function getRandomNumber(upperBound)
{
   var realUpperBound = parseInt(upperBound);
   if (!isNaN(realUpperBound))
      return (realUpperBound * Math.random) + 1
   else
   {
      WScript.Echo(getResource("errNonNumeric"));
      WScript.Quit(-1);
   }
}

NewValue = getRandomNumber("Bad Value");

</script>
</job>

<job id="VBS">
<resource id="errNonNumeric">Error: A non-numeric value was entered where a number was expected.</resource>
<script language="VBScript">

Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = CInt(upperBound * Rnd + 1)
   Else
      WScript.Echo getResource("errNonNumeric")
      WScript.Quit -1
   End If
End Function

NewValue = getRandomNumber("Bad Value")

</script>
</job>
</package>

請參閱

<resource> 項目


LogEvent 方法

將事件項目加入記錄檔。

object.LogEvent(intType, strMessage [,strTarget])

引數

object
WshShell 物件。
intType
為整數值，其代表事件型別。
strMessage
為字串值，其包含紀錄項目文字。
strTarget
選擇項。為字串值，指出儲存事件紀錄的電腦系統名稱 (預設值是本機電腦系統)。僅適用 Windows NT/2000。

附註

LogEvent 方法傳回布林值 (若成功記錄事件，則為 true，否則為 false)。在 Windows NT/2000，事件是記錄在 Windows NT Event Log 中。在 Windows 9x/Me，事件是記錄在 WSH.log (位於 Windows 目錄)。有六種事件型別。

型別 | 值
0 | SUCCESS
1 | ERROR
2 | WARNING
4 | INFORMATION
8 | AUDIT_SUCCESS
16 | AUDIT_FAILURE

範例

下列程式碼會依函式 runLoginScript() 的結果來記錄 SUCCESS 或 ERROR。

[VBScript]
Set WshShell = WScript.CreateObject("WScript.Shell")
rc = runLoginScript()      'Returns true if logon succeeds.

if rc then
   WshShell.LogEvent 0, "Logon Script Completed Successfully"
else
   WshShell.LogEvent 1, "Logon Script failed"
end if
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var rc = runLoginScript();

if (rc)
   WshShell.LogEvent(0, "Logon Script Completed Successfully");
else
   WshShell.LogEvent(1, "Logon Script failed");

請參閱

WshShell 物件


MapNetworkDrive 方法

將共用網路磁碟機加入您的電腦系統。

object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword])

引數

object
WshNetwork 物件。
strLocalName
為字串值，指出本機對映磁碟機的識別名稱。
strRemoteName
為字串值，指出共用的 UNC 名稱 (\\xxx\yyy)。
bUpdateProfile
選擇項。為布林值，指出對映資訊是否儲存於目前的使用者設定檔。如果提供了 bUpdateProfile 且其值為 true，則此對映是儲存於使用者設定檔 (預設值是 false)。
strUser
選擇項。為字串值，指出使用者名稱。如果您使用現行使用者以外的人員之認證來對映網路磁碟機，則您必須提供此引數。
strPassword
選擇項。為字串值，指出使用者密碼。如果您使用現行使用者以外的人員之認證來對映網路磁碟機，則您必須提供此引數。

附註

嘗試對映非共用的網路磁碟機而發生錯誤。

範例

下列 JScript 程式碼使用 UNC 名稱 "\\Server\Public"，將邏輯磁碟機 "E" 對映至網路共用。

[VBScript]
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "E:", "\\Server\Public"
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.MapNetworkDrive ("E:", "\\\\Server\\Public");

請參閱

WshNetwork 物件 | EnumNetworkDrives 方法 | RemoveNetworkDrive 方法


Popup 方法

顯示快顯訊息方塊中的文字。

intButton = object.Popup(strText,[nSecondsToWait],[strTitle],[nType])

引數

object
WshShell 物件。
strText
為字串值，其包含要在快顯訊息方塊中出現的文字。
nSecondsToWait
選擇項。為數值，指出快顯訊息方塊的最長顯示時間 (以秒計)。
strTitle
選擇項。為字串值，其包含要顯示為快顯訊息方塊的標題的文字。
nType
選擇項。為數值，指出快顯訊息方塊中所要的按鈕和圖示型別。這些型別將決定訊息方塊的使用方式。
IntButton
為指出按鈕編號的整數值，使用者可按一下該按鈕以解除訊息方塊。這是 Popup 方法所傳回的值。

附註

Popup 方法會顯示訊息方塊，而不管執行中的主機可執行檔為何 (WScript.exe 或 CScript.exe)。如果 nSecondsToWaitis 等於零 (預設值)，則快顯訊息方塊會保持可見，直到使用者關閉為止。如果 nSecondsToWaitis 大於零，則快顯訊息方塊會在 nSecondsToWait 秒後關閉。如果您未提供引數 strTitle，則快顯訊息方塊的標題預設為「Windows Script Host」。nType 的意義與 Microsoft Win32® 應用程式設計介面 MessageBox 函數中的相同。下表顯示值及其意義。您可以結合這些表格中的值。

備註 若要以 RTL 語言 (如「希伯來文」或「阿拉伯文」) 來正確地顯示文字，請將十六進位 &h00100000 (十進位 1048576) 加入 nType 參數。

按鈕型別

值 | 描述
0 | 顯示 [確定] 按鈕。
1 | 顯示 [確定] 和 [取消] 按鈕。
2 | 顯示 [中止]、[重試] 和 [忽略] 按鈕。
3 | 顯示 [是]、[否] 和 [取消] 按鈕。
4 | 顯示 [是] 和 [否] 按鈕。
5 | 顯示 [重試] 和 [取消] 按鈕。

圖示型別

值 | 描述
16 | 顯示 [停止標記] 圖示。
32 | 顯示 [問號] 圖示。
48 | 顯示 [驚嘆號] 圖示。
64 | 顯示 [資訊標記] 圖示。

前兩個表格未涵蓋 nType 的所有值。如需完整清單，請參閱 Microsoft Win32 文件。

傳回值 intButton 代表使用者所按的按鈕的編號。如果使用者未在 nSecondsToWait 秒之前按一下按鈕，intButton 即設為 –1。

值 | 描述
1 | [確定] 按鈕
2 | [取消] 按鈕
3 | [中止] 按鈕
4 | [重試] 按鈕
5 | [忽略] 按鈕
6 | [是] 按鈕
7 | [否] 按鈕

範例

下列程式碼產生簡單的快顯視窗。

[VBScript]
Dim WshShell, BtnCode
Set WshShell = WScript.CreateObject("WScript.Shell")

BtnCode = WshShell.Popup("Do you feel alright?", 7, "Answer This Question:", 4 + 32)

Select Case BtnCode
   case 6      WScript.Echo "Glad to hear you feel alright."
   case 7      WScript.Echo "Hope you're feeling better soon."
   case -1     WScript.Echo "Is there anybody out there?"
End Select
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var BtnCode = WshShell.Popup("Do you feel alright?", 7, "Answer This Question:", 4 + 32);
switch(BtnCode) {
   case 6:
      WScript.Echo("Glad to hear you feel alright.");
      break;
   case 7:
      WScript.Echo("Hope you're feeling better soon.");
      break;
   case -1:
      WScript.Echo("Is there anybody out there?");
      break;
}

請參閱

WshShell 物件 | Echo 方法


Quit 方法

強制指令碼執行隨時停止。

object.Quit([intErrorCode])

引數

object
WScript 物件。
intErrorCode
選擇項。為傳回的整數值，作為處理序的結束代碼。如果您未包括 intErrorCode 參數，將不會傳回值。

附註

Quit 方法可傳回選擇項的錯誤代碼。如果 Quit 方法是指令碼的最後一個指令 (而且您不需傳回非零值)，您便可以忽略它，且指令碼將正常結束。

範例

下列 JScript 程式碼片段結束執行，並傳回錯誤碼 1：

WScript.Quit (1);

// 這行程式碼永遠不會執行。
var i = 0;

請參閱

WScript 物件


Read 方法 (Windows Script Host)

Windows Script Host

Read 方法

從輸入資料流傳回指定的字元數。

object.Read(characters)

引數

object
StdIn 文字資料流物件。
characters
為整數值，指出要讀取的字元數。

附註

Read 方法傳回字串。StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時將傳回錯誤。將從目前的指標位置開始讀取，且一次往前移動一個字元。

Read 方法不會傳回，直到按下 enter 鍵為止。只會傳回要求的字元數。其他任何字元將在後續呼叫 Read、ReadLine 或 ReadAll 方法時傳回。

範例

下列程式碼使用 Read，從鍵盤取得一個字元，並將它顯示在主控台上。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfLine
   Input = Input & WScript.StdIn.Read(1)
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfLine)
{
   input += WScript.StdIn.Read(1);
}
WScript.Echo(input);

請參閱

StdIn 屬性 (WScript)


ReadAll 方法 (Windows Script Host)

Windows Script Host

ReadAll 方法

從輸入資料流傳回所有字元。

object.ReadAll

引數

object
StdIn 文字資料流物件。

附註

ReadAll 方法傳回字串。StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時將傳回錯誤。

範例

下列程式碼示範 ReadAl 的用法。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfStream
   Input = Input & WScript.StdIn.ReadAll
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfStream)
{
   input += WScript.StdIn.ReadAll();
}
WScript.Echo(input);

請參閱

StdIn 屬性 | FileSystemObject 物件


ReadLine 方法 (Windows Script Host)

Windows Script Host

ReadLine 方法

從輸入資料流傳回整行。

object.ReadLine

引數

object
StdIn 文字資料流物件。

附註

ReadLine 方法傳回字串。StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時將傳回錯誤。一行是尾端加上一個換行字元的一串字元。

備註 雖然此方法擷取換行字元，但不會將它加入字串。

範例

下列程式碼示範 ReadLine 方法的用法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.WriteLine "Line " & (StdIn.Line - 1) & ": " & str
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

請參閱

StdIn 屬性 | FileSystemObject 物件


RegDelete 方法

從註冊刪除某鍵或它的一個值。

object.RegDelete(strName)

引數

object
WshShell 物件。
strName
為字串值，指出要刪除的註冊鍵的名稱或鍵值。

附註

藉由在 strName 尾端加上一條反斜線以指定鍵名稱；中斷它以指定值名稱。完整的鍵名稱和值名稱是以一個根鍵開頭。您可以利用 RegDelete 方法來使用根鍵名稱的縮寫版本。這五個您能使用的可能根鍵列示於下表。

根鍵名稱 | 縮寫
HKEY_CURRENT_USER | HKCU
HKEY_LOCAL_MACHINE | HKLM
HKEY_CLASSES_ROOT | HKCR
HKEY_USERS | HKEY_USERS
HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG

範例

下列程式碼建立一個鍵和兩個值、讀取它們，及刪除它們。

[VBScript]
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");

WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");

var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));

WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");

請參閱

WshShell 物件 | RegRead 方法 | RegWrite 方法


RegRead 方法

從註冊傳回鍵的值或值名稱。

object.RegRead(strName)

引數

object
WshShell 物件。
strName
為字串值，指出所要的值所屬的鍵或值名稱。

備註

RegRead 方法傳回下列五種型別的值。

型別 | 描述 | 型式
REG_SZ | 字串 | 字串
REG_DWORD | 數值 | 整數
REG_BINARY | 兩進位值 | 整數的 VBArray
REG_EXPAND_SZ | 可展開的字串 (例如， "%windir%\\calc.exe") | 字串
REG_MULTI_SZ | 字串陣列 | 字串的 VBArray

藉由在 strName 尾端加上一條反斜線可指定鍵名稱。請勿在最後加上反斜線指定值名稱。一個值項目有三個部份： 其名稱、其資料型別及其值。當您指定鍵名稱 (相對於值名稱)，RegRead 會傳回預設值。若要讀取鍵的預設值，請指定鍵本身的名稱。完整的鍵名稱和值名稱是以一個根鍵開頭。您可以利用 RegRead 方法來使用根鍵名稱的縮寫版本。這五個可能根鍵列示於下表。

根鍵名稱 | 縮寫
HKEY_CURRENT_USER | HKCU
HKEY_LOCAL_MACHINE | HKLM
HKEY_CLASSES_ROOT | HKCR
HKEY_USERS | HKEY_USERS
HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG

範例

下列程式碼建立一個鍵和兩個值、讀取它們，及刪除它們。

[VBScript]
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
[JScript]
var WshShell = WScript.CreateObject ("WScript.Shell");

WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");

var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));

WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");

請參閱

WshShell 物件 | RegDelete 方法 | RegWrite 方法


RegWrite 方法

建立新鍵、將另一個值名稱加入現有鍵 (並將值指派給它)，或變更現有值名稱的值。

object.RegWrite(strName, anyValue [,strType])

引數

object
WshShell 物件。
strName
為字串值，指出鍵名稱、值名稱，或者要建立、加入或變更的值。
anyValue
您要建立的新鍵名稱、要加入現有鍵的值名稱，或要指派給現有值名稱的新值。
strType
選擇項。為字串值，指出值的資料型別。

備註

在 strName 尾端加上一條反斜線以指定鍵名稱。請勿在最後加上反斜線以指定值名稱。RegWrite 方法會自動將參數 anyValue 轉換為字串或整數。strType 會決定其資料型別 (字串或整數)。strType 的選項列示於下表。

轉換為 | StrType
字串 | REG_SZ
字串 | REG_EXPAND_SZ
整數 | REG_DWORD
整數 | REG_BINARY
備註 RegWrite 方法不支援 REG_MULTI_SZ 型別。
秘訣 RegWrite 將會寫入最多一個 DWORD 到 REG_BINARY 值。此方法並不支援較大的數值。

完整的鍵名稱和值名稱是以一個根鍵開頭。您可以利用 RegWrite 方法來使用根鍵名稱的縮寫版本。這五個根鍵列示於下表。

根鍵名稱 | 縮寫
HKEY_CURRENT_USER | HKCU
HKEY_LOCAL_MACHINE | HKLM
HKEY_CLASSES_ROOT | HKCR
HKEY_USERS | HKEY_USERS
HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG

您可以使用 strType 來指定的四種可能的資料型別列示於下表。

型別 | 描述 | 型式
REG_SZ | 字串 | 字串
REG_DWORD | 數值 | 整數
REG_BINARY | 兩進位值 | 整數
REG_EXPAND_SZ | 可展開的字串 (例如， "%windir%\\calc.exe") | 字串

範例

下列程式碼建立一個鍵和兩個值、讀取它們，及刪除它們。

[VBScript]
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");

WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");

var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));

WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");

請參閱

WshShell 物件 | RegDelete 方法 | RegRead 方法


Remove 方法 (Windows Script Host)

Windows Script Host

Remove 方法

移除現有的環境變數。

object.Remove(strName)

引數

object
WshEnvironment 物件。
strName
為字串值，指出要移除的環境變數的名稱。

附註

Remove 方法會從下列的環境型別移除環境變數： PROCESS、USER、SYSTEM 和 VOLATILE。使用 Remove 方法所移除的環境變數不會永久地移除；它們只會針對現行的工作階段移除。

範例

下列程式碼移除 Process 環境變數 TestVar。

[VBScript]
Dim WshShell, WshEnv
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment("PROCESS")
WshEnv("TestVar") = "Windows Script Host"
WScript.Echo WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'")
WshEnv.Remove "TestVar"
WScript.Echo WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var WshEnv = WshShell.Environment("PROCESS");
WshEnv("TestVar") = "Windows Script Host";
WScript.Echo(WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'"));
WshEnv.Remove("TestVar");
WScript.Echo(WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'"));

請參閱

WshEnvironment 物件 | Environment 屬性


RemoveNetworkDrive 方法

從電腦系統移除共用的網路磁碟機。

object.RemoveNetworkDrive(strName, [bForce], [bUpdateProfile])

引數

object
WshNetwork 物件。
strName
為字串值，指出要移除的對映磁碟機的名稱。根據磁碟機的對映方式，strName 參數可為本機名稱或遠端名稱。
bForce
選擇項。為布林值，指出是否強制移除對映磁碟機。如果提供了 bForce 且其值為 true，則此方法會移除連接，而不管是否使用資源。
bUpdateProfile
選擇項。為字串值，指出是否從使用者的設定檔移除對映。如果提供了 bUpdateProfile 且其值為 true，則會從使用者設定檔移除此對映。bUpdateProfile 預設為 false。

附註

如果磁碟機在本機名稱 (磁碟機代號) 和遠端名稱 (UNC name) 之間擁有對映，則 strName 必須設為本機名稱。如果網路路徑沒有本機名稱 (磁碟機代號) 對映，則 strName 必須設為遠端名稱。

範例

下列程式碼移除邏輯磁碟機 "E"。

[VBScript]
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemoveNetworkDrive "E:"
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.RemoveNetworkDrive ("E:");

請參閱

WshNetwork 物件 | EnumNetworkDrives 方法 | MapNetworkDrive 方法


RemovePrinterConnection 方法

從電腦系統移除共用網路印表機連線。

object.RemovePrinterConnection(strName, [bForce], [bUpdateProfile])

引數

object
WshNetwork 物件。
strName
為字串值，指出用來識別印表機的名稱。它可為 UNC 名稱 (型式為 \\xxx\yyy) 或本機名稱 (如 LPT1)。
bForce
選擇項。為布林值，指出是否強制移除對映印表機。如果設為 true (預設值是 false)，則不論印表機是否連接使用者，都會移除該印表機連接。
bUpdateProfile
選擇項。布林值。如果設為 true (預設值為 false)，此變更會儲存在使用者的設定檔中。

附註

RemovePrinterConnection 方法會移除 Windows 和 MS-DOS 架構的印表機連線。如果印表機已使用方法 AddPrinterConnection 連接，則 strName 必須是印表機的本機名稱。如果印表機已使用 AddWindowsPrinterConnection 方法連接或已手動加入 (使用 [加入印表機] 精靈)，則 strName 必須是印表機的 UNC 名稱。

範例

下列程式碼中斷連接網路印表機。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
WshNetwork.RemovePrinterConnection PrinterPath, true, true
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\PRN-CORP1\\B41-4523-A";
WshNetwork.RemovePrinterConnection(PrinterPath, true, true);

請參閱

WshNetwork 物件 | AddPrinterConnection 方法 | AddWindowsPrinterConnection 方法 | EnumPrinterConnections 方法 | SetDefaultPrinter 方法


Run 方法

執行新處理程序的程式。

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

引數

object
WshShell 物件。
strCommand
為字串值，指出要執行的命令列。您必須併入任何想要的參數，以便將這些參數傳給可執行檔。
intWindowStyle
選擇項。為整數值，指出程式的視窗外觀。請注意：並非所有程式都可以使用此資訊。
bWaitOnReturn
選擇項。為布林值，指出指令碼是否必須等待程式執行完畢，才繼續您指令碼的下一個陳述式。如果設為 true，指令碼在程式完成之前將停止執行，而且 Run 會傳回程式所傳回的任何錯誤碼。如果設為 false (預設值)，Run 方法會在啟動程式之後立即傳回，即自動傳回 0 (而不會解譯為錯誤碼)。

附註

Run 方法傳回整數。Run 方法會啟動新的 Windows 處理序上所執行的程式。您可以讓指令碼等到程式執行完畢再繼續執行。這可讓您同步執行指令碼和程式。引數 strCommand 內部的環境變數會自動展開。如果檔案型別已正確地註冊至特定的程式，則呼叫執行該類檔案會執行該程式。例如，若 Word 已安裝在電腦系統上，則在 *.doc 檔上呼叫 Run 即會啟動 Word 並載入文件。下表列出 intWindowStyle 的可用設定。

intWindowStyle | 說明
0 | 隱藏視窗及啟動另一個視窗。
1 | 啟動及顯示視窗。如果視窗已最小化或最大化，則系統會將它還原成原來的大小和位置。第一次顯示視窗時，應用程式應該指定此旗標。
2 | 啟動視窗並將它顯示為最小化視窗。
3 | 啟動視窗並將它顯示為最大化視窗。
4 | 以視窗最近的大小和位置來顯示視窗。作用中的視窗仍維持作用中。
5 | 啟動視窗並以視窗目前的大小和位置來顯示它。
6 | 最小化指定的視窗，並以 Z 順序來啟動下一個頂層視窗。
7 | 將視窗顯示為最小視窗。作用中的視窗仍維持作用中。
8 | 以視窗目前的狀態來顯示視窗。作用中的視窗仍維持作用中。
9 | 啟動及顯示視窗。如果視窗已最小化或最大化，則系統會將它還原成原來的大小和位置。還原最小化的視窗時，應用程式應該指定此旗標。
10 | 依已啟動的應用程式的程式狀態來設定顯示狀態。

範例 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:\，及執行 DIR 命令。

Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run "cmd /K CD C:\ & Dir"
Set oShell = Nothing

請參閱

WshShell 物件


Save 方法

將捷徑物件存入磁碟。

object.Save

引數

object
WshShortcut 或 WshUrlShortcut 物件。

附註

使用 CreateShortcut 方法以建立 shortcut 物件及設定 shortcut 物件的屬性之後，必須使用 Save 方法，將 shortcut 物件存入磁碟。Save 方法使用 shortcut 物件的 FullName 屬性中的資訊，以決定將 shortcut 物件存入磁碟的哪個位置。您只能建立系統物件的捷徑。這包括檔案、目錄和磁碟機 (但不包括印表機連結或排程工作)。

範例

下列範例示範以不同的指令碼語言 (VBScript 和 JScript)，針對兩個工作來使用單一的 .wsf 檔。每一個工作針對執行中的指令碼建立一個捷徑，及針對 www.microsoft.com 建立一個 URLshortcut。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com";
         oUrlLink.Save();
      </script>
   </job>
</package>

請參閱

執行您的 Script | WshShortcut 物件 | WshUrlShortcut 物件 | FullName 屬性 | TargetPath 屬性 | WindowStyle 屬性 | Hotkey 屬性 | IconLocation 屬性 | Description 屬性 | WorkingDirectory 屬性


SendKeys 方法

將一或多個按鍵傳到作用中視窗 (如同在鍵盤鍵入一般)。

object.SendKeys(string)

引數

object
WshShell 物件。
string
為字串值，指出要傳送的按鍵。

附註

使用 SendKeys 方法，將按鍵傳到沒有自動化介面的應用程式。大部份鍵盤字元以單一按鍵表示。部份鍵盤字元由一組按鍵組成 (例如，CTRL+SHIFT+HOME)。若要傳送單一份鍵盤字元，請將字元本身作為 string 引數傳送。例如，若要傳送字母 x，請傳送 string 引數 "x"。

附註 若要傳送一個空格，請傳送字串 " "。

您可以使用 SendKeys，一次傳送一個以上的按鍵。若要這麼作，請循序附加每個按鍵，以建立複合字串引數來代表一串按鍵。例如，若要傳送按鍵 a、b 和 c，您可以傳送字串引數 "abc"。SendKeys 方法會使用部份字元來作為字元的修飾詞 (而非使用其表面上的值)。這組特殊字元有小括號、中括號、大括號和：

  • 加號 "+"、
  • 插入符號 "^"、
  • 百分比符號 "%"、
  • 及波狀符號 "~"

使用大括號 "{}" 括住這些字元以傳送它們。例如，若要傳送加號，請傳送字串引數 "{+}"。與 SendKeys 合用時，中括號 "[ ]" 並無特殊意義，但您必須將它們以大括號含括以容納可給予其特殊意義的應用程式 (例如，針對動態資料交換 (DDE))。

  • 若要傳送中括號字元，請針對左中括號傳送字串引數 "{[}"，並針對右中括號傳送字串引數 "{]}"。
  • 若要傳送大括號字元，請針對左大括號傳送字串引數 "{{}"，並針對右大括號傳送字串引數 "{}}"。

部份按鍵不會產生字元 (如 ENTER 和 TAB)。部份按鍵代表動作 (如 BACKSPACE 和 BREAK)。若要傳送這些種類的按鍵，請傳送下表所顯示的引數：

鍵 | 引數
BACKSPACE | {BACKSPACE}、{BS} 或 {BKSP}
BREAK | {BREAK}
CAPS LOCK | {CAPSLOCK}
DEL 或 DELETE | {DELETE} 或 {DEL}
向下鍵 | {DOWN}
END | {END}
ENTER | {ENTER} 或 ~
ESC | {ESC}
HELP | {HELP}
HOME | {HOME}
INS 或 INSERT | {INSERT} 或 {INS}
向左鍵 | {LEFT}
NUM LOCK | {NUMLOCK}
PAGE DOWN | {PGDN}
PAGE UP | {PGUP}
PRINT SCREEN | {PRTSC}
向右鍵 | {RIGHT}
SCROLL LOCK | {SCROLLLOCK}
TAB | {TAB}
向上鍵 | {UP}
F1 | {F1}
F2 | {F2}
F3 | {F3}
F4 | {F4}
F5 | {F5}
F6 | {F6}
F7 | {F7}
F8 | {F8}
F9 | {F9}
F10 | {F10}
F11 | {F11}
F12 | {F12}
F13 | {F13}
F14 | {F14}
F15 | {F15}
F16 | {F16}

若要傳送由一般按鍵的鍵盤字元與 SHIFT、CTRL 或 ALT 的組合，請建立複合字串引數以代表按鍵組合。您可以在一般按鍵之前加上一個或多個下列特殊字元以完成這項作業：

按鍵 | 特殊字元
SHIFT | +
CTRL | ^
ALT | %
備註 使用此方法時，這些特殊字元不會以一組大括號括住。

若要指定在按下其他多個鍵時，必須同時按住一組 SHIFT、CTRL 和 ALT，請以小括號括住修改的按鍵以建立複合字串引數。例如，若要傳送按鍵組合，以指定執行下列動作時必須按住 SHIFT 鍵：

  • 按下 e 和 c，請傳送字串引數 "+(ec)"。
  • 按下 e，後面接著一個 c (無 SHIFT)，請傳送字串引數 "+ec"。

您可以使用 SendKeys 方法來傳送一種按鍵模式，其包含在一列中按下單一按鍵多次。若要這麼作，請建立複合字串引數以指定要重複的按鍵，後面接著要重複的次數。您可以使用形式為 {keystroke number} 的複合字串引數來完成這項作業。例如，若要傳送字母 "x" 十次，您可以傳送字串引數 "{x 10}"。請確定在按鍵和數字之間加上一個空格。

備註 您可以傳送的唯一按鍵模式是這種按下單一按鍵多次的模式。例如，您可以傳送 "x" 十次，但您無法對 "Ctrl+x" 執行相同的作業。
備註 您無法將 PRINT SCREEN 鍵 {PRTSC} 傳到應用程式。

範例

下列範例示範以不同的指令碼語言 (VBScript 和 JScript)，針對兩個工作來使用單一的 .wsf 檔。每個工作執行 Windows 計算機，及傳給它按鍵以執行簡單的計算。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         WshShell.Run "calc"
         WScript.Sleep 100
         WshShell.AppActivate "Calculator"
         WScript.Sleep 100
         WshShell.SendKeys "1{+}"
         WScript.Sleep 500
         WshShell.SendKeys "2"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 500
         WshShell.SendKeys "*3"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 2500
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         WshShell.Run("calc");
         WScript.Sleep(100);
         WshShell.AppActivate("Calculator");
         WScript.Sleep(100);
         WshShell.SendKeys ("1{+}");
         WScript.Sleep(500);
         WshShell.SendKeys("2");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(500);
         WshShell.SendKeys("*3");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(2500);
      </script>
   </job>
</package>

請參閱

WshShell 物件 | Run 方法


SetDefaultPrinter 方法

將遠端印表機指派為預設印表機。

object.SetDefaultPrinter(strPrinterName)

引數

object
WshNetwork 物件。
strPrinterName
為字串值，指出遠端印表機的 UNC 名稱。

附註

使用 DOS 架構的印表機連接時，SetDefaultPrinter 方法會失敗。您無法使用 SetDefaultPrinter 方法來決定目前預設印表機的名稱。

範例

下列程式碼使用 AddWindowsPrinterConnection 方法以連接網路印表機，並將其設為預設印表機。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\research\library1"
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\research\\library1";
WshNetwork.AddWindowsPrinterConnection(PrinterPath);
WshNetwork.SetDefaultPrinter(PrinterPath);

請參閱

WshNetwork 物件 | AddPrinterConnection 方法 | AddWindowsPrinterConnection 方法 | EnumPrinterConnections 方法 | RemovePrinterConnection 方法


ShowUsage 方法

藉由顯示指令碼使用方式的相關資訊，製作指令碼的自我記錄。

object.ShowUsage

參數

object
WScript 物件。

附註

當您執行 ShowUsage 方法時，會出現說明螢幕 (參照到用法) 及顯示指令碼的命令列選項的詳細資訊。此資訊來自 *.WSF 檔的執行階段區段。<runtime> 和 </runtime> 標籤之間所撰寫的任何內容都會組織起來，產生所謂的「用法陳述式」。用法陳述式可指引使用者如何使用指令碼。

備註 使用 /? 參數也可以顯示用法。

範例

下列範例示範如何在 *.WSF 指令碼檔案中設定用法資訊。

<job>
    <runtime>
        <description>This script reboots a server</description>
        <named
            name = "Server"
            helpstring = "Server to run the script on"
            type = "string"
            required = "true"
        />
        <example>Example: reboot.wsf /Server:scripting</example>
    </runtime>
</job>

從此指令碼呼叫 ShowUsage 方法將產生下列輸出：

This script reboots a server
Usage: reboot.wsf /server:value

Options:
server : Server to run the script on

範例:
reboot.wsf /server:scripting

請參閱

WScript 物件


Sign 方法

簽署儲存於字串的指令碼。

Object.Sign (FileExtension, Text, Certificate, Store)

引數

object
Scripting.Signer
FileExtension
為指定指令碼副檔名類型 (.vbs、.js 或 .wsf) 的字串。這提供一個機制，可讓作業系統用來判斷驗證中的指令碼檔案類型。
Text
包含要簽名的指令碼之字串。
Certificate
指定作者的認證名稱的字串。
Store
選擇項。用來指定認證儲存體名稱的字串。通常包含私用鍵的認證 (即可用於程式碼簽名的認證) 位於稱為 "my" 的認證儲存體。預設值是 "my"。

附註

Sign 方法是用來數位簽名儲存於字串的指令碼。為了建立數位簽名，呼叫者必須擁有有效的認證。

範例

Dim Signer, UnsignedText, SignedText
Set Signer = CreateObject("Scripting.Signer")
UnsignedText = _
     "Dim X " & vbCrLf & _
     "X = 123" & vbCrLf & _
     "WScript.Echo X" & vbCrLf
SignedText = Signer.Sign(".VBS", UnsignedText, "Your Certificate Name Here")

請參閱

Scripting.Signer 物件 | SignFile 方法 | Verify 方法 | VerifyFile方法 | 簽署 Script


SignFile 方法

使用數位簽名來簽署指令碼。

Object.SignFile (FileName, Certificate, Store)

引數

object
Scripting.Signer
FileName
包含指令碼檔案名稱的字串。
Certificate
指定作者的認證名稱的字串。
Store
選擇性的字串，用來指定認證儲存體的名稱。通常包含私用鍵的認證 (即可用於程式碼簽名的認證)，位於稱為 "my" 的認證儲存體。預設值是 "my"。

附註

為了簽署數位簽名，作者必須擁有有效的認證。

範例

下列範例同時展示了簽名檢查及命令列引數。

<job>
<runtime>
<named name="file" helpstring="the file to sign" required="true" type="string"/>
<named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
<named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="vbscript">
Dim Signer, File, Cert, Store
If Not (WScript.Arguments.Named.Exists("cert") And WScript.Arguments.Named.Exists("file")) Then
     WScript.Arguments.ShowUsage
     WScript.Quit
End If
Set Signer = CreateObject("Scripting.Signer")
File  = WScript.Arguments.Named("file")
Cert  = WScript.Arguments.Named("cert")
If WScript.Arguments.Named.Exists("store") Then
     Store = WScript.Arguments.Named("store")
Else
     Store = "my"
End If
Signer.SignFile File, Cert, Store
</script>
</job>

請參閱

Scripting.Signer 物件 | Sign 方法 | Verify 方法 | VerifyFile 方法 | 簽署 Script


Skip 方法 (Windows Script Host)

Windows Script Host

Skip 方法

從輸入文字資料流讀取時略過指定數目的字元。

object.Skip(characters)

引數

object
StdIn 文字資料流物件。
characters
為整數值，指出要略過的字元數。

附註

StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時傳回「無效處理」錯誤。位置指標依引數 characters 所指定的字元數 (位元組數) 向前移動。您無法使用 Skip 方法，在檔案中往回略過 (負字元值不支援)。Skip 方法只對唯讀模式開啟 (寫入輸出資料流時，您無法略過指定數量的字元)。

範例

下列程式碼使用 Skip 方法以跳過文字資料流的第一個字元、從鍵盤讀取一行，並將它寫入 StdOut 文字資料流。

[VBScript]
WScript.StdIn.Skip 1
Input = WScript.StdIn.ReadLine
WScript.StdOut.Write Input
[JScript]
WScript.StdIn.Skip(1);
Input = WScript.StdIn.ReadLine();
WScript.StdOut.Write(Input);

請參閱

StdIn 屬性


SkipLine 方法 (Windows Script Host)

Windows Script Host

SkipLine 方法

從輸入文字資料流讀取時略過下一行。

object.SkipLine

引數

object
StdIn 文字資料流物件。

附註

一行是以一個換行字元結尾的一串字元。StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時傳回「無效處理」錯誤。位置指標只會跳過下一個換行字元而向前移到該換行字元後的點。您無法使用 SkipLine 方法，在檔案中往回略過。SkipLine 方法只對唯讀模式開啟 (寫入輸出資料流時，您無法略過行)。

範例

下列程式碼示範 SkipLine 方法。

[VBScript]
Dim StdIn, StdOut, Str1, Str2

Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Str1 = ""
Str2 = ""

For i = 0 to 4
   StdIn.SkipLine
Next

i = 0
Do While Not StdIn.AtEndOfStream
     If i >= 2 Then
          StdOut.WriteLine Str1
     End If
     i = i + 1
     Str1 = Str2
     Str2 = StdIn.ReadLine
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;
var str1, str2 = "";
var i;
for (i = 0; i < 5; i++)
     stdin.SkipLine();
i = 0;
while (!stdin.AtEndOfStream)
{
     if (i++ >= 2)
     {
          stdout.WriteLine(str1);
     }
     str1 = str2;
     str2 = stdin.ReadLine();
}

請參閱

StdIn 屬性


Sleep 方法

在指定的一段時間暫停指令碼執行，然後繼續執行。

object.Sleep(intTime)

引數

object
WScript 物件。
intTime
為整數值，指出要指令碼處理序停用的間隔 (以毫秒計)。

附註

執行指令碼的執行緒已暫停，釋放其使用的 CPU。間隔過後便立即繼續執行。當您執行非同步的作業、多個處理序，或您的指令碼包括事件所觸發的程式碼時，則使用 Sleep 方法是很有用的。若要被事件觸發，指令碼必須持續作用中 (執行完畢的指令碼必定無法偵測事件)。指令碼所處理的事件仍然可以在休眠期間執行。

備註 傳給 Sleep 方法 0 或 –1 不會造成指令碼無限期地暫停。

範例

下列範例示範以不同的指令碼語言 (VBScript 和 JScript)，針對兩個工作來使用單一的 .wsf 檔。兩個工作的功能是相同的 — 每一個都執行 Windows 計算器，並傳給它按鍵以執行簡單的計算。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         WshShell.Run "calc"
         WScript.Sleep 100
         WshShell.AppActivate "Calculator"
         WScript.Sleep 100
         WshShell.SendKeys "1{+}"
         WScript.Sleep 500
         WshShell.SendKeys "2"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 500
         WshShell.SendKeys "*3"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 2500
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         WshShell.Run("calc");
         WScript.Sleep(100);
         WshShell.AppActivate("Calculator");
         WScript.Sleep(100);
         WshShell.SendKeys("1{+}");
         WScript.Sleep(500);
         WshShell.SendKeys("2");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(500);
         WshShell.SendKeys("*3");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(2500);
      </script>
   </job>
</package>

請參閱

執行您的 Script | WScript 物件


Terminate 方法 (WshScriptExec)

指示指令碼引擎結束 Exec 方法所啟動的處理序。

object.Terminate

引數

object
WshScriptExec 物件。

附註

Terminate 方法不會傳回值。請只將 Terminate 方法用作最後的必要動作，因為部份應用程式無法正確地清除。通常，請讓處理序執行它的內容並自己結束。Terminate 方法嘗試使用 WM_CLOSE 訊息來結束處理序。如果沒有作用，它會立即刪除處理序而不經由正常的關機程序。

範例

下列 JScript 範例示範如何使用 Terminate 方法以停止執行中的指令碼。

var aScript = WScript.Exec(""%comspec% /c myScript.js");
aScript.Terminate();

請參閱

WshScriptExec 物件


Verify 方法

驗證擷取為字串的數位簽名。

object.Verify (FileExtension, Text, ShowUI)

引數

object
Scripting.Signer
FileExtension
為指定指令碼副檔名類型 (.vbs、.js 或 .wsf) 的字串。這提供一個機制，可讓作業系統用來判斷驗證中的指令碼檔案類型。
Text
要驗證的文字。
ShowUI
為 Boolean 值。若 ShowUI 引數為 false，則 Scripting.Signer 物件會決定信任的來源是否提供簽名，而不會提示使用者。若為 true，則在無足夠資訊以判斷信任與否的情況下，Scripting.Signer 物件即可能建立對話方塊以提示使用者。
附註 在部份作業系統上，若旗標開啟、檔案已信任，而且您尚未選取「永遠信任 �」選項，則作業系統也會建立對話方塊。

附註

此 Verify 方法是用來驗證儲存於字串的數位簽名指令碼。

範例

在此範例中，Verify 方法會判斷 UnsignedText 變數中的這個指令碼是否已信任 (此範例並無數位簽名，所以 Scripting.Signer 物件會要求使用者是否擴充信任)。

Dim Signer, UnsignedText, Trusted
Set Signer = CreateObject("Scripting.Signer")
UnsignedText = _
     "Dim X " & vbCrLf & _
     "X = 123" & vbCrLf & _
     "WScript.Echo X" & vbCrLf
Trusted = Signer.Verify(".VBS", UnsignedText, True)

請參閱

Scripting.Signer 物件 | VerifyFile 方法 | Sign 方法 | SignFile 方法 | 驗證 Script


VerifyFile 方法

驗證封裝於指令碼的數位簽名。

Object.VerifyFile (FileName, ShowUI)

引數

object
Scripting.Signer
FileName
包含指令碼檔案名稱的字串。
ShowUI
為 Boolean 值。若 ShowUI 引數為 false，則 Scripting.Signer 物件會決定信任的來源是否提供簽名，而不會提示使用者。若為 true，則在無足夠資訊以判斷信任與否的情況下，Scripting.Signer 物件即可能建立對話方塊以提示使用者。
附註 在部份作業系統上，若旗標開啟、檔案已信任，而且您尚未選取「永遠信任 �」選項，則作業系統也會建立對話方塊。

範例

下列範例顯示使用命令列引數處理功能所作的簽名檢查。

<job>
<runtime>
<named name="file" helpstring="the file to sign" required="true" type="string"/>
<named name="UI" helpstring="produce user interface for untrusted scripts" required="false"/>
</runtime>
<script language="vbscript">
Dim Signer, File, UI, OK
If Not WScript.Arguments.Named.Exists("file") Then
     WScript.Arguments.ShowUsage
     WScript.Quit
End If
Set Signer = CreateObject("Scripting.Signer")
File = WScript.Arguments.Named("file")
UI   = WScript.Arguments.Named.Exists("ui")
OK = Signer.VerifyFile(File, UI)
If OK Then
     WScript.Echo File & " is trusted."
Else
     WScript.Echo File & " is NOT trusted."
End If
</script>
</job>

請參閱

Scripting.Signer 物件 | Verify 方法 | Sign 方法 | SignFile 方法 | 驗證 Script


Write 方法 (Windows Script Host)

Windows Script Host

Write 方法

將字串傳到輸出資料流。

object.Write(strText)

引數

object
StdOut 或 StdErr 文字資料流物件。
strText
為字串值，指出要寫入資料流的文字。

備註

StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時傳回「無效處理」錯誤。位置指標會移動到 strText 的最後一個字元下的點。

範例

下列程式碼示範 Write 的用法。

[VBScript]
Dim strInput
strInput = WScript.StdIn.ReadAll
WScript.StdOut.Write strInput
[JScript]
var strInput = WScript.StdIn.ReadAll();
WScript.StdOut.Write(strInput);

請參閱

StdErr 屬性 | StdOut 屬性


WriteBlankLines 方法 (Windows Script Host)

Windows Script Host

WriteBlankLines 方法

將指定數量的空白行 (換行字元) 傳送到輸出資料流。

object.WriteBlankLines(intLines)

引數

object
StdOut 或 StdErr 文字資料流物件。
intLines
為整數值，指出要寫入資料流的空白行數量。

附註

呼叫 WriteLine 方法而不提供 strText 引數的功能相當於呼叫 WriteBlankLines(1)。StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時傳回「無效處理」錯誤。

範例

下列程式碼示範 WriteBlankLines 方法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.Write "Line " & (StdIn.Line - 1) & ": " & str
     StdOut.WriteBlankLines 1
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.Write("Line " + (stdin.Line - 1) + ": " + str);
     stdout.WriteBlankLines(1);
}

請參閱

StdErr 屬性 | StdOut 屬性 | WriteLine 方法


WriteLine 方法 (Windows Script Host)

Windows Script Host

WriteLine 方法

以換行字元，將字串傳送至輸出資料流。

object.WriteLine([strText])

引數

object
StdOut 或 StdErr 文字資料流物件。
strText
選擇項。為字串值，指出要寫入資料流的文字。如果省略，會將換行字元寫入輸出資料流。

附註

WriteLine 方法必定將換行字元附加到字串。呼叫 WriteLine 方法而不提供 strText 引數的功能相當於呼叫 WriteBlankLines(1)。StdIn、StdOut 和 StdErr 屬性和方法只有在使用 CScript.exe 主機可執行檔來執行指令碼時才能運作。以 WScript.exe 執行時傳回「無效處理」錯誤。一行是以一個換行字元結尾的一串字元。

範例

下列程式碼示範 WriteLine 方法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.WriteLine "Line " & (StdIn.Line - 1) & ": " & str
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

請參閱

StdErr 屬性 | StdOut 屬性 | WriteBlankLines 方法


事件 (Windows Script Host)

Windows Script Host

事件

本節內容

End 事件
傳訊指令碼引擎以結束執行遠端 script 物件。
Error 事件
當遠端指令碼因錯誤而永久結束時，傳訊指令碼引擎以結束執行遠端 script 物件。
Start 事件
傳訊指令碼引擎以開始執行遠端 script 物件。

相關章節

WSH 語言
組成 WSH 參考的項目清單。
WSH 基本概念
學習 WSH 的基本知識。


End 事件

遠端指令碼完成時所引發的事件。

Object_end

參數

object
WshRemote 物件。

附註

當遠端 script 物件執行完畢時會引發 End 事件。當遠端 script 物件正常結束、逾時，或因錯誤結束時，也可能引發此事件。

範例

var WshController = new ActiveXObject("WSHController");
var RemoteProc = WshController.CreateScript("foo.wsf", "remotemachine");
WScript.ConnectObject(RemoteProc, "RemoteProc_");
var Done = false;
RemoteProc.Execute();
while (!Done)
   WScript.Sleep(100);

function RemoteProc_End()
{
   WScript.Echo("The process has ended");
   Done = true;
}

function RemoteProc_Error()
{
   WScript.Echo("An error has occurred: " + RemoteProc.Error.Description);
   Done = true;
}

function RemoteProc_Start()
{
   WScript.Echo("The process has started");
}

請參閱

WshController 物件 | WshRemote 物件 | Status 屬性 | Error 屬性 | Execute 方法 | Terminate 方法 | Start 事件 | Error 事件


Error 事件

遠端指令碼發生錯誤時所引發的事件。

Object_Error

參數

object
WshRemote 物件.

附註

當遠端指令碼提早結束時，遠端指令碼物件會引發 Error 事件。Error 屬性包含 WshRemoteError 物件 (其保留造成遠端指令碼提早結束的錯誤相關資訊)。

範例

var WshController = new ActiveXObject("WSHController");
var RemoteProc = WshController.CreateScript("foo.wsf", "remotemachine");
WScript.ConnectObject(RemoteProc, "RemoteProc_");
var Done = false;
RemoteProc.Execute();
while (!Done)
   WScript.Sleep(100);

function RemoteProc_End()
{
   WScript.Echo("The process has ended");
   Done = true;
}

function RemoteProc_Error()
{
   WScript.Echo("An error has occurred: " + RemoteProc.Error.Description);
   Done = true;
}

function RemoteProc_Start()
{
   WScript.Echo("The process has started");
}

請參閱

WshController 物件 | WshRemote 物件 | WshRemoteError 物件 | Status 屬性 | Error 屬性 | Execute 方法 | Terminate 方法 | Start 事件 | End 事件


Start 事件

當遠端指令碼開始執行時所引發的事件。

Object_Start

參數

object
WshRemote 物件.

備註

呼叫 Execute 方法時所引發的 Start 事件。

範例

var WshController = new ActiveXObject("WSHController");
var RemoteProc = WshController.CreateScript("foo.wsf", "remotemachine");
WScript.ConnectObject(RemoteProc, "RemoteProc_");
var Done = false;
RemoteProc.Execute();
while (!Done)
   WScript.Sleep(100);

function RemoteProc_End()
{
   WScript.Echo("The process has ended");
   Done = true;
}

function RemoteProc_Error()
{
   WScript.Echo("An error has occurred: " + RemoteProc.Error.Description);
   Done = true;
}

function RemoteProc_Start()
{
   WScript.Echo("The process has started");
}

請參閱

WshController 物件 | WshRemote 物件 | Status 屬性 | Error 屬性 | Execute 方法 | Terminate 方法 | End 事件 | Error 事件


錯誤訊息

本節內容

這裡是一份在執行 Windows Script Host 5.6 環境下的指令碼時，您可能會遇到的錯誤訊息的清單。

//E 選項需要 script 引擎名稱。

//H 選項需要主機名稱。

//T 選項需要逾時值。

遇到具名或未具名項目的重複名稱。

嘗試經由 //S 選項儲存設定時失敗。

無法變更預設的 script 主機 <主機名稱>。

找不到用於 script 的 script 引擎 <引擎名稱>。

找不到 script 檔 <script 檔案名稱>。

無法從 stdin 讀取 script。

無法儲存設定。

指令行選項不符。

無法連接物件 <物件名稱>。

無法找出自動類別名稱 <自動類別名稱>。

執行 Windows Script Host 失敗。

//H 選項的主機名稱必須為 "cscript" 或 "wscript"。

初始化 Windows Script Host 失敗。

嘗試呼叫沒有指令的 Exec 失敗。

路徑名稱無效。

用於讀取的註冊鍵 <name> 的根目錄無效。

URL<name> 的語法無效。

//T 選項的逾時值無效。

載入 script <script 名稱> 失敗。

載入您的設定失敗。

工作名稱遺失。

找不到 <name> 的通訊協定處理常式。

遠端 script 物件僅能執行一次。

Script 執行時間已經超過於 script <script 名稱>。<script名稱> 執行已經終止。

Script 設定檔 <設定檔名> 無效。

捷徑路徑名稱的結尾必須為 .lnk 或 .url。

<檔案名稱> 中沒有副檔名。

沒有印表機呼叫 <name>。

副檔名沒有 script 引擎 <副檔名>。

沒有指定 script 檔。

無法執行 – 引數清單太長。

無法開啟註冊鍵<name> 以便讀取。

無法移除環境變數 <name>。

無法移除註冊鍵 <name>。

無法儲存捷徑<name>。

無法設定捷徑目標為 <name>。

無法寫入 wsh.log。請與您的管理員連絡。

無法等候處理。

無法執行遠端 script.

找不到工作 <工作識別碼>。

此作業平台不支援 Unicode。

指定了未知的選項 <選項目的地>。

Windows Script Host 存取在此機器上已經停用。請連絡您的管理員以瞭解詳細資訊。

相關章節

WSH 參考
組成 WSH 參考的項目清單。
WSH 基礎
學習 WSH 的基本知識。


//H 選項需要主機名稱

指定預設主機名稱的動作失敗。

若要更正此錯誤

  • 請在使用 //H 選項時指定預設的主機名稱。

請參閱

//H 選項的主機名稱必須為 "cscript" 或 "wscript"。


//T 選項需要逾時值

Windows Script Host

//T 選項需要逾時值。

您無法在 //T 選項中輸入逾時值。

若要更正此錯誤

  • 使用 //T 選項輸入逾時值。

請參閱

//T 選項的逾時值無效 | Script 執行時間已經超過於 script <script 名稱>。<script名稱> 執行已經終止。


遇到具名或未具名項目的重複名稱

您嘗試使用另一個 <named> 或 unnamed> 項目正在使用的名稱來命名一個 <named> 或 <unnamed> 項目。<job> 內的所有 <named> 和 <unnamed> 項目的 「name」屬性必須是唯一的。

若要更正此錯誤

  • 為 <named> 或 <unnamed> 項目選擇不同的名稱。

請參閱

WshArguments 物件 | WshNamed 物件 | WshUnnamed 物件 | <named> 項目


嘗試經由 //S 選項儲存設定時失敗

同樣地，它通常可能是系統權限問題。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

無法變更預設的 script 主機 <主機名稱> | 設定 Script 屬性


無法執行 - 引數清單太長

Windows Script Host

無法執行 -引數清單太長

此錯誤通常發生於使用 Windows Script Host 的拖放功能時。這種錯誤發生於 Windows Script 檔案放置太多檔案時。

若要更正此錯誤

  • 藉由拖放較少的項目來縮短引數清單。
備註 您系統允許的命令列長度最大值決定您可拖放至指令碼的檔案數量。

請參閱

  • 拖放支援 | 指令行選項不符


無法寫入 wsh.log。請與您的管理員連絡

在 Windows 95/98 和 Windows Millennium 版本上，您正在呼叫方法 LogEvent()，但它因 wsh.log 檔已鎖定而失敗。

若要更正此錯誤

  • 解除鎖定 wsh.log 檔 (如果您有適當權限) 或洽詢您的系統管理員。

請參閱

LogEvent 方法


無法變更預設的 script 主機 <主機名稱>

它通常可能是系統權限問題，可能的原因則是系統登錄已經被管理員鎖定。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

嘗試經由 //S 選項儲存設定時失敗


找不到用於 script 的 script 引擎 <引擎名稱>

通常這個錯誤表示未安裝 script 引擎。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。
  • 確定已安裝特殊的 script 引擎，或確認您所指定的是正確的 script 引擎。
  • 檢查您的拼字。


找不到 script 檔 <script 檔案名稱>

您指定了不正確的路徑或 script 檔並不在該處。

若要更正此錯誤

  • 檢查提供的路徑並更正。
  • 確定檔案的位置正確。

請參閱

路徑名稱無效。


無法讀取 stdin 中的指令碼

此問題發生的原因經常是權限的問題。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。


無法儲存設定

無法儲存此指令碼的控制檔 (*.wsh)。

若要更正此錯誤

  • 驗證您並未正在嘗試儲存唯讀檔、另一個應用程式所開啟的檔案，或系統管理員所鎖定的檔案。
  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

設定 Script 屬性


指令行選項不符

通常這個錯誤表示您指定了有衝突的引數。例如， //B – 批次模式便與 //I – 互動模式不一致。

若要更正此錯誤

  • 檢查產生衝突的引數。


無法連接物件 <物件名稱>

可能的原因為您嘗試將事件與物件同步，或是嘗試將來源事件與無法接受這些物件事件的物件同步。

例如，在建立 IE 後便無法連接至事件。您必須將任何物件事件與 IE 連接，時間則是在建立 IE 作為建立過程一部份的物件時。

若要更正此錯誤

  • 建立物件並將在建立物件期間將物件與其物件事件連接。

請參閱

<object> 項目 | WScript 物件


無法找出自動類別名稱 <自動類別名稱>

您無法成功地建立自動類別或是自動類別未適當地安裝。

若要更正此錯誤

  • 確定已經安裝您所建立的自動類別。
  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。


//E 選項需要指令碼引擎的名稱

您在使用 //E 選項時沒有指定 script 引擎。

若要更正此錯誤

  • 確定在使用 //E 選項時指定了 script 引擎。

請參閱

副檔名沒有 script 引擎 <副檔名>。


無法移除環境變數 <name>

您正在無法識別的環境變數上呼叫方法 Environment.Remove()。

此錯誤通常發生於使用 Remove 方法時。若環境變數不存在或拼字錯誤，則系統將無法移除它。

若要更正此錯誤

  • 檢查目前環境變數的名稱，並確定它們存在且拼字正確。

請參閱

Remove 方法 | WshEnvironment 物件


執行 Windows Script Host 失敗

通常此為系統權限問題。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

載入 script <script 名稱> 失敗


//H選項的主機名稱必須為 "cscript" 或 "wscript"

您指定了 "cscript" 或 "wscript" 名稱作為您在使用 //H 選項時的主機名稱。

若要更正此錯誤

  • 請指定 "cscript" 或 "wscript" 作為您在使用 //H 選項時的主機名稱。

請參閱

H 選項需要主機名稱.


初始化 Windows Script Host 失敗

Windows Script Host 無法初始化。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。


嘗試呼叫沒有指令的 Exec 失敗

您已呼叫 WshShell.Exec() 方法，但未提供要執行的命令。

若要更正此錯誤

  • strCommand 是必要的引數。它是代表用來執行指令碼的命令列之字串。

請參閱

Exec 方法


路徑名稱無效

您指定了不正確的路徑名稱。

若要更正此錯誤

  • 檢查提供的路徑並更正。

請參閱

找不到 script 檔 <script 檔案名稱>。


捷徑路徑名稱的結尾必須為 .lnk 或 .url

當您命名捷徑時，請不要提供它副檔名，或者是提供 *.lnk 或 *.url 以外的副檔名。

使用 CreateShortcut 方法時，副檔名不正確或遺失。

若要更正此錯誤

  • 檢查捷徑的副檔名以 .lnk 結尾 (針對 Windows 捷徑)，或以 .url 結尾 (針對 Internet 捷徑)。

請參閱

WshShortcut 物件 | WshUrlShortcut 物件


//T 選項的逾時值無效

您使用 //T 選項輸入的逾時值無效。您必須在 //T 中指定非負整數。

若要更正此錯誤

  • 使用 //T 選項輸入適當的逾時值。請在 //T 中指定非負整數。

請參閱

//T 選項需要逾時值 | Script 執行時間已經超過於 script <script 名稱>。<script名稱> 執行已經終止。


載入 script <script 名稱> 失敗

通常此為系統權限問題。您被拒絕讀取或存取有問題的檔案。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

載入您的設定失敗


載入您的設定失敗

通常此為系統權限問題。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

載入 script <script 名稱> 失敗


工作名稱遺失

指定工作名稱的動作失敗。

若要更正此錯誤

  • 指定工作名稱。

請參閱

找不到工作 <工作識別碼>


沒有名為 <name> 的印表機

SetDefaultPrinter 方法只接受目前已安裝印表機的名稱。此錯誤通常發生於指定的是印表機埠而非印表機名稱，或發生於使用的印表機名稱不是目前安裝的印表機名稱時。

若要更正此錯誤

  • 檢查目前已安裝的印表機名稱，並確定已安裝指定的印表機。
  • 檢查印表機路徑是否拼錯。
  • 確定網路印表機連線中。

請參閱

SetDefaultPrinter 方法 | EnumPrinterConnections 方法 | AddWindowsPrinterConnection 方法


找不到 <name> 的通訊協定處理常式

此錯誤通常發生於 URL 捷徑目標的通訊協定處理常式拼錯時。這二個最常用的通訊協定處理常式是 HTTP 和 FTP。

若要更正此錯誤

  • 檢查通訊協定處理常式的拼字。

請參閱

WshUrlShortcut 物件


用於讀取的註冊鍵 <name> 的根目錄無效

您正在無法識別的根註冊鍵上呼叫方法 RegRead() 或 RegWrite()。

此錯誤通常發生於利用無效的註冊鍵使用 RegRead 或 RegWrite 方法時。

若要更正此錯誤

  • 檢查 Windows 登錄，並確定註冊鍵存在且拼字正確。

請參閱

RegRead 方法 | RegWrite 方法 | RegDelete 方法


無法開啟註冊鍵<name> 以便讀取

您正在無法識別的註冊鍵上呼叫方法 RegRead()。

此錯誤通常發生於利用無效的註冊鍵使用 RegRead 方法時。

若要更正此錯誤

  • 檢查 Windows 登錄，並確定註冊鍵存在且拼字正確。

請參閱

RegRead 方法


無法移除註冊鍵 <name>

您正在無法識別的註冊鍵上呼叫方法 RegDelete()。

此錯誤通常在無效的註冊鍵上使用 RegDelete 方法時發生。

若要更正此錯誤

  • 檢查 Windows 登錄，並確定註冊鍵存在且拼字正確。

請參閱

RegDelete 方法 | RegRead 方法 | RegWrite 方法


遠端 script 物件只能執行一次

您正嘗試傳回遠端 script 物件。

若要更正此錯誤

  • 建立另一個遠端 script 物件並轉而執行此物件。

請參閱

WshRemote 物件


Script 執行時間已經超過於 script <script 名稱>。<script名稱> 執行已經終止

在使用者定義的時間內，有問題的 script 可能無法執行 (//T)。

若要更正此錯誤

  • 針對您的 script 進行疑難排解以確定在設定的時間參數 (//T) 內無法執行的原因。請重新指定您的 script 以便它能夠以較快的速度執行和/或變更時間參數 (//T)。

請參閱

T 選項需要逾時值 | //T 選項的逾時值無效。


Script 設定檔 <設定檔名> 無效

您使用了無效的 script 設定檔。

若要更正此錯誤

  • 重新建立 script 設定檔或洽詢系統管理員。


URL<name> 的語法無效

此錯誤通常發生於組成 URL 目標的文字包含不正確的語法時。

若要更正此錯誤

  • 檢查 URL 目標的拼字是否輸入錯誤。

請參閱

WshUrlShortcut 物件


無法儲存捷徑 <name>

此錯誤通常發生於捷徑名稱已存在或標示為唯讀檔案時。

若要更正此錯誤

  • 將唯讀屬性變更為讀取/寫入。
  • 將捷徑重新命名為唯一的名稱。
  • 變更現有捷徑的名稱。

請參閱

WshShortcut 物件 | WshUrlShortcut 物件


無法設定捷徑目標為 <name>

Windows Script Host

無法設定捷徑目標為 <name>。

此錯誤通常發生於 URL 捷徑目標的通訊協定處理常式無效或不正確地登錄時。這二個最常用的通訊協定處理常式是 HTTP 和 FTP。

若要更正此錯誤

  • 使用有效的通訊協定處理常式。
  • 檢查使用中的通訊協定處理常式的拼字。
  • 聯絡您的系統管理員以確定已正確地安裝通訊協定處理常式。
  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

WshUrlShortcut 物件


<檔案名稱> 中沒有副檔名

Windows Script Host

<檔案名稱> 中沒有副檔名。

為了確定何種 script 引擎為適當的，程式通常需要使用適當的副檔名。

若要更正此錯誤

  • 確定包含了對於希望使用的 script 語言來說是適當的正確副檔名，並緊接在檔案名稱之後。


副檔名沒有 script 引擎 <副檔名>

Windows Script Host

副檔名沒有 script 引擎 <副檔名>。

此副檔名沒有對應至 script 引擎。

若要更正此錯誤

  • 檢查副檔名以及scripting 語言目的地的拼字是否正確。
  • 使用 //E 來指定 script 引擎。

請參閱

E 選項需要 script 引擎名稱。


沒有指定 script 檔

Windows Script Host

沒有指定 script 檔。

指定 script 檔案的動作失敗。

若要更正此錯誤

  • 指定適當的 script 檔。

請參閱

指定了未知的選項 <選項目的地>


無法執行遠端 script

Windows Script Host

無法執行遠端 script。

此指令碼無法初始化。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

WshRemote 物件


找不到工作 <工作識別碼>

Windows Script Host

找不到工作 <工作識別碼>。

您對 Windows Script 檔案 (*.wsf 檔) 中無法識別的工作 ID 製作了參考。

若要更正此錯誤

  • 檢查工作 ID 是否拼字錯誤。

請參閱

使用 Windows Script 檔案 | <job> 項目


無法等候處理

此錯誤通常發生於 script 停止並等待不會傳回值的處理序時，例如，等待執行捷徑連結的結果。

若要更正此錯誤

  • 直接執行程式而不使用捷徑。
  • 檢查連結以確定它仍是最新的捷徑連結。

請參閱

Run 方法


此作業平台不支援 Unicode

Windows Script Host

此作業平台不支援 Unicode。

WIN 95/98 與 Windows Millennium Edition 作業平台不支援使用 Unicode。

若要更正此錯誤

  • 不要在 WIN95/98 或 Windows Millennium Edition 作業平台使用 Unicode。


指定了未知的選項 <選項目的地>

Windows Script Host

指定了未知的選項 <選項目的地>。

您指定了對於 Windows script host 而言無效的選項。

若要更正此錯誤

  • 使用適用於您的 script 語言的 Windows script host 選項，或是指定指定其他支援的 script 語言。
  • 同樣檢查您的拼字。

請參閱

沒有指定 script 檔


Windows Script Host 存取在此機器上已經停用。請連絡您的管理員以瞭解詳細資訊。

通常此為系統權限問題。

若要更正此錯誤

  • 請洽詢您的系統管理員以找出可能的網路或安全性問題。

請參閱

執行 Windows Script Host 失敗


Script 元件

Microsoft®Windows®Script 元件提供您一種簡單的方法，以 Microsoft®Visual Basic®Scripting 版 (VBScript) 和 Microsoft®JScript®等 Scripting 語言建立 COM 元件。在 Microsoft®Internet Information Services (IIS)、Microsoft®Windows®Script Host 以及支援 COM 元件的其它任何應用程式中，將 Script 元件當作 COM 元件使用。本自學課程中討論之範圍如以下清單所示。

  • Script 元件總覽 了解什麼是 Script 元件，以及如何使用 Script 元件。
  • 建立 Script 元件 建立 Script 元件。
  • 使用 Script 元件 在應用程式中使用 Script 元件。
  • 執行 ASP Script 元件 建立結合 Active Server Page (ASP) 功能的 Script 元件，可讓您隔離及重複使用 ASP 邏輯。
  • 執行 DHTML Behavior Script 元件 建立可在 Microsoft®Internet Explorer 5.0 中用來定義行為的 Script 元件。


Script 元件總覽

Windows®Script 元件是一項令人振奮的新技術，可讓您利用 Microsoft®Visual Basic®Scripting 版 (VBScript) 和 Microsoft®JScript®等易於使用的 Scripting 語言，建立功能強大且可重複使用的 COM 元件。以下主題為您提供 Script 元件技術的總覽，並說明如何建立及使用 Script 元件。

  • 介紹Script 元件 了解什麼是 Script 元件，以及使用 Script 元件的優點。
  • Script 元件如何運作 了解 Script 元件技術的內容，以及如何建立 Script 元件。


Windows Script 元件簡介

Windows®Script 元件提供您方便在 Script 中建立功能強大且可再使用之 COM 元件的方法。您使用支援 Microsoft®ActiveX®Scripting 介面的任何 Scripting 語言來建立 Script 元件。支援這些介面的 Script 語言包括 JScript、Microsoft®Visual Basic®Scripting 版 (VBScript)、PERLScript、PScript 以及 Python。

備註 有關 ActiveX Scripting 介面的詳細資訊，請至位於 www.microsoft.com 的 Microsoft Scripting Technologies 網站瀏覽。

這項新的 Script 元件技術支援常見的 COM 元件型態，例如 Automation，並且可利用 DHTML 行為等增益功能加以擴充。

Script 元件：

  • 精小又有效率。
  • 易於建立、維護及佈署。
  • 提供建立 COM 元件的能力。
  • 提供存取廣泛的系統服務元件。

您可使用 Script 元件建立各種作業的 COM 元件，例如執行中層商務邏輯、存取並處理資料庫的資料、將交易處理加入應用程式以及利用 DHTML 行為在網頁中加入互動效果。

請參閱

Script 元件的運作方式 | 建立 Script 元件


Script 元件的運作方式

Windows®Script 元件技術包含三個部分：

  • 協助將 COM 請求發送至 Script 的 Script 元件執行階段 (Scrobj.dll)。在 COM 的條件下，Scrobj.dll 的功能如同 Script 元件的 inproc 伺服器。
  • 介面處理器是實行特定 COM 介面的編譯元件。不同的介面處理器可做各種特定型態的 COM 元件。

    Script 元件執行階段中已經內建了最常使用的介面處理器，包括 COM Automation 介面處理器、一個 ASP 介面處理器以及一個 DHTML 行為的處理器。還有其它屬於增益元件型態，或者嵌入特定應用程式的處理器。

  • 您的 Script 元件檔案 (.wsc 檔)。Script 元件檔案是包含您要建立之 COM 元件型態 (就是您要使用的介面處理器) 相關資訊的 XML (可擴充標記語言) 檔案。然後您再根據處理器提供的功能，在 Script 元件中撰寫 Script 以實行所要的介面。

Script 元件執行階段的作用為主應用程式的進入點。COM 的豐富內容，包括實行如 IUnknown 之類的 COM 標準介面，都已內嵌在各種介面處理器中。您的 Script 元件只包含實行 COM 元件功能所需的 Script。

例如，最常見的一個 COM 元件型態為 Automation 元件，其具有一些能從其它應用程式呼叫的屬性和方法。實行此功能 (例如呼叫方法時發送至正確函數) 所需的低階 COM 介面，都內建在 Automation 介面處理器中。您在 Script 元件檔案中定義要公開的屬性、方法及事件，Automation 處理器則確保在主應用程式需要它們時能夠正確呼叫。

請參閱

Script 元件簡介 | 建立 Script 元件


建立 Script 元件

建立 Windows®Script 元件 (.wsc) 檔案與建立其它任一個包含 Script 的檔案非常類似，包括 HTML 檔案在內。下面的主題會提供 Script 元件檔案基本配置 (layout) 的相關資訊，以及建立註冊資訊和型態程式庫的相關資訊。

  • Script 元件檔案內容 了解 Script 元件所需的 XML (可延伸標記語言，Extensible Markup Language) 元件。
  • 使用 Script 元件檔案精靈 使用「Script 元件精靈」建立 Script 元件檔案。
  • 建立註冊資訊 建立 Script 元件檔案中用來將它註冊為 COM 元件的資訊。
  • 公開方法 為 Script 元件加入方法。
  • 公開屬性 為 Script 元件加入屬性。
  • 公開事件 在 Script 元件中定義並觸發自訂事件。
  • 建立 Script 元件型態程式庫 為 Script 元件建立型態程式庫，以便在主應用程式中更容易使用。
  • 參考其它元件 包括全域引用 Script 中所需的物件、提供 Script 使用之常數的外部型態程式庫，或是指向未編入 Script 中之字串或值的資源。
  • 引用同一封裝中的另一個 Script 元件 在同一個封裝內納入多個 Script 元件時，將其中一個 Script 元件的功能嵌入另一個元件內。
  • 檢查 Script 元件檔案的錯誤 為 Script 元件增加編譯階段的錯誤檢查。
  • Script 元件檔案與 XML 的一致性 了解 XML 的一致性。


Script 元件檔案內容

Windows®Script 元件檔案為 XML (可擴充標記語言)，跟 HTML 檔案很像，但是包含定義 Script 元件及其行為的特殊元件。用於定義 Script 元件的元件並非 HTML 標記，而是專門用於 Script 元件定義的 XML 元件。

基本的 Script 元件檔案包含下列元件：

  • <component> 與 <package> 項目 <component> 項目會圍住整個 Script 元件定義。同一個 .wsc 檔中可出現多個 <component> 項目，而且都包含在主要 <package> 項目中。
  • <registration> 項目 包含用來將 Script 元件註冊為 COM 元件的資訊。如果主應用程式 (例如 Microsoft® Internet Explorer 5.0) 在建立 Script 元件的執行個體時並未直接使用 Windows 登錄區，則不需要此項目。
  • <public> 項目 圍住您 Script 元件公開之屬性、方法以及事件的定義。定義指向另一個 <script> 區塊中定義的變數或函數。
  • <implements> 項目 指定 Script 元件的 COM 介面處理器，處理器決定 Script 元件會成為何種型態的 COM 元件。例如，指定 <implements type=ASP> 就會實行 ASP 介面處理器，並能夠存取您 Script 元件中的 ASP 物件模型。

    <public> 項目是用來指定實行 COM Automation 介面處理器的 Script 元件。因此，您不需為 Automation 處理器建立 <implements> 項目。

    備註 Script 元件執行階段包括 Automation (使用 <public> 項目公開)、ASP 和 Internet Explorer 5.0 DHTML 行為的介面處理器。其它介面處理器可從外部 DLL 取得。有關附加介面處理器與 Script 元件的詳細資訊，請至 Microsoft Scripting Technologies 網站瀏覽。
  • <script> 項目 包含實行 Script 元件之邏輯使用的 Script，根據您建立的 COM 元件型態而定。例如，您若是建立 COM Automation 元件，在 <public> 項目中宣告屬性、方法及事件，然後將 Script 寫入一或多個 <script> 項目中加以定義。
  • <object> 項目 包含您在 Script 中使用之物件的相關資訊，例如另一個 COM 元件。
  • <resource> 項目 包含不應固定編入 Script 元件程式碼中的值。Resource 項目包含可能變更版本、可轉換字串以及其它值的資訊。
  • <reference> 項目 引用您要在 Script 中使用的型態程式庫。
  • <comment> 項目 包含剖析與執行 Script 元件時會忽略的文字。
    備註 如果您擔心建立的 .wsc 檔案包含符合 XML 標準的 XML，可以指定 Script 元件的 XML 剖析程式檢查 XML 語法。例如，您若是認為有一天會用到 XML 編輯器來處理檔案，這就很有用。否則這通常並不重要。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。

架構 Script 元件檔案

下面範例說明如何建構一個 Script 元件檔案。

<?XML version="1.0"?>
<package>
<?component error="true" debug="true"?>

   <comment>
      This skeleton shows how script component elements are
      assembled into a .wsc file.
   </comment>

<component id="MyScriptlet">
   <registration
      progid="progID"
      description="description"
      version="version"
      clsid="{00000000-0000-0000-000000000000}"/>

   <reference object="progID">

   <public>
      <property name="propertyname"/>
      <method name="methodname"/>
      <event name="eventname"/>
   </public>

   <implements type=COMhandlerName id=internalName>
      (interface-specific definitions here)
   </implements>

   <script language="VBScript">
      <![CDATA[
      dim propertyname
      Function methodname()
      ' Script here.
      End Function
      ]]>
   </script>

   <script language="JScript">
      <![CDATA[
      function get_propertyname()
      { // Script here.
      }
      function put_propertyname(newValue)
      { // Script here.
         fireEvent(eventname)
      }
      ]]>
   </script>

   <object id="objID" classid="clsid:00000000-0000-0000-000000000000">
   <resource ID="resourceID1">string or number here</resource>
   <resource ID="resourceID2">string or number here</resource>

</component>
</package>
備註 在 XML 中，您可利用 /> 關閉項目，指定沒有內容 (只限屬性) 的元件，例如前一個範例中的 <property> 和 <method> 項目。

請注意：

  • 最前面的 <?XML ?> 宣告指出這是一個 XML 檔案，並且符合 XML 通訊協定。此宣告為選擇性；如果您沒有將它包含在內，建立 Script 元件的元件時可使用稍微鬆散的語法。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
  • 此範例中的 <package> 項目為選擇性，因為這個檔案中只包含一個 <component> 項目。
  • <?component?> 處理指令包含指定錯誤檢查選項的屬性。有關詳細資訊，請參閱檢查 Script 元件檔案的錯誤。如果您未包含此元件，預設選項會全部錯誤。
  • <comment> 項目可在 Script 元件中的任何位置出現。
  • 所有情況下都不需要 <registration> 項目。例如，在 Internet Explorer 5.0 中實行 DHTML 行為介面處理器的 Script 元件就不需註冊，因為 Internet Explorer 在網頁中偵測到行為時會直接說明。有關註冊需求的詳細資訊，請參閱您實行之介面處理器的說明文件，並注意要使用 Script 元件的主機。
  • <reference> 項目可讓您在 Script 元件中包含型別程式庫，以便在 Script 中使用程式庫的常數。
  • <public> 項目圍住 <property>、<method> 及 <event> 項目。定義這些項目的 Script 稍後會在 Script 元件檔案出現。
  • <implements> 是用來使非預設 COM 介面可供使用。例如，您可利用下列的 <implements> 型態公開 ASP 介面：
    <implements type="ASP" id="iASP">

    <implements> 項目中出現的正確項目依您實行的介面而定。

    備註 此處出現的 <implements> 項目具有 id 屬性。但是，除非必須使物件或變數清楚，否則此屬性為選擇性。有關詳細資訊，請參閱 <implements> 項目。
  • 在此基本架構 (skeleton) 中有兩個 Script 元件，一個用於 VBScript，另一個用於 JScript。如果您只使用一種 Scripting 語言，則不需要一個以上的 <script> 項目。由於 <?XML ?> 宣告會出現在檔案的最前面，因此需要一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
  • <object> 項目會在 Script 元件內為您要使用的物件建立引用。

建立架構之後，根據您實行的介面處理器填入項目，以定義 Script 元件的功能。

請參閱

檢查 Script 元件檔案的錯誤 | 建立 Script 元件型態程式庫 | 建立註冊資訊 | 公開事件 | 公開方法 | 公開屬性 | 實行 ASP Script 元件 | 實行 DHTML 行為 Script 元件 | Script 元件檔案與 XML 的一致性 | 使用 Script 元件精靈


使用 Script 元件精靈

Windows®Script 元件封裝包含可自動化執行建立 Script 元件 (.wsc) 檔處理過程的 Script 元件精靈。這個精靈會執行下列功能：

  • 建立 .wsc 檔並增加基本 XML 項目。
  • 提示並建立註冊資訊。
  • 提示您要 Script 元件使用之介面處理器的型態。
  • 提示您要公開的屬性，並以您指定的 Scripting 語言建立必要的項目。
  • 提示您要公開的方法，並以您指定的 Scripting 語言建立必要的項目。
  • 提示 Script 元件可觸發的事件，並建立架構 (skeleton) 事件項目。
    備註 您可從位於 www.microsoft.com 的 Microsoft Scripting Technologies 網站下載及安裝 Script 元件精靈。

精靈會以您提供的資訊建立架構 Script 元件，並將其寫入 .wsc 檔中。編輯 .wsc 檔案並加入您的 Script，以建立 Script 元件的功能。

備註 精靈會建立最前面包含 <?XML ?> 宣告的 Script 元件檔案，表示檔案的內容必須符合 XML。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。

請參閱

Script 元件檔案內容 | 建立註冊資訊 | 建立 Script 元件 | Script 元件檔案與 XML 的一致性


建立註冊資訊

如果主應用程式要求，您可利用 Regsvr32.exe 之類的程式，將 Windows®Script 元件註冊為 COM 元件。註冊會將 COM 元件的相關資訊放在公用位置 (在 Windows 中，註冊資訊會儲存在 Windows 註冊區中)。應用程式可藉由讀取註冊資訊找到並載入 COM 元件。

備註 不一定所有的情況都需要註冊。例如，在 Internet Explorer 5.0 中實行 DHTML 行為介面處理器的 Script 元件就不必註冊，因為 Internet Explorer 會在偵測到網頁中的行為時加以註冊。有關使用「行為」的詳細資訊，請參閱 Microsoft Site Builder Network (SBN) 網站的＜Using DHTML Behaviors＞主題。如果主應用程式支援別名，您還可以建立 Script 元件的執行個體且不需加以註冊。

當您指定註冊時，最重要的資訊如下：

  • 程式 ID (prog ID)，這是主應用程式建立 Script 元件執行個體時使用的名稱。例如，您的 Script 元件程式 ID 若是 Component.MyComponent，就可以利用下列陳述式在 Microsoft®Visual Basic®中建立執行個體：
    Set Component = CreateObject("Component.MyComponent")
  • 類別 ID，這是可唯一識別 Script 元件的 GUID (全域性唯一的 ID)。您可以利用 Unidgen.exe 之類的程式產生 GUID。
    備註 如果您使用「Script 元件精靈」建立 Script 元件，精靈會自動為您建立程式 ID 和類別 ID。有關詳細資訊，請參閱使用 Script 元件精靈。

註冊資訊也包括描述和版本號碼。

註冊程式會在您的 Script 元件註冊時，為其建立類別 ID。但是，強烈建議您自行提供 Script 元件的類別 ID，以確保 Script 元件在其註冊的所有電腦上的類別 ID 完全一樣。如果您使用的 Script 元件具有儲存類別 ID 的開發工具，則註冊程式建立類別 ID 也會造成問題。如果註冊每次都會建立新的類別 ID，將會與應用程式儲存的 ID 不符。

建立 Script 元件的註冊資訊

  • 下面範例所示為建立至少包含程式 ID、選擇性包含類別 ID、描述以及版本的 <registration> 項目：
    <registration
description="My Test Component"
progid="Component.TestScript"
version="1"
classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"/>
    備註 註冊屬性可以任何順序在 <registration> 項目中出現。

註冊時執行 Script

Script 元件<registration> 項目也可讓您包含註冊及取消註冊時執行的 Script 元件。例如，您可以公布 Script 元件已經註冊的訊息。

註冊與取消註冊時執行 Script

  • 在 <registration> 項目中，包含一個 <script> 項目。若要在註冊時執行 Script，應撰寫 register( ) 函數。 若要在 Script 元件取消註冊時執行 Script，應納入 unregister( ) 函數。

    下面範例所示為如何在 Script 元件註冊或取消註冊時公布訊息。

    備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
    <registration
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">

   <script language="VBScript">
   <![CDATA[
      Function register()
         MsgBox "Component 'My Test Component' registered."
      End Function
      Function unregister()
         MsgBox "Component 'My Test Component' unregistered."
      End Function
   ]]>
   </script>
</registration>

註冊以供遠端存取

如果您是在分散式環境下佈署 Script 元件，就可以指定能從遠端執行 Script 元件。例如，您可能會建立一個專為在伺服器上執行而設計的 Script 元件，但是會從客戶端上的程式碼呼叫。如果以 DCOM 正確架構了客戶端和伺服器(DCOM 可提供從伺服器將物件指標傳送到客戶端的機制)，就可能會達成上述情況。

註冊 Script 元件以供遠端存取

  • 在 <registration> 項目中包含可從遠端存取的屬性，如下例所示：
    <registration
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
   remotable=true/>

有關遠端建立 Script 元件執行個體的詳細資訊，請參閱在應用程式中使用 Script 元件。

請參閱

Script 元件檔案內容 | 使用 Scrip 元件精靈 | 建立 Script 元件型態程式庫 | 檢查 Scrip 元件檔案的錯誤 | Script 元件檔案與 XML 的一致性


公開方法

在您的 Windows®Script 元件檔案中，方法是當作函式或副程式實行。

公開方法

  1. 建立一個 <public> 項目作為 <component> 項目的子項目。
  2. 在 <public> 項目中，包含一個 <method> 項目。method 項目可以選擇性地包含一或多個 <parameter> 項目，以定義方法的參數。
  3. 以任何一種 Scripting 語言撰寫實行函數的程序。將程序放在 <implements> 項目之外，但放在 <component> 項目中的 <script> 項目內。請確定函數名稱與 functionName 相符，或者您若是未指定 functionName，則與您在 <method> 項目中指定的 methodName 名稱相符。

    例如，下面範例所示為具有 factorial 和 getRandomNumber 兩種方法的 Script 元件檔案片段。

    備註 必須要有一個 CDATA 區段，使 <script> 元件中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
    <public>
   <method name="factorial"/>
   <method name="random" internalName="getRandomNumber">
      <parameter name="upperBound"/>
      <parameter name="seed"/>
   </method>
</public>

<script language="VBScript">
Function factorial(n)
   <![CDATA[
   If isNumeric(n) Then
      If n <= 1 Then
         factorial = 1
      Else
         factorial = n*factorial(n-1)
      End If
   Else
      factorial = -2   ' Error code.
   End If
End Function

Function getRandomNumber(upperBound, seed)
   getRandomNumber = Cint(upperBound * Rnd(seed) + 1)
End Function
]]>
</script>

您可指定 Script 元件的預設方法，使主應用程式不必明確呼叫即可呼叫方法。例如，您若公開了名為 factorial 的方法，並將其標示為預設值，便可在 Visual Basic 中利用下列方法加以呼叫：

Set component = CreateObject("component.MyComponent")
n = component.factorial(4)   ' Calls factorial method explicitly.
n = component(4)   ' Calls factorial method as default.

若要指定預設方法，應包含為方法指定特殊發送識別項 (dispid) 的屬性。有關 dispid 的詳細資訊，請參閱公開事件。

指定預設方法

  • 在 <method> 項目中包含 dispid="0" 屬性，如下例所示：
    <public>
   <method name="factorial" dispid="0"/>
</public>
    備註 可使用此技巧指定預設方法或預設屬性，但是不能同時指定兩者。Script 元件中只能有一個 dispid 為零的項目。

請參閱

公開事件 | 公開屬性 | Script 元件檔案內容


公開屬性

有兩種方式可以公開屬性：

  • 當作簡單值 屬性只是 Script 元件使用者可讀取與寫入的一個全域變數。由於值是儲存為全域值，您可在 Windows®Script 元件檔案的 Script 中加以處理。
  • 當作函數 使用函數定義的屬性。這可讓您計算屬性值，並控制屬性為唯讀、讀寫或唯寫性質。

您也可以將屬性標示為 Script 元件的預設值。

將屬性當作簡單值公開

  1. 建立一個 <public>項目作為 <component> 項目的子項目。
  2. 在 <public> 項目中，包含指定用來儲存屬性值之變數的 <property> 項目。
  3. 若要初始化簡單屬性的值，應在 <script> 項目中建立一個與 propertyName (或者 propertyVariable，如果您有指定的話) 名稱相符的全域變數，並為其指定值。
  4. 以下 Script 元件片段會說明公開為簡單值的兩種屬性 (名稱與標記)。使用全域變數在 <script> 項目中初始化屬性。
    備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
    <public>
   <property name="name"/>
   <property name="tag" internalName="tagVar"/>
</public>

<script language="VBScript">
   <![CDATA[
   Dim name
   name = "script component"   ' Initializes the value of name property.
   Dim tagVar
   tagVar = "10"   ' Initializes the value of tag property.
   ]]>
</script>

使用函數公開屬性的情形與公開方法類似。

使用函數公開屬性

  1. 在 Script 元件檔案的 <public> 項目中，包含一個 <property> 項目，項目中包含定義讀取函數的 <get> 項目和定義寫入函數的 <put> 項目。如果您未包含 <put> 項目，其屬性為唯讀性質。如果未包含 <get> 項目，則屬性為唯寫性質。
  2. 在 <public> 項目之外的 <script> 項目中撰寫程序，以實行函數。設定屬性值— 的函數 put 函數 — 必須接受單一參數，這是要設定屬性的值。

    程序的名稱必須與您在 <property> 項目中指定的內部名稱相符。要是未指定 internalName 屬性，read 函數的名稱必須為函數加上 get_ 字首，而 write 函數的名稱必須為函數加上 put_ 字首。

  3. 例如，以下 Script 元件片段就是公開 sname、dateOfBirth 及 age 這三個屬性的 Script 元件檔案範例。dateOfBirth 屬性由函數定義，使其能包含錯誤檢查。age 屬性經過計算，定義為唯讀性質。
    備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
    <public>
   <property name="sname"/>
   <property name="age">
      <get internalName="readAge"/>
   </property>
   <property name="dateOfBirth">
      <get internalName="readDOB"/>
      <put internalName="writeDOB"/>
   </property>
</public>

<script language="VBScript">
<![CDATA[
Dim sname   ' Read-write sname property (no functions).
Dim gDOB   ' Global variable used to store date of birth.

Function readDOB()
   ' Gets value of dateOfBirth property.
   readDOB = gDOB
End Function

Function writeDOB(newDOB)
   ' Sets value of dateOfBirth property.
   If isDate(gDOB) Then
      'Error checking
      gDOB = newDOB
   End If
End Function

Function readAge()
   ' Calculates read-only age property.
   If isDate(gDOB) Then
      dobM = DatePart("m", gDOB)
      dobD = DatePart("d", gDOB)
      dobY = DatePart("yyyy", gDOB)
      todayY = DatePart("yyyy", Date)
      age = todayY - dobY

      ' Adjust if birthday has not yet occurred this year.
      bday = DateValue(dobM & "/" & dobD & "/" & todayY)
      If DateDiff("d", bday, DateValue(Date)) < 0 Then
         age = age - 1
      End If
      readAge = age
   End If
End Function
]]>
</script>

您可指定 Script 元件的預設屬性，以便主應用程式可在不明確為屬性命名的情況下，取得或設定屬性的值。例如，您若是公開了一個名為 sname 的屬性，並將其標示為預設值，便可以在 Visual Basic 中以下列任一方法加以處理：

Set component = CreateObject("Component.MyComponent")
n = component.sname   ' Gets property explicitly.
n = component   ' Gets value of sname as default.

若要指定預設屬性，應在方法中包含一個指定特殊發送識別項 (dispid) 的屬性。有關 dispid 的詳細資訊，請參閱公開事件。

指定預設屬性

  • 在 <property> 項目中包含 dispid="0" 屬性，如下例所示：
    <property name="sname" dispid="0"/>
    備註 可使用此一技巧指定預設屬性或預設方法，但是不能同時指定兩者。Script 元件中只能有一個 dispid 為零的項目。

請參閱

公開事件 | 公開方法 | Script 元件檔案內容 | Script 元件檔案與 XML 的一致性


公開事件

為 Windows®Script 元件增加事件功能：

  • 宣告您要讓其能夠觸發的每一個事件。
  • 依需要在 Script 元件中呼叫函數以觸發事件。

某些主機環境也要求您產生其用於連結事件的型態程式庫。有關詳細資訊，請參閱建立 Script 元件型態程式庫。

備註 行為處理器以稍微不同的方式公開事件。有關詳細資訊，請參閱公開行為 Script 元件中的自訂事件。

宣告事件

每一個您要能觸發的事件都必須個別宣告。

宣告事件

  1. 建立一個 <public> 項目作為 <component> 項目的子項目。
  2. 在 <public> 項目中為您要宣告的每個事件包含一個 <event> 項目。
  3. 例如，以下 Script 元件片段所示為公開兩個事件的方法：
    <public>
   <property name="sname"/>
   <method name="factorial"/>
   <event name="namechanged"/>
   <event name="querydone"/>
</public>

指定分派識別項

COM 程式設計透過發送識別項 (每一個都稱為一個 dispid) 提供事件通知，發送識別項為識別元件之事件的整數值。dispid 會編譯到元件的型態程式庫中，然後由主應用程式用於連結事件。

建立 Script 元件之型態程式庫的處理會自動為 Script 元件的事件產生 dispid。但是，您可依自己喜好指定 dispid。自行指定可讓您：

  • 確保 Script 元件中的事件永遠具有相同的 dispid。如果由型態程式庫產生器指定 dispid，則每次產生程式庫時，dispid 都會改變。
  • 將 Script 元件中的事件對應到具有特定編號的 dispid。例如，您若要觸發錯誤通知等標準 COM 事件，可將事件對應到 COM 規格使用的值。

若要指定事件的 dispid，應在 <event> 項目中包含 dispid 屬性，如下例所示：

<public>
   <event name="namechanged" dispid="22">
</public>

在 Script 元件中的 dispid 必須為唯一值。您可為 dispid 指定負值，以對應到傳統事件，但是只能使用指定的範圍，例如控制項為 -999 至 -500。有關保留 dispid 範圍的詳細資訊，請參閱 MSDN 程式庫中 DISPID 的說明文件。

備註 dispid 編號零用於識別預設方法或屬性。有關詳細資訊，請參閱公開方法和公開屬性。

引發事件

您可呼叫 fireEvent 方法，指定要引發之事件的名稱來觸發事件。不可觸發未在 <implements> 項目中公開的事件。您可在 Script 元件檔案中任一個 Script 內觸發事件。例如，以下會說明屬性值變更時，您可引發事件的方式。

<script language="VBScript">
<![CDATA[
Sub put_lowercaseName(newLCName)
   name = newLCName
   fireEvent("namechanged")
End Sub
]]>
</script>

請參閱

公開行為 Script 元件中的自訂事件 | 公開方法 | 公開屬性 | 在主應用程式中處理 Script 元件的事件 | Script 元件檔案內容


建立 Script 元件型態程式庫

您可以為 Windows®Script 元件產生一個包含其介面與成員等相關資訊的型態程式庫。在某些主應用程式 (例如 Visual Basic) 中，必須有型態程式庫才能啟用 Script 元件的事件，而有些主應用程式中，型態程式庫則屬於選擇性。即使型態程式庫並非必要的，但是若產生一個的話，卻能讓您更容易處理 Script 元件，主應用程式也比較不會發生錯誤。

例如，您若是採用 Visual Basic 作為主應用程式，可使用 [引用] 對話方塊選取 Script 元件的型態程式庫。這可讓您將事件連結到 Script 元件，並能在 Visual Basic 中看到這些事件。此外，在您編寫引用 Script 元件的 Visual Basic 程式碼時，Visual Basic 會在陳述式完成與「物件瀏覽器」中使用型態程式庫資訊，讓您很容易查看並使用 Script 元件公開的屬性、方法以及事件。

備註 有關在主應用程式中使用型態程式庫的資訊，請參閱應用程式的說明文件。

建立 Script 元件型態程式庫

  • 在 Windows Explorer 中的 Script 元件 .wsc 檔案上，按一下滑鼠右鍵，然後選擇 [產生型態程式庫]。

    如此一來，將為 Script 元件產生一個與 Script 元件檔案同名，但是副檔名為 .tlb 的檔案，而該檔案會寫入放置 .wsc 檔案的資料夾中，並在 Windows 註冊區內註冊。

若要更精確地控制產生型態程式庫，您可以從 Script 元件檔案內部的 Script 動態產生型態程式庫，或者使用命令列介面來產生。

動態產生型態程式庫

Script 元件執行階段包含一個從 Component.GenerateTypeLib 物件導入的 Automation 介面。您可在 Script 中使用此物件，以便從 Script 元件檔案內產生型態程式庫。在 Script 元件已經註冊的情況下自動建立型態程式庫時，這個方法特別有用。

動態建立 Script 元件型態程式庫

  1. 在 Script 元件檔案中的 Script 裡，請利用如下語法建立 Component.GenerateTypeLib 物件的執行個體：
    set oTL = CreateObject("Component.GenerateTypeLib")
  2. 設定 Component.GenerateTypeLib 物件的下列屬性：
方法/屬性 | 描述
AddURL | (方法) 新增 Script 元件檔案的 URL，在此可產生型態程式庫。您可以多次呼叫此方法屬性，在型態程式庫中包含多個 Script 元件。
Path | (屬性) 將寫入型態程式庫所在的路徑與檔案。預設路徑為目前的目錄，而預設名稱則是副檔名為 .tlb 的 Script 元件檔案名稱。如果物件無法建立指定的程式庫，其預設作業則是建立一個名為 component.tlb 的型態程式庫。
Doc | (屬性) 包含一個與型態程式庫資訊一起儲存在註冊區之中的所有資訊的字串。
GUID (屬性) 型態程式庫的 GUID。(不是 Script 元件的 GUID。)如果您未提供的話，GenerateTypeLib 物件就會建立一個，但是這樣一來，每一部機器上型態程式庫的 GUID 都會不一樣。GUID 必須確實為以下這個格式，其中的 x 代表十六進位值：
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Name | (屬性) 型態程式庫的內部名稱。這個名稱會顯示在某些應用程式中，例如「Visual Basic 物件瀏覽器」。
MajorVersion | (屬性) 您指定的整數值。
MinorVersion | (屬性) 您指定的整數值。
  1. 呼叫型態程式庫物件的 Write 方法，以建立 .tlb 檔案，然後加以註冊。
  2. 如果您要建立一個附加的型態程式庫，可呼叫 GenerateTypeLib 物件的 Reset 方法，以清除 AddURL 屬性中的 Script 元件檔案清單、重設 URL 和您要的其它屬性，然後再次呼叫 Write 方法。

例如，下列在 <registration> 項目中的 Script 會動態建立一個型態程式庫。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<registration
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">
   <script language="VBScript">
   <![CDATA[
   Function Register()
      Set oTL = CreateObject("Scriptlet.GenerateTypeLib")
         oTL.AddURL "d:\components\MyComponent.wsc"   ' Script component URL.
         oTL.AddURL "d:\components\YourComponent.wsc"
         oTL.Path = "d:\components\MyComponent.tlb"   '.tlb path.
         oTL.Doc = "Sample component typelib"    ' Documentation string.
         oTL.GUID = "{a1e1e3e0-a252-11d1-9fa1-00a0c90fffc0}"
         oTL.Name = "MyComponentTLib" ' Internal name for tlb.
         oTL.MajorVersion = 1
         oTL.MinorVersion = 0
         oTL.Write ' Write tlib to disk.
         oTL.Reset ' Clear list of URLs in AddURL/.
      End Function
   ]]>
   </script>
</registration>

命令列介面

如果您比較習慣使用指令提示的視窗，可以呼叫 Rundll32.exe 程式，以建立型態程式庫。

從指令提示建立型態程式庫

  • 利用以下的語法呼叫 Rundll32.exe：
    rundll32.exe path\scrobj.dll,GenerateTypeLib options

    其中：

    • path 是您電腦中 Scrobj.dll 所在位置的路徑。
    • options 是一組旗標和值，您可利用 -flag:value 格式來指定型態程式庫資訊。選項的順序並無限制。系統支援下列的旗標，其值請參閱上一節＜動態建立 Script 元件型態程式庫＞。
-name:Name
-file:Path
-doc:\"Doc\"
-guid:GUID
-major:MajorVersion
-minor:MinorVersion
-URL:AddURL

例如，以下指令會從 Script 元件 MyComponent.wsc (將該指令括起來較易閱讀) 建立名為 MyComponent.tlb 的型態程式庫：

rundll32.exe c:\winnt\system32\scrobj.dll,GenerateTypeLib
   -name:MyComponentTLib -file:d:\components\MyComponent.tlb
   -doc:\"Sample component typelib\"
   -guid:{a1e1e3e0-a252-11d1-9fa1-00a0c90fffc0} -major:1 -minor:0
   -URL:d:\components\MyComponent.wsc

解決型態程式庫的問題

產生型態程式庫的處理可能會因各種不同的原因而失敗。您所看到的錯誤不一定能夠清楚的顯示問題所在。萬一無法產生型態程式庫，請複查以下可能失敗原因的清單。

  • 如果屬性是由函數定義，則 get 和 put 函數的個數必須與同名稱的引數個數相同。有關詳細資訊，請參閱公開屬性。
    備註 可以將 Script 元件定義成 get 和 put 屬性函數的個數與引數不同，但是您就不能建立該 Script 元件的型態程式庫。
  • 如果您正在公開事件，則一個 Script 元件中就不能重複使用同一個分送識別項 (dispid)。而且除非 dispid 是在指定的範圍內，否則該 dispid 也不能使用負值。有關詳細資訊，請參閱公開方法。
  • Script 元件中項目的 ID 屬性必須是唯一的屬性。如果您是從一個以上的 Script 元件產生型態程式庫，則整個型態程式庫中的 ID 都必須是唯一的 ID。

請參閱

Script 元件檔案內容 | 建立註冊資訊 | 檢查 Scrip 元件檔案的錯誤 | Script 元件檔案與 XML 的一致性


參考其它元件

Windows®Script 元件中可以包含您建立 Script 元件所需之外部元件的引用，例如：

  • 附加的 COM 物件
  • 型態程式庫
  • 不想固定編入 Script 元件之 Script 中的資源，例如數字和文字。

參考附加的 COM 元件

您的 Script 元件中可能需要建立其它 COM 元件的執行個體。有兩種方式可以建立：

  • 在 Script 中 直接在 Script 中建立其它物件的執行個體。例如，您可使用 Microsoft®Visual Basic®Scripting 版 (VBScript) 中 CreateObject 函數或 JScript 中的新 ActiveXObject 物件。
  • 使用 OBJECT 項目 使用與您在 HTML 網頁中使用之 <OBJECT> 標記相似的 <object> 項目。使用 <object> 項目可讓物件成為所有 Script 都可在全域使用的物件，並允許 Scripting 工具提供陳述式完成。而且也會提供方便的方式，將您在 Script 元件中使用的物件彙總及製成文件。
    備註 雖然 Script 元件中的 <object> 項目與 HTML 網頁中的 <OBJECT> 標記相似，但是 Script 元件中 <object> 項目的屬性清單比較短，因為 Script 元件並不會顯現使用者介面。

建立 OBJECT 項目

  • 建立 <object> 項目。此項目必須放在 <component> 項目內，但是必須在 <script> 項目等其它所有項目之外。

下面範例所示為 Script 元件中的物件定義。

<object id="cnn" progid="ADODB.Connection"/>

引用外部型態程式庫

您要處理的多個元件都支援型態程式庫，這些程式庫提供元件的物件類別及其成員的完整清單。引用元件的型態程式庫，您就可以使用型態程式庫中定義的常數。

包含型態程式庫的引用

  • 在指定要包含的型態程式庫位置和名稱的 Script 元件中包含 <reference> 項目。例如：
    <reference object="ADODB.Connection.2.0"/>

引用資源

資源項目可包含可能變更版本、可轉換字串以及其它值的資訊。

引用資源

  1. 在 Script 元件中，但在 <public> 和 <script> 項目 (以及 <implements> 項目，如果有的話) 之外，為您要定義的每個資源建立一個 <resource> 項目，並為每個項目提供一個唯一的 ID。以下範例所示為兩個 <resource> 項目：
    備註 必須要有一個 CDATA 區段，使 <resource> 項目的內容無法被剖析程式使用。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
    <component id="MyScriptlet">
<public>
   <method name="random" internalName="getRandomNumber"/>
</public>
<resource id="errNonNumeric"><![CDATA[Non-numeric value passed]]>
</resource>
<resource id="errOutOfRange"><![CDATA[Passed value is out of range ]]>
</resource>
  2. 在 Script 中呼叫 getResource 函數以包含資源文字或數字，如下例所示。
    備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 無法被剖析程式使用。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
    <script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = Cint(upperBound * Rnd + 1)
   Else
      getRandomNumber=getResource("errNonNumeric")
   End If
End Function
]]>
</script>

請參閱

Script 元件檔案內容 | 引用同一封裝中的另一個 Script 元件


引用同一封裝中的另一個 Script 元件

您可建立包含多個 Windows®Script 元件的封裝，讓您也可直接從任一個 Script 元件執行並使用另一個，而不必註冊第二個 Script 元件。

例如，您可能會建立實行 Automation 介面並公開一連串屬性和方法的 Script 元件。同一封裝內的第二個 Script 元件可能是實行 ASP 介面，提供 Microsoft®Internet Information Services (IIS) 存取伺服器物件模型。然後您可在公開 ASP Script 元件的 Automation Script 元件建立方法或屬性，並使其成員可供使用。

若要從另一個 Script 元件參考 Script 元件，可在公開第二個 Script 元件的方法中建立架構成員 (屬性或方法)。

引用同一 Script 元件檔案中的另一個 Script 元件

  1. 在第一個 Script 元件中宣告屬性或方法。
  2. 在新屬性或方法之定義的一部分中呼叫 createComponent 函數。

    例如，下面範例所示為同一封裝內的兩個 Script 元件。在第一個 Script 元件中，math 方法只是引用第二個 Script 元件，而第二個 Script 元件則是公開 add 方法和 multiply 方法。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<?XML version="1.0"?>
<package>
<component id="component1">
<registration progid="Component.FrontEnd"/>
<public>
   <property name="math"/>
</public>
<script language="JScript">
<![CDATA[
var math = createComponent("component2")
   ]]>
</script>
</component>

<component id="component2">
<registration progid="Component.Math"/>
<public>
   <method name="add"/>
   <method name="multiply"/>
</public>
<script language="JScript">
<![CDATA[
function add(n1, n2){
   return n1+n2;
}
function multiply(n1, n2){
   return n1*n2;
}
]]>
</script>
</component>
</package>

若要呼叫引用的 Script 元件，應呼叫完整的成員階層架構 (Hierarchy)，以取得其方法或屬性。下面範例所示為幾種執行方式：

' 建立第一個script元件的個體執行。
set o1 = CreateObject("Component.FrontEnd")

' 直接叫用第二個script 元件的函數。
msgbox(o1.math.add(3,5))
msgbox(o1.math.multiply(3,5))

' 建立直接引用math 方法的第二個物件。
Set o2 = o1.math()
msgbox(o2.add(4,5))
msgbox(o2.multiply(4,5))

每一次呼叫 createComponent() 函數時，它會建立引用 Script 元件的一個新執行個體。如果您需要保留呼叫間的執行個體資訊，請將指向第二個 Script 元件的指標指向一個全域變數，如下例所示。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<component id="component1">
<registration progid="Component.FrontEnd"/>
<public>
   <property name="math">
      <get/>
   </property>
</public>
<script language="JScript">
<![CDATA[
var m = createComponent("component2")
function get_math(){
   return m
}
   ]]>
</script>
</component>

(如前例的Component2)

請參閱

Script 元件檔案內容 | <package> | <component>


檢查 Scrip 元件檔案的錯誤

由於 Windows®Script 元件是當作 COM 元件使用，因此通常會安靜地執行。但是，在您開發 Script 元件檔案時會發現，如果能知道檔案中的錯誤，將有很大的幫助。您可以指定三種錯誤檢查的型態：

  • 檢查 XML 的有效性。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
  • 允許通知語法及執行階段錯誤。根據預設，Script 元件檔案中若發生錯誤，將會顯示一般錯誤訊息。您可藉由指定錯誤通知，讓 Script 元件剖析程式顯示有關錯誤的詳細資訊。
  • 允許偵錯。根據預設，您不能使用 Script 偵錯工具為 Script 元件偵錯。如果啟用偵錯，便可以設定中斷點，或利用 Stop (Microsoft®Visual Basic®Scripting 版 (VBScript)) 或偵錯工具 (JScript) 陳述式來回應錯誤，以啟動 Script 偵錯工具。

設定錯誤選項

將錯誤選項指定為 XML <?component ?> 處理指令的屬性。

指定錯誤檢查

  • 以下列一或多個屬性，在 Script 元件檔案最上方 (但是在選擇性 <?XML ?> 宣告之後) 包含<?component?>處理指令：
    • error 將此設定為 true，以顯示 Script 元件中語法或執行階段的詳細錯誤訊息。
    • debug 將此設定為 true，以啟用偵錯。如果未啟用此偵錯，您便無法使用任何方式啟動 Script 元件的 Script 偵錯工具。

例如，以下就啟用了全部三個錯誤報告選項：

<?component error="true" debug="true"?>
秘訣 將 Script 元件佈署到製作環境之前，必須先關閉錯誤報告。

請參閱

Script 元件檔案內容 | 使用 Scrip 元件精靈 | 建立註冊資訊 | 建立 Script 元件型態程式庫 | Script 元件檔案與 XML 的一致性


Script 元件檔案與 XML 的一致性

Windows®Script 元件是 XML 檔案，應依照 XML 1.0 版在檔案中定義元件的規格。雖然 XML 元件在表面上看起來很像 HTML 標記，但是 XML 實際上是定義更嚴格的通訊協定。例如，元件名稱必須區分大小寫。

Script 元件執行階段 (Scrobj.dll) 允許您指定 XML 解譯檔案時的嚴格程度，使您更容易建立 Script 元件。可以很鬆散地解譯 Script 元件 XML，允許像 HTML 中一樣的標記排序變化。

但是，您也可以指定對 Script 元件檔案進行 XML 確認，讓 Script 元件執行階段檢查確定您 Script 元件檔案中的 XML 是否完全符合 XML 標準。如果您一定是使用 XML 編輯工具來處理 Script 元件，就應該設定 XML 確認。

指定 XML 確認時，必須確定您的 Script 元件檔案符合下列規則。

  • 項目型別與屬性名稱必須區分大小寫。 除了 interName 這種多段式名稱之外，元件型態和屬性名稱通常都是小寫。在非常符合 XML 標準的 XML 檔案中，所有的名稱都必須確實遵循命名規格。
  • 屬性值需要引號。屬性的值必須以單引號或雙引號標示。例如，若未使用 XML 確認，您可在 <script> 項目中指定 language=JScript。但是若依照 XML 規則，同樣的屬性應為 language="JScript"。
  • 必須使 Script 項目中的保留字元不會顯示出來。Script項目常會包含大於 (<) 和小於 (>) 符號、& 符號 (&) 以及在 XML 中為保留字元的其它字元。如果您建立的 XML 檔案非常符合規格，必須確定這些保留字元不會造成 XML 剖析程式的混淆。您可利用跳脫順序個別標記字元 (例如，指定 "<" 為 "&lt;")，或者將整個 Script 項目括在 <![CDATA[ ...]]> 區段內，使整段都不會顯示出來。若是沒有 XML 確認，則根據預設，Script 元件XML 剖析程式會將 <script> 項目當作不會顯示處理。
    備註 如果您未指定非常符合的 XML 剖析，則不要在 Script 中包含 CDATA 區段。否則 Script 元件會在您試圖註冊、執行或呼叫它時報告錯誤。

有關 XML 標準的詳細資訊，請參閱 XML 規格網站和 Microsoft®XML 網站。

指定 XML 的一致性

  • 包含 <?XML ?> 宣告作為檔案的第一個項目：
    <?XML version="1.0" ?>
    備註 如果您是利用 Script 元件精靈建立 Script 元件，會在檔案中加入 <?XML ?> 宣告，並會嚴格剖析 Script 元件的 XML。

要是沒有此一項目，Script 元件執行階段會假設您不要 XML 確認。但是，您可能會無法使用 XML 編輯器處理檔案。

請參閱

Script 元件檔案內容 | 使用 Script 元件精靈 | 檢查 Script 元件檔案的錯誤


使用 Script 元件

建立 Windows®Script 元件之後，就可在您的應用程式中使用。使用 Script 元件與使用其它 COM 元件一樣，但是每一種主應用程式執行 COM 元件的方法略有不同。

  • 註冊 Script 元件 註冊及取消註冊 Script 元件。
  • 在應用程式中使用 Script 元件 在主應用程式中建立 Script 元件的執行個體。
  • 在主應用程式中處理 Script 元件的事件 偵測及回應自訂 Script 元件的事件。


註冊 Script 元件

若要註冊 Windows®Script 元件，必須讓 Script 元件執行階段 Scrobj.dll 可供使用，而且必須在您的電腦上註冊。從 Microsoft®Scripting Technologies 網站安裝 Script 元件封裝時，會自動載入 Scrobj.dll，並在您的電腦上註冊。

備註 如果您是建立要以 DHTML 行為呼叫的 Script 元件，可以不必註冊，因為 Microsoft® Internet Explorer 5.0 可以不必事先註冊就直接使用這種型態的 Script 元件。

本主題提供下列各項相關資訊：

  • 註冊 Script 元件
  • 註冊遠端安裝的 Script 元件
  • 取消 Script 元件註冊

註冊 Script 元件

您可利用各種方法在區域電腦上註冊 Script 元件。

註冊 Script 元件

  • 在 Windows 檔案總管的 Script 元件 (.wsc) 檔案上按一下滑鼠右鍵，然後選擇 [註冊]。

    – 或 –

  • 使用 Script 元件封裝中所附的新版 Regsvr32.exe，並使用以下指令：
    regsvr32 URL/component_name.wsc

    例如，若要註冊名為 MyComponent.wsc 的 Script 元件，請使用下列語法：

    regsvr32 file:\\myserver\MyComponent.wsc

    或 –

  • 如果您沒有 Script 元件封裝所附的這一版 Regsvr32.exe，可使用現有版本，並利用以下語法註冊 Script 元件的執行階段 DLL：
    regsvr32 scrobj.dll /n /i:URL/component_name.ext

    例如，若要註冊名為 MyComponent.wsc 的 Script 元件，請使用下列語法：

    regsvr32 scrobj.dll /n /i:http://myserver/MyComponent.wsc

註冊遠端安裝的 Script 元件

如果您打算建立 Script 元件的遠端執行個體，必須在 Script 元件常駐的遠端電腦上將其註冊。同時必須在您打算執行 Script 元件的每一部區域電腦上為其註冊，使 DCOM在註冊中有一個開始點，可以尋找並執行遠端 Script 元件。

註冊遠端安裝的 Script 元件

  1. 決定要在遠端執行之 Script 元件的程式 ID 和物件類別 ID。
    備註 Script 元件在區域和遠端的物件類別 ID 必須相同，因此您必須在 Script 元件的 <registration> 項目中提供物件類別 ID。
  2. 在每一部區域電腦上建立以下註冊輸入項：
    HKEY_CLASSES_ROOT\componentProgID

    其中 componentProgID 是要執行的 Script 元件 ID。

  3. 在新輸入項下建立 CLSID 機碼，並將其值設定為 Script 元件的物件類別 ID，以大括弧括住物件類別 ID。
    秘訣 有一個簡單的方法建立正確的註冊資訊，就是在要說明該 Script 元件的伺服器上註冊 Script 元件。然後使用 Regedit.exe 找出 HKEY_CLASSES_ROOT\componentProgID 輸入項。從 [登錄] 功能表中選擇 [匯出登錄檔案]，將會建立一個 .reg 檔。這個檔案可以散發到區域電腦，使用者可以只執行這個檔案，就能建立正確的註冊輸入項。

取消 Script 元件註冊

如果某個 Script 元件已經不需再註冊於電腦中，您可以使用下列其中一個方法取消其註冊：

  • 在 Windows 檔案總管中的 Script 元件檔案名稱上按一下滑鼠右鍵，然後選擇 [取消註冊]。
  • 執行 Regsvr32.exe，加上 -u 旗標。

請參閱

建立註冊資訊 | Script 元件檔案內容 | 在應用程式中使用 Script 元件


在應用程式中使用 Script 元件

建立 Windows®Script 元件之後，您可以從 Microsoft®Visual Basic®、C++、Microsoft®Internet Explorer 等主應用程式或其它應用程式中呼叫，如同使用 COM 元件一般使用 Script 元件。

備註 為 DHTML 行為撰寫 Script 元件的執行方式與傳統 COM 物件不同。有關詳細資訊，請參閱 Microsoft Site Builder Network (SBN) 網站上的＜Using DHTML Behaviors＞。

根據您的主應用程式、使用的 Script 元件型態以及佈署 Script 元件的位置等差異，有各種不同的選擇方式可建立 Script 元件的執行個體。不過主要的差別在於，您要在區域 (與應用程式同一部電腦) 或者遠端 (在另一部電腦) 建立 Script 元件的執行個體。

不論是哪一種情況，都應該記住幾個重點。如果您建立了 Script 元件的執行個體，並在使用該執行個體時變更 .wsc 檔，則不會更新元件的執行個體。若要更新，必須建立新的 Script 元件執行個體。

實際上可使用的屬性和方法是由 <public> 項目和 Script 元件檔案中的 Script 定義。如果您是在支援陳述式完成的環境下工作，例如 Visual Basic，只要產生並使用型態程式庫，即可看到 Script 元件的屬性和方法。有關詳細資訊，請參閱建立 Script 元件型態程式庫。

如果企圖建立 Script 元件的執行個體失敗，可能是 Script 元件檔案中有語法或執行階段錯誤。任一個 XML 項目中的剖析錯誤 (包括 <registration> 項目) 可能造成執行失敗。在您開發 Script 元件檔案時，應在 <?component?> 處理指令中設定錯誤檢查選項，如檢查 Script 元件檔案的錯誤一節所述。

秘訣 若要讓主應用程式更容易知道 Script 元件公開的 COM 介面，可由 Script 元件執行階段產生一個型態程式庫，其中包含 Script 元件中可用的屬性、方法以及事件等的相關資訊。有關詳細資訊，請參閱建立 Script 元件型態程式庫。

建立 Script 元件的區域執行個體

如果 Script 元件與主應用程式安裝在同一部電腦上，您可依照註冊 Script 元件的說明，將 Script 元件註冊為其自己的元件。然後再利用主應用程式一般建立物件執行個體的方法，例如 CreateObject 函數。比方說，若要在 Visual Basic 中建立一個以程式 ID Component.MyComponent 註冊的 Script 元件執行個體，請使用下列陳述式：

Set oComponent = CreateObject("Component.MyComponent")
備註 如果主應用程式是 Visual Basic，而您要處理 Script 元件所觸發的事件，必須及早將物件與包含 WithEvents 關鍵字的 Dim 陳述式連結，如下所示：
Dim WithEvents scMyComponent As MyComponent
Private Sub Command1_Click()
   Set scMyComponent=CreateObject("MyComponent")
End Sub
附註 有關詳細資訊，請參閱在主應用程式中處理 Script 元件的事件。如果您不打算撰寫 Script 元件事件的處理器，就沒有這個需要。

您可在網頁中利用 <OBJECT> 標記建立 Script 元件的執行個體。您必須知道 Script 元件的物件類別 ID，並將它包含在 <OBJECT> 標記中，如下所示：

<OBJECT
   ID="oComponent"
   CLASSID="clsid:855c8606-49ba-11d2-a428-00c04f8ec80b">
</OBJECT>

要是未在區域電腦上註冊 Script 元件，您可以使用 Script 元件別名來建立其執行個體。GetObject 等函數有支援別名。必須在區域電腦中註冊 Script 元件執行階段 Scrobj.dll。

備註 基於安全理由，Microsoft®Internet Explorer 的 Script 元件並不支援 GetObject 函數。

例如，以下說明如何呼叫 Visual Basic GetObject 函數，以建立未註冊之 Script 元件的執行個體。

Set oComponent = GetObject("script:c:\COM\MyComponent.wsc")

如果別名引用的 .wsc 檔案包含一個以上的 Script 元件，您可使用井字號 (#) 作為分隔符號，將某個 Script 元件的名稱加到檔名後面，以指定執行該 Script 元件。以下會建立包含在 MyComponent.wsc 檔案中 ID 為 "math" 的 Script 元件執行個體：

Set oComponent = GetObject("script:c:\COM\MyComponent.wsc#math")

使用 URL 別名可讓您建立常駐在另一部電腦 (例如 Web 伺服器) 的 Script 元件執行個體。使用完整的 URL (含 HTTP 通訊協定) 作為 Script 元件的位置，如下例所示：

Set oComponent = GetObject("script:http://myserver/MyComponent.wsc")

Internet Explorer 5.0 支援以 DHTML 行為語法建立 Script 元件的執行個體，其執行物件的方法與傳統語法略有不同，而且可確保 Script 元件無法存取潛在不安全的系統物件。相關範例請參閱 Microsoft Site Builder Network (SBN) 網站上的＜Using DHTML Behaviors＞。

建立 Script 元件的遠端執行個體

如果 Script 元件之 <registration> 項目的可遠端存取屬性設定為 "true"，Script 元件就可從另一部電腦使用分散式 COM (DCOM) 在遠端執行。

兩部電腦上都必須安裝基本的 DCOM。如果電腦執行的是下列任一系統，則該電腦就會正確架構 DCOM：

  • Windows NT 4.0
  • 執行 Internet Explorer 4.0 的 Windows 95
  • Windows 95 OEM Service Release 2 (OSR2) 或更新版本。有關詳細資訊，請參閱 Microsoft®網站上的＜Windows 95 OSR2＞網頁。
  • 有 DCOM for Windows 95 的 Windows 95 1.2 版。有關詳細資訊，請參閱 Microsoft®網站上的＜DCOM for Windows 95＞網頁。

Script 元件本身必須佈署如下：

  • 在區域電腦上，不需在執行 Script 元件時要求 Script 元件本身 (.wsc 檔) 或 Script 元件執行階段 (Scrobj.dll)。但是，您必須在區域 DCOM 的 Windows 登錄區中引用遠端 Script 元件。有關詳細資訊，請參閱註冊 Script 元件。
  • 在遠端電腦上，要求 Script 元件和 Script 元件執行階段。兩者都必須註冊。

建立遠端 Script 元件的執行個體時，它在您應用程式中的工作方式就如同區域物件一般；您可以正常呼叫其方法，以及取得與設定其屬性。但是，遠端 Script 元件的 Script 是在遠端機器上執行，而且可存取該機器的資源 (在安全性限制範圍內)。區域機器上主應用程式與遠端機器上 Script 元件之間的通信由 DCOM 在幕後自動處理。

若要建立遠端 Script 元件的執行個體，可呼叫 CreateObject 方法，將遠端電腦名稱當作參數傳給方法。

備註 必須要有 Visual Basic 6.0 或更新版本，或 VBScript 5.0 或更新版本，才能使用 CreateObject 執行遠端 Script 元件。

以下 Visual Basic 範例所示為在命名為 "myserver" 的電腦上執行此項作業的方法：

Set newS = CreateObject("Component.MyComponent", "myserver")
備註 第一次執行遠端 Script 元件時，DCOM 會建立電腦之間的通信，因此可能會稍有延遲。

請參閱

建立註冊資訊 | 建立 Script 元件 | Script 元件的運作方式 | Script 元件簡介 | 註冊 Script 元件


在主應用程式中處理 Script 元件的事件

大多數主應用程式都能像接收其它事件一般接收 Windows®Script 元件的事件。 但是，有些主應用程式需要先設定好之後，才能接收 Script 元件的事件。

備註 如果您建立的是行為 Script 元件，應使用 DHTML 物件模型公開事件。有關詳細資訊，請參閱公開行為 Script 元件 中的自訂事件。

例如在 Visual Basic 中，您必須使用早期 (編譯階段) 連結的元件，才能接收事件。早期連結 需要用到型態程式庫，因此您應已為 Script 元件產生一個型態程式庫。有關詳細資訊，請參閱 建立 Script 元件型態程式庫。此外，您在為元件宣告物件變數 時，必須指定 WithEvents 關鍵字。(Dim 陳述式中使用的物件類別名稱是您在 Script 元件的 <component> 項目中指定的 ID。)

Visual Basic 的範例格式如下：

Dim WithEvents Scriptlet1 as MyScriptlet
Set Scriptlet1 = CreateObject("MyScriptlet")
Sub Scriptlet1_namechanged
   MsgBox("Value of name property changed")
End Sub

請參閱

公開事件


實行 ASP Script 元件

您可利用 Windows®Script 元件包含 Active Server Page (ASP) 的功能。這可讓您將伺服器 Script 隔離為很容易從 ASP 網頁呼叫的元件，可方便再使用 ASP 程式碼。例如，您可能有數個處理表單的 ASP 網頁。ASP 網頁全都可利用您建立的表單處理邏輯呼叫 Script 元件，不必在每一個 ASP 網頁直接實行所有的表單處理邏輯。

若要建立 ASP Script 元件，請依照 Script 元件檔案內容的說明正常建立 Script 元件。利用 <implements> 項目實行 ASP 介面處理器，將 <implements> 項目的型態屬性設定為 "ASP"。這可提供存取 ASP 物件的方法：回應、要求、伺服器、對話過程以及應用程式。您可以像直接在 ASP 網頁中使用這些物件一般，在 ASP Script 元件中使用這些物件。ASP 介面處理器已內建到 Script 元件執行階段 (Scrobj.dll)，因此不需外部介面處理器。

Script 元件執行時，會使用與呼叫它之 ASP 網頁相同的名稱空間。Script 元件可以像在呼叫它的 ASP 網頁中一般存取 Request 和 Server 物件。Script 元件也可如同 ASP 網頁般存取相同的 Session 和 Application 變數。同樣地，如果 ASP Script 元件在 Response 物件上呼叫方法，呼叫網頁也可使用這些呼叫的結果。例如，您若是呼叫 Response.Write，其輸出會送到呼叫 ASP 網頁。

以下所示為公開屬性和方法的簡單 ASP Script 元件。applicationVar1 屬性提供名為 Var1 的假設 Application 變數。AddDate 方法會將目前的日期輸出到呼叫 ASP 網頁。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<component id="ASPScriptlet">
<registration progid="ASPScriptlet"/>

<public>
   <property name="applicationVar1"/>
   <method name="AddDate"/>
</public>

<implements type="ASP"/>
<script language="VBScript">
<![CDATA[
dim applicationVar1
applicationVar1 = Application("Var1")
Sub AddDate()
   Response.Write(Date)
End Sub
]]>
</script>
</component>

The calling ASP page might look like this:

<HTML>
<HEAD>
<TITLE>Testing the Script Components ASP Handler</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1>Testing the ASP Handler</H1>
<%Set wscASP = CreateObject("ASPScriptlet")%>
<P>The current date is <%= wscASP.AddDate()%></P>

<P>The value of the Application(Var1) variable is <%= wscASP.applicationVar1%></P>

</BODY>
</HTML>


實行 DHTML 行為 Script 元件

Windows®Script 元件提供一種精簡，易於維護的方法，以建立實行 Microsoft®Internet Explorer 5.0 中可用 DHTML 行為的元件。使用 Script 元件允許 Script 開發人員利用 Microsoft ®Visual Basic®Scripting 版 (VBScript)、Microsoft®JScript® (ECMAScript) 或支援 Microsoft®ActiveX®Scripting 介面的任何協力廠商 Scripting 實行行為。

有關 DHTML 行為的一般資訊，請參閱 http://msdn.microsoft.com/workshop。

建立行為 Script 元件之後，您可以：

  • 為特定元件，或 DHTML 文件或 DHTML 視窗物件，在 Script 元件中將函數連結到包含文件引起的事件，以公開行為。
  • 定義配置，其中包含在呼叫行為時插入包含文件中的 HTML 文字。
  • 公開擴充包含網頁中之項目成員集的自訂屬性和方法。
  • 公開 Script 元件隨時可觸發的自訂事件。例如，Script 元件可在變更網頁 DHTML 項目的內容後觸發自訂事件。
  • 將 Script 元件函數連結到特定的標準事件，例如載入文件時或項目內容變更時。

您在本節中會看到下列主題的相關資訊：

  • 建立行為 Script 元件
    查看行為 Script 元件檔案中可放入哪些項目、如何與包含文件共享資訊、哪些 DHTML 功能適用於行為 Script 元件以及撰寫 Script 時應注意的事項。
  • 公開行為 Script 元件中的屬性與方法
    建立會擴充 DHTML 項目中已有之屬性與方法的屬性及方法。
  • 公開行為 Script 元件中的自訂事件
    從 Script 元件至包含文件公開並觸發事件。
  • 行為處理器參考
    行為 Script 元件中使用之 XML 項目、屬性以及方法的清單。

請參閱

Microsoft 網站上 Site Builder Network (SBN) Workshop 中的 ＜DHTML Behaviors＞與＜Using DHTML Behaviors＞主題提供 DHTML 行為的一般資訊。


建立行為 Script 元件

建立行為 Script 元件與建立其它任一種 Script 元件很類似，差別只在於您必須將 Microsoft®Internet Explorer 事件連結到為回應這些事件而執行的 Script。

本主題分成以下幾節：

  • 建立行為 Script 元件檔案
  • DHTML 物件模型與行為相關的增強功能
  • 取得 Script 元件中的事件參數
  • 範圍規則
  • 時間安排的考量

建立行為 Script 元件檔案

行為 Script 元件包含一個會指定行為介面處理器 的 <implements> 項目。 您在 <implements> 項目中可使用：

  • <attach> 項目，從包含的 文件將事件連結到 Script 元件中另一個 <script> 項目所建立的 函數。
  • <layout> 項目，定義要插入 包含文件的 HTML 文字。
  • <event> 項目，定義將由 Script 元件觸發的自訂事件。

行為 Script 元件也可包含自訂屬性與方法，用來擴充包含文件中之項目原本已可使用的屬性和方法。有關詳細資訊，請參閱 公開行為 Script 元件中的屬性與方法。

下面範例所示為滑鼠移過包含網頁中的項目時，項目就會變色的行為 Script 元件。其方法為： 將 DHTML onmouseover 和 onmouseout 事件連結到 Script 元件中設定 DHTML 項目樣式屬性的函數。 這個範例也會藉由連結到 DHTML window 物件的 onload 事件，來設定文件啟動時的文件連結顏色。

這個 Script 元件除了將事件連結到 Script 之外，還會將文字插入連結到此 Script 元件之包含文件內 的所有 <H1> 項目。最後則會公開並觸發名為 onchange 的事件，此事件利用 newvalue 自訂屬性來擴充 DHTML window 物件的 event 物件。

備註 必須要有一個 CDATA 區段，使 <script> 項目 中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<?XML version="1.0"?>
<component>
<implements type="Behavior">
   <comment>The following will cause the do_nmousedown and
   do_mouseout functions to be called when the mouse is
   passed over the element in the containing document.</comment>

   <attach event="onmouseover" handler="do_onmouseover"/>
   <attach event="onmouseout" handler="do_onmouseout"/>

   <comment> This will call the init function when the onload
   event of window is fired.</comment>

   <attach for="window" event="onload" handler="docinit"/>

   <comment>The following defines HTML text that will appear in
   the containing document.</comment>

   <layout>
      <h1>This is the HTML to show in the element</h1>
   </layout>

   <comment>The following defines a custom event that is fired
   from within the script component by the fireEvent method.</comment>

   <public>
      <event name="onchange"/>
   </public>

</implements>
<script language="JScript">
<![CDATA[
var normalColor, normalSpacing;
function do_onmouseover(){
   // 儲存原始值。
   normalColor = style.color;
   normalSpacing= style.letterSpacing;
   style.color = "red";
   style.letterSpacing = 2;
   oEvent = createEventObject();
   oEvent.newcolor = "red";
   fireEvent("onchange",oEvent);
}
function do_onmouseout(){
   // 重新設定為原始值。
   style.color = normalColor;
   style.letterSpacing = normalSpacing;
}

function docinit(){
   document.linkColor = "red";
}
]]>
</script>
</component>

前面的程式碼中有幾點必須注意：

  • 在 scrept 元件程序中，事件處理器內隱含的 this 指標引用 的是包含函數，而非觸發事件的項目。
  • 就如同 HTML 網頁一般，可在 Script 元件中的 <script> 裡 放置自建 Script。在這種情況下，全域變數 normalColor 和 normalSpacing 都會在自建 Script 內定義。
    備註 自建 Script 會在行為套用至項目之前執行，而行為會限制自建 Script 中可執行的陳述式。例如，範例中的同一個行為若是公開了名為 hiliteColor 的屬性，自建 Script 就會直接引用 hiliteColor (也就是說，會決定 Script 元件的名稱部分)。但是，若要從自建 Script 中以 Behavior.element.hiliteColor 引用 hiliteColor 的話就違反規則，因為當時的行為尚未套用到項目。有關詳情資訊，請參閱本主題後面所介紹的範圍規則及時間安排的考量。

DHTML 物件模型與行為相關的增強功能

Microsoft®Internet Explorer 5 的 DTHTML 物件模型具有下列增強功能，以增加對行為的支援。

  • 相關樣式表 (CSS) 行為屬性指定行為的位置。
  • DHTML attachEvent 及 detachEvent 方法可指定物件上的事件觸發時會呼叫的函數，使行為 Script 元件從包含網頁接收事件通知。
  • DHTML uniqueID 屬性會啟用行為 Script 元件，為項目指定一個 ID。Script 元件將程式碼編入包含網頁，且必須指定行為所套用之項目的 ID 時，這一點很實用。

取得 Script 元件中的事件參數

在 DHTML 中，DHTML event 物件會提供事件相關的資訊。雖然在 DHTML 中，事件處理器可透過 DHTML window 物件存取 event 物件，但是在行為 Script 元件中，會將 event 物件當作參數傳送到事件處理器。

以下假設計算機 Script 元件的程式碼會顯示與名為 doCalc 之 Script 元件函數連結的鍵盤和滑鼠事件。doCalc 函數使用 event 物件取得觸發事件之條件的相關資訊。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<implements type="Behavior">
   <attach event="onclick" handler="doCalc"/>
   <attach event="onkeydown" handler="doCalc"/>
</implements>

<script language="jscript">
<![CDATA[
function doCalc(oEventParam){
   oElement = oEventParam.srcElement;
   if(oEventParam.type == "keydown"){
      sVal = KeyCodeToChar(oEventParam.keyCode);
   }
   else{
      if (oEventParam.srcElement.type != "button"){
         return;}
      sVal = stripBlanks(oEventParam.srcElement.value);
   }
}
// 此處的其他script
]]>
</script>

範圍規則

處理 Script 元件時，實際上是處理三個名稱部分：行為、項目以及包含文件。範圍規則會在行為 Script 元件中定義決定名稱衝突的順序。決定的名稱順序如下：

名稱決定為 Script 元件中行為所定義者，可能是變數、行為定義的屬性、方法或事件。

如果未順利決定名稱，會將其決定為套用到項目的屬性、方法或事件。

最後，會將名稱決定為套用在包含網頁中 window 物件的屬性、方法或事件。

在下面的範例中，請注意如何利用上述定義的範圍規則來決定名稱：

  • normalColor 決定為 Script 最上方之行為所定義的變數。
  • style 決定為包含文件中項目的 style 屬性。
    <implements type="Behavior">
   <attach event="onmouseover" handler="do_onmouseover"/>
   <attach event="onmouseout "handler="do_onmouseout"/>
</implements>

<script language="JScript">
<![CDATA[
var normalColor, normalSpacing;
function event_onmouseover()
{
   // 儲存原始值。
   normalColor = style.color;
   normalSpacing = style.letterSpacing;

   style.color = "red";
   style.letterSpacing = 2;
}
function event_onmouseout()
{
   // 重新設定為原始值。
   style.color = normalColor;
   style.letterSpacing = normalSpacing;
}
]]>
</script>

時間安排的考量

建立行為時，一定要知道行為套用到項目的時機。要等到套用行為之後，Script 才能存取文件中可能設定之行為定義屬性的值。

由於行為是封裝在與 HTML 文件不同的檔案中，因此會與文件中其它內容分開下載。剖析及載入文件和行為時，行為會藉由 attachNotification 方法指定的函數收到進度通知。目前是以 "contentChange" 或 "documentReady" 通知來通知行為。剖析附加行為之項目的內容，或者之後變更了項目內容時，就會傳送 "contentChange" 通知。下載並剖析文件時，則會傳送 "documentReady" 通知。

由於執行行為後，就會執行 Script 元件檔案中的自建 Script，因此在自建 Script 內可能無法存取行為定義屬性值和文件中設定的屬性值。不過，只要傳送了第一個 "contentChange" 通知後，就能存取這些屬性。

請參閱

公開行為 Script 元件中的屬性與方法 | 公開行為 Script 元件中的自訂事件 | 行為處理器參考


公開行為 Script 元件中的屬性與方法

行為 Script 元件可利用類似 Automation Script 元件的方法公開自訂屬性與方法。行為 Script 元件 的屬性與方法可擴充包含網頁中項目使用的屬性與方法。例如，您可能會建立一個在滑鼠移過項目上方時， 改變項目色彩的行為 Script 元件。透過在 Script 元件中定義屬性，即可於文件中使用該自訂屬性，在本例中 可定義一命名為 hiliteColor 的自訂屬性，讓網頁作者設定醒目提示時的文字色彩。

行為可以取代項目的預設行為，其方式為公開與項目早已定義之屬性或方法同名的屬性或方法。

在 <public> 項目中定義的屬性和方法與用來指定行為處理器的 <implements> 項目中的屬性和方法不同。有關詳細資訊，請參閱 公開屬性和公開方法。

公開屬性

Script 元件中的屬性是在 <public> 項目中公開。以下 Script 元件片段所示為公開自訂屬性 hiliteColor 的行為 Script 元件。如果包含網頁並未 明確設定屬性值，預設值會設定為 "red"。

備註 必須要有一個 CDATA 區段，使 <script> 項目 中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的 一致性。
<public>
   <property name="hiliteColor"/>
</public>

<implements type="Behavior">
   <attach for="window" event="onload" handler="event_onload">
</implements>

<script language="JScript">
<![CDATA[
   var hiliteColor;
   function event_onload(){
      // Initialize the properties.
      if (hiliteColor == null){
         hiliteColor = "red";}
   }
   // Further script here.
]]>
</script>

公開方法

在行為 Script 元件中公開方法的步驟與在 Automation Script 元件中公開的步驟相同。有關詳細資訊 ，請參閱公開方法。在行為 Script 元件中，Script 元件裡公開的方法可 擴充包含文件中原已在使用的方法。

請參閱

公開行為 Script 元件中的自訂事件


公開行為 Script 元件中的自訂事件

行為 Script 元件與 Automation Script 元件一樣，可公開在 Script 元件中觸發的自訂事件，且可在包含的文件中處理。事件在 <public> 項目中宣告，如下所示：

<public>
   <event name="onResultChange" />
</public>

然後可以在 Script 中呼叫 fireEvent 方法以觸發事件：

<script language="JScript">
   // 此處的其他程式碼。
   fireEvent("onResultChange");
   // 此處的其他程式碼。
</script>

行為可公開與已為項目定義之事件同名的事件，藉此取代項目的預設行為。例如，公開 onclick 事件的行為可取代項目的預設 onclick 事件。

取得及設定自訂事件資訊

您的自訂 Script 元件事件可存取維護事件特有資訊的 DHTML 事件物件。您可利用此物件執行下列作業：

  • 變更在呼叫事件中設定之現有事件物件的屬性，例如 keyCode。
  • 建立新事件物件的新 (expando) 屬性，以便將事件相關資訊傳回包含事件。

在 Script 元件程式碼中，呼叫 createEventObject 方法以建立事件物件的新執行個體，然後為新事件物件設定一或數個屬性。在您呼叫 fireEvent 方法時，可以事件名稱傳送新的事件物件。

若要建立新的 expando 屬性，只要在 Script 中指定其值時為其命名。以下所示為如何為事件物件建立名為 myprop 的新屬性：

oEvent = createEventObject();
oEvent.myprop = "a new value"
備註 只有使用 Microsoft®JScript® (或 JavaScript) 時，您才能建立 expando 屬性。Microsoft®Visual Basic®Scripting 版 (VBScript) 並不支援這項功能。

範例

以下 Script 元件片段取自計算機 Script 元件範例。範例中定義了一個自訂的 onResultChange 事件，只要結果改變，就會為包含文件觸發此事件。事件特有的資訊 (實際的計算結果) 會透過名為 result 的 expando 屬性傳送。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <event name="onResultChange" />
</public>

<implements type="Behavior">
   <attach event="onclick" handler="doCalc"/>
</implements>

<script language="JScript">
<![CDATA[
function doCalc()
{
   // 此處程式碼執行計算。結果放在
   // 變數sResult中。
   oEvent = createEventObject();
   oEvent.result = sResult;
   fireEvent("onResultChange",oEvent);
}
]]>
</script>

以下顯示內含的網頁是什麼樣子。如果觸發了onResultChange 事件，計算的結果就會從DHTML window.event 物件中的expando 屬性結果摘錄，並且顯示在resultWindow <DIV> 項目中。

<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
   LK\:CALC {behavior:url(calc.wsc)}
</style>
<script language="JScript">
function showResults(){
   resultWindow.innerText=window.event.result;
}
</script>
</HEAD>

<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
   <DIV ID=resultWindow
      STYLE="border: '.025cm solid gray'"
      ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
   <TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
   <TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>

請參閱

公開行為 Script 元件中的屬性與方法


Script 元件參考

建立 Windows® Script 元件檔案時，使用 XML 項目定義 Script 元件的不同部分，例如註冊資訊、Script 以及您打算在 Script 元件程式碼中引用的物件。您也可以呼叫方法，以便在 Script 元件中執行作業。下表列出了可用的 XML 項目與方法。

備註 行為處理器等特定處理器會公開附加的 XML 元件、方法及其它成員。有關詳細資訊，請參閱特定處理器的說明文件。

XML 項目

  • <?component?>
  • <?XML ?>
  • <comment>
  • <component>
  • <event>
  • <implements>
  • <method>
  • <object>
  • <package>
  • <property>
  • <public>
  • <reference>
  • <registration>
  • <resource>
  • <script>

方法與函數

  • createComponent
  • fireEvent
  • getResource


&lt;?component?&gt;

Windows Script 元件

<?component?>

指定錯誤處理的屬性。

<?component error="flag" debug="flag" ?>

值

flag
布林值："true" 或 "false"、1 或 0、"yes" 或 "no"。所有屬性的預設值為 false。

附註

由於 Script 元件是當作 COM 元件使用，因此通常會很安靜地執行。但是，在您開發 Script 元件檔案時，會發現如果能知道檔案中的錯誤，將有很大的幫助。您可以指定這些錯誤通知的型態：

  • error 將此設定為 true，以允許語法錯誤訊息或 Script 元件檔案中的執行階段錯誤。
  • debug 將此設定為 true，以啟用偵錯。如果未啟用此偵錯，您將無法以任何方式啟動 Script 元件的 Script 偵錯工具。

範例

<?component error="true" debug="true" ?>

請參閱

檢查 Script 元件檔案的錯誤 | Script 元件檔案內容


&lt;?XML ?&gt;

Windows Script 元件

<?XML ?>

指出檔案應當作 XML 剖析。

<?XML version="version" standalone="DTDflag" encoding="encname" ?>

值

version
格式為 n.n 的字串，用以指定檔案的 XML 層次。 使用 1.0 的值。
DTDflag
(選擇性) 指出 XML 檔案中是否包含外部「文件型態定義」(DTD) 引用的布林值。Script 元件 XML 檔案並不包含這類引用，因此這個屬性的值恆為 "yes"。
encname
(選擇性) 描述 XML 文件所使用之字元集編碼方式的字串。此字串可包括任何 Microsoft?Internet Explorer 有支援的字元集。

附註

此宣告必須為檔案中的第一項項目 (包括空格)。

此一宣告的存在會將 Script 元件編譯器置於嚴格的 XML 模式，此處的項目型態與屬性名稱為大小寫相異，屬性值必須以單引號或雙引號括住，而且會剖析所有的項目。如果未包含宣告，編譯器會允許較鬆散的語法。

一般說來，您的 Script 元件檔案若一定會在 XML 相容的編輯器中編輯，應該包含此宣告，並遵循 XML 規格。

範例

<?XML version="1.0" standalone="yes" encoding="UTF-16" ?>

請參閱

Script 元件檔案與 XML 的一致性


<comment> 項目

標示 Script 元件檔案中應略過的文字。

<comment>
   text here
</comment>

備註

使用在其它 XML 項目中的 <comment> 項目圍住非標記也非資料，但是要包含在內以供其它用途的文字，例如說明文件。

範例

以下 Script 元件片段所示為 <public> 項目中的 <comment> 項目。

<public>
   <comment>
      This implements an Automation component with the
      method "random" and the property "uppercaseName"
   </comment>
   <method name="random" internalName="getRandomNumber"/>
   <property name="uppercaseName">
      <get internalName="get_ucname"/>
      <put internalName="put_ucname"/>
   </property>
</public>

請參閱

Script 元件檔案內容


createComponent 函數

將引用傳回同一個封裝中的另一個 Script 元件 (.wsc 檔)。

value = createComponent(componentID)

值

componentID
Script 元件建立執行個體的唯一識別項。

附註

呼叫 createComponent 方法即可在同一個檔案中包含另一個 Script 元件的功能。有關詳細資訊，請參閱 引用同一封裝中的另一個 Script 元件。

範例

下面範例顯示同一個封裝中的兩個 Script 元件。第一個 Script 元件在呼叫其 math 方法時會呼叫第二個 Script 元件。

備註 必須要有一個 CDATA 區段，使 <script> 項目中 的 Script 不會顯示出來。有關詳細資訊，請參閱。
<package>
<component id="component1">
<registration progid="component.FrontEnd"/>
<public>
   <method name="math"/>
</public>
<script language="JScript">
<![CDATA[
function math(){
   return createComponent("component2")
}
]]>
</script>
</component>

<component id="component2">
<registration progid="component.Math"/>
<public>
   <method name="add"/>
</public>
<script language="JScript">
<![CDATA[
function add(n1, n2){
   return n1+n2;
}
]]>
</script>
</component>
</package>

將此封裝註冊後，您可按照下列指令的說明加以使用：

set o1 = CreateObject("component.FrontEnd")
Set o2 = o1.math()
msgbox(o2.add(4,5))

請參閱

引用同一封裝中的另一個 Script 元件


<event> 項目

宣告可從 Script 元件內觸發之自訂事件的名稱。

<event name="name" dispid="dispid"/>

值

name
公開之事件的名稱。
dispid
(選擇性) 指定事件之發送 ID 的數值，會編譯到元件的型態程式庫內，然後由主應用程式用於連結事件。如果您未指定發送 ID，會在建立型態程式庫時自動為事件指定。指定自己的發送 ID 可確保事件的發送 ID 永遠一樣，即使重新建立型態程式庫也不會改變。而且還可讓您將事件對映到特定的發送 ID，例如按照慣例由 COM 所使用者。有關詳細資訊，請參閱公開事件。

附註

若要觸發一個事件，請使用 fireEvent 方法。

範例

下面的 Script 元件片段定義了兩個事件 (namechanged 和 querydone)，並顯示觸發其中一個 (namechanged) 的方法。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <property name="name">
      <get/>
      <put/>
   </property>
   <event name="namechanged"/>
   <event name="querydone" dispid="22"/>
<public>

<script language="VBScript">
<![CDATA[
var gName
Sub get_lowercaseName()
   get_lowercaseName = name
End Sub

Sub put_lowercaseName(newLCName)
   gName = newLCName
   fireEvent("namechanged")
End Sub
   ]]>
</script>

請參閱

<method> 項目 | <property> 項目 | 公開事件 | 公開方法 | 公開屬性 | fireEvent 方法


fireEvent 方法 (Windows Script 元件)

Windows Script 元件

fireEvent 方法

從 Script 元件傳送自訂事件的通知至主應用程式。

fireEvent(eventName[,...])

值

eventName
在 <event> 項目中定義的事件名稱。

附註

事件必須已在 <public> 項目中宣告您才能觸發。

備註 行為處理器公開與 Automation 處理器版本相同的 fireEvent 方法，但是會包含 event 物件的支援。有關詳細資訊，請參閱公開行為 Script 元件中的自訂事件

範例

以下所示為定義事件名稱變更以及觸發方式之 Script 元件的片段。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <property name="name">
      <get/>
      <put/>
   </property>
   <event name="namechanged">
</public>

<script language="VBScript">
<![CDATA[
var name
Sub get_lowercaseName()
   get_lowercaseName = name
End Sub

Sub put_lowercaseName(newLCName)
   name = newLCName
   fireEvent("namechanged")
End Sub
]]>
</script>

請參閱

<event> 項目 | 公開事件 | fireEvent (行為)


getResource 函數

取得以 <resource> 項目定義之資源的值。

value = getResource(resourceID)

值

resourceID
Script 元件內之資源的唯一識別項。

附註

項目允許您將要在 Script 元件中與 Script 混合的字串或數字分離出來。例如， 資源項目通常用於維護可能翻譯為其它語言的字串。您可在 Script 元件的 Script 中使用 getResource 函數 ，以取出 <resource> 項目的內容。

範例

以下 Script 元件片段定義了一個資源 (名為 errNonNumeric) 以及其在 Script 中使用的情形。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <method name="random" internalName="getRandomNumber"/>
</public>
<resource id="errNonNumeric">Non-numeric value passed</resource>

<script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = Cint(upperBound * Rnd + 1)
   Else
      getRandomNumber=getResource("errNonNumeric")
   End If
End Function
]]>
</script>

請參閱

引用其他元件


<implements> 項目

為 Script 元件指定附加的 COM 介面處理器。

<implements type="COMHandlerName" [id="internalName"] [default=fAssumed]>
   handler-specific information here
</implements>

值

COMHandlerName
要引用之介面處理器的名稱。介面處理器通常是當作 DLL 實行，您必須確定它可以使用並已在您的 Script 元件製作環境中註冊。有些處理器，例如 Automation 和 ASP 處理器，是內建在 Script 元件執行階段 (Scrobj.dll) 中。可用的介面處理器範例包括：
介面處理器 | 描述 | 如何實行
ASP | 允許 Script 元件存取 Microsoft Internet Information Services (IIS) Active Server Pages (ASP) 物件模型。 | 內建在 Scrobj.dll 中
DHTML 行為 | 允許行為 Script 元件連上所包含頁，使該元件能引發事件並存取 DHTML 物件模型。 | 內建在 Scrobj.dll 中
internalName
(選擇性) 可用來引用 Script 內處理器的名稱。根據預設，全域名稱空間可使用屬性、方法、事件以及 Script 元件的其它成員。不過，如果 <implements> 項目之間產生命名衝突，可在名稱前面加上其所屬 <implements> 項目的 ID，使其意義清楚，如下所示：
<implements type="Behavior" id="sctBehavior">
   [...]
</implements>

[...]

<script language="JScript">
   // [...]
   sctBehavior.fireEvent("onResultChange",oEvent);
</script>
fAssumed
(選擇性) 指出 Script 中假設了 internalName 的布林旗標。此屬性的預設值為 true，處理器所公開之物件模型的成員會加入全域 Script 名稱空間中，而且可以無條件存取。如果您要將它設定為 false，進而隱藏特定 <implements> 項目的成員，只需包含該屬性即可。

附註

介面處理器會延長 Script 元件執行階段。介面處理器為實行特定 COM 介面的編譯元件 (通常以 C++ 撰寫)。

Script 元件的預設作業是實行 COM Automation 介面 (尤其是 IDispatchEx COM 介面)。Automation 物件的屬性、方法以及事件都定義在 Script 元件的 <public> 項目中。由於預設的作業是實行 Automation 處理器，所以您不需利用 <implements> 項目加以實行。

Script 元件也可以包含 <implements> 項目，以實行附加的 COM 介面。在<implements> 項目中您可以指定實行之介面的特定資訊。每個介面處理器需要不同的資訊。例如，行為 Script 元件可包含 DHTML 行為介面特定的 <attach> 和 <layout> 項目。

範例

<implements type="Behavior">
   <event name="onResultChange" />
</implements>

請參閱

Script 元件的運作方式 | Script 元件檔案內容


<method> 項目

宣告方法。

<method name="methodName" internalName="functionName" dispid=dispID>
   [<parameter name="parameterID"/>]
</method>

值

methodName
要公開之方法的名稱。
functionName
(選擇性) Script 元件檔案中實行方法之程序 (函數或副程式) 的名稱。如果您未指定內部名稱，就會使用 methodName。
秘訣 在 XML 中，您可以藉由使用 /> 來關閉項目的方法，來實行沒有內容的項目 (例如 <method> 項目)。
dispID
(選擇性) 方法的 COM 發送 ID。要是未指定 dispid，會自動產生 dispid。如果 dispid 設定為 0 (零)，方法會變成 Script 元件的預設方法。有關 dispid 的詳細資訊，請參閱公開事件。
parameterID
如果為方法明確宣告了參數，就會識別參數的名稱。

附註

會在另一個 <script> 項目中將方法當作程序 (函數或副程式) 實行。<method> 項目會將方法的名稱對映到其實行方法所使用的程序。

您可以選擇性地為方法宣告參數，但不一定要這麼做，不過您如果為 Script 元件產生型態程式庫，就會公開參數資訊 (請參閱建立 Script 元件型態程式庫)。

範例

以下 Script 元件片段定義了兩種方法 (factorial 與 random)。random 方法包含其參數的定義，並連結一個名為 getRandomNumber 的函數。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <method name="factorial"/>
   <method name="random" internalName="getRandomNumber">
      <parameter name="upperBound">
      <parameter name="seed">
   </method>
</public>

<script language="VBScript">
<![CDATA[
   Function factorial(n)
      If isNumeric(n) Then
         If n <= 1 Then
            factorial = 1
         Else
            factorial = n*factorial(n-1)
         End If
      Else
         factorial = -2    ' Error code.
      End If
   End Function

   Function getRandomNumber(upperBound, seed)
      upperBound = CInt(upperBound)
      Randomize
      getRandomNumber = Cint(upperBound * Rnd(seed) + 1)
   End Function
]]>
</script>

請參閱

<event> 項目 | <property> 項目 | 公開事件 | 公開方法 | 公開屬性


<object> 項目 (Windows Script 元件)

Windows Script 元件

<object> 項目

定義 Script 可引用的物件。

<object id="objID" [classid="clsid:GUID" | progid="progID"] events="true|false"/>

值

objID
可在您的 Script 中引用物件的名稱。物件 ID 的值必須以字母開頭，而且可以包含字母、數字和底線 (_)。物件 ID 在整個 Script 元件範圍內必須為唯一值。例如，您若是指定了名稱 CObj，就可在 Script 中以下列方法引用物件：
x = CObj.Prop1
GUID
(選擇性) 註冊物件使用之物件類別 ID (GUID) 的引用。使用 "clsid:" 加上物件類別 ID (沒有大括弧)。必須指定 classid 或 progid 屬性。例如：
classid="clsid:2154c700-9253-11d1-a3ac-0aa0044eb5f"
progID
(選擇性) 物件的程式 ID，可以指定為物件類別 ID 的替代選項。必須指定 classid 或 progid 屬性。
events
(選擇性) 可以幫助您控制物件中事件的屬性。依預設值，events 為 false。如果屬性為 true，您可以與任何物件會激發的事件連接。您必須在每一個要處理的事件中新增一個物件處理常式。

附註

<object> 項目提供全域公開物件的方法，以便在 Script 元件中的 Scripting 使用，而不必使用 CreateObject() 之類的函數。使用 <object> 項目使物件能供全域範圍使用，並允許 Scripting 工具為物件的成員提供陳述式完成。

範例

以下 Script 元件片段包含一個 <object> 項目，以建立 ADODB.Connection 物件的物件引用。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<registration progid="ADOScriptlet"/>
<object id="cnn" progid="ADODB.Connection"/>
<public>
   <property name="cnnState"/>
   <method name="openconnection"/>
</public>

<script language="VBScript">
<![CDATA[
Dim cnnState
Function openconnection()
   cnn.ConnectionString =
      "driver={SQL Server};server=myserver;uid=sa;database=pubs"
   cnn.Open
   If cnn.State = 1 Then
      cnnState = "open"
      cnn.Close
   Else
      cnnState = "closed"
   End If
End Function
]]>
</script>

請參閱

Script 元件檔案內容


<package> 項目 (Windows Script 元件)

Windows Script 元件

<package> 項目

納入多重 Script 元件定義。

<package>
   一個或多個 script 元件
</package>

附註

當 .wsc 檔只包含一個 Script 元件定義時，<package> 項目為選擇性。

範例

<package>
<component id="MyScriptlet">
   (script component information here)
</component>

<component id="MyOtherScriptlet">
   (script component information here)
</component>
</package>

請參閱

Script 元件檔案內容


<property> 項目

宣告屬性。

<property name="propertyName" [internalName="propertyVariable"] />

– 或 –

<property name="propertyName">
   <get [internalName="getFunctionName"] />
   <put [internalName="putFunctionName"] />
</property>

值

propertyName
要公開之屬性的名稱。除非您指定了 internalName 屬性，否則此名稱必須與全域變數的名稱相符，該變數將用來保存屬性值。
propertyVariable
(選擇性) Script 元件檔案之 <script> 項目中的全域變數名稱，該元件會保存 propertyName 的值。如果您不包含 internalName 屬性，則屬性值會在與 propertyName 相同名稱的變數中維護。指定 internalName 屬性可讓您使用不同的屬性名稱及其對應的全域變數名稱。
getFunctionName
(選擇性) 用來讀取屬性值的程序名稱。如果您包含了 <get> 項目，但是未包含 <put> 項目，其屬性將是唯讀性質。若是包含了 <get> 項目，但是未指定 internalName 屬性，則用來讀取屬性值的方法名稱必須為屬性加上 get_prefix (例如，get_lastname)。
putFunctionName
(選擇性) 用來寫入屬性值的程序名稱。如果您包含了 <put> 項目，但是未包含 <get> 項目，其屬性將是唯寫性質。若是包含了 <put> 項目，但是未指定 internalName 屬性，則用來讀取屬性值的方法名稱必須為屬性加上 put_prefix (例如，put_lastname)。
秘訣 在 XML 中，您可以藉由使用 /> 來關閉項目的方法，以實行沒有內容的項目 (例如 <property> 項目)。

附註

可將屬性當作簡單值公開。此時，會將屬性當作 Script 元件檔案內的全域變數處理。

您也可以將屬性當作程序 (函數或副程式) 實行，允許您計算屬性值及控制屬性究竟是唯讀、可讀寫或唯寫性質。利用這種方法，可在另一個 <script> 項目中將屬性當作程序 (函數或副程式) 實行。<property> 項目會將屬性名稱對應到實行屬性所使用的程序。程序的名稱必須與您在 <property> 項目中指定的內部名稱相符。

呼叫 putFunctionName 時，會傳送一個包含設定屬性值的引數。

除了上述的標準語法外，還有一種易記的表示法可指定其他使用子標記加入的資訊。例如，若要宣告一屬性，其 "get" 與 "put" 存取項與屬性同名，則可以使用下列語法：

<property name="myproperty" get put/>

其功能相當於：

<property name="myproperty">
   <get/>
   <put/>
</property>

如果希望明確指定與預設不同的存取項名稱，則可以使用下列語法：

<property name="myproperty" get="testget" put="testput"/>

若要指定預設屬性，請在 <property> 項目中加入 attribute dispid="0"。有關詳細資訊，請參閱公開屬性。

範例

以下 Script 元件片段所示為四個屬性 (sname、age、dateOfBirth 及 mstatus) 的定義。sname 屬性是一個簡單值。age 屬性為唯讀性質，並以 readAge 函數實行。dateOfBirth 屬性為可讀寫性質，並以 readDOB 和 writeDOB 函數實行。最後的 mstatus 屬性是以預設函數 get_mstatus 和 put_mstatus 實行。

附註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <property name="sname"/>
   <property name="age">
      <get internalName="readAge"/>
   </property>
   <property name="dateOfBirth">
      <get internalName="readDOB"/>
      <put internalName="writeDOB"/>
   </property>
   <property name="mstatus">
      <get/>
      <put/>
   </property>
</public>

<script language="VBScript">
<![CDATA[
Dim sname   ' Read-write sname property (no functions).
Dim gDOB   ' Global variable used to store date of birth.
Dim gMStatus   ' global variable used to store marital status.

Function readDOB()
   ' Gets value of dateOfBirth property.
   readDOB = gDOB
End Function

Function writeDOB(newDOB)
   ' Sets value of dateOfBirth property.
   If isDate(gDOB) Then
      ' Error checking.
      gDOB = newDOB
   End If
End Function

Function readAge()
   ' Calculates read-only age property.
   If isDate(gDOB) Then
      dobM = DatePart("m", gDOB)
      dobD = DatePart("d", gDOB)
      dobY = DatePart("yyyy", gDOB)
      todayY = DatePart("yyyy", Date)
      age = todayY - dobY

      ' Adjust if birthday has not yet occurred this year.
      bday = DateValue(dobM & "/" & dobD & "/" & todayY)
      If DateDiff("d", bday, DateValue(Date)) < 0 Then
         age = age - 1
      End If
      readAge = age
   End If
End Function

Function get_mstatus()
   ' Reads value of mstatus property.
   get_mstatus = gMStatus
End Function

Function put_mstatus(s)
   ' Writes value of mstatus property.
   If s = "M" Or s = "S" Then
      gMStatus = s
   Else
      gMStatus = "?"
   End If
End Function
]]>
</script>

請參閱

<event> 項目 | <method> 項目 | 公開事件 | 公開方法 | 公開屬性


<public> 項目

納入 Script 元件的屬性、方法和事件宣告。

<public>
   <property name="pname"/>
   <method name="mname"/>
   <event name="ename"/>
</public>

請參閱

<event> 項目 | <method> 項目 | <property> 項目 | 公開事件 | 公開方法 | 公開屬性


<reference> 項目 (Windows Script 元件)

Windows Script 元件

<reference> 項目

包含外部型態程式庫的引用。

<reference [object="progID" |guid="typelibGUID"] [version="version"]>

值

progID
可從其中衍生型態程式庫的程式 ID，能包含版本號碼 (例如 ADO.Recordset.2.0)。該版本號碼可包含型態程式庫的明確程式 ID，或者納入型態程式庫之可執行檔 (例如 .DLL 檔) 的程式 ID。如果您使用的是 object 屬性，就不需指定 version 屬性，因為可從程式 ID 推測版本。

如果指定了 object 屬性，不能同時指定 guid 屬性。

typelibGUID
要引用之型態程式庫的 GUID。如果指定了 guid 屬性，不能同時指定 object 屬性。
version
(選擇性) 要使用之型態程式庫的版本號碼。其格式必須為 <minor version>[.<minor version>]。要是未指定版本，預設版本為 1.0。如果使用 object 屬性指定型態程式庫，但是未指定版本的話，將會從指定之程式 ID 的「註冊」機碼取得版本。假使都找不到，則預設值為 1.0。

附註

引用 Script 元件中的型態程式庫可讓您使用 Script 元件中之型態程式庫定義的常數。<reference> 項目會查詢並可以使用與特定程式 ID 或型態程式庫名稱相關的型態程式庫。型態程式庫的資訊可在 .tlb、.olg. 或 dll 檔案中找到。

<reference> 項目應該會在 <component> 項目內出現。如果封裝中有一個以上的 Script 元件，則型態程式庫只會套用到宣告其 <component> 項目的 Script 元件內。

範例

在下列 Script 元件片段中，引用 ADO 型態程式庫 (包含在 MSAD015.DLL 檔中) 可讓您在 Script 中使用 adStateOpen 等 ADO 常數。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<reference object="ADODB.Connection.2.0"/>
<registration progid="ADOScriptlet"/>
<public>
   <property name="cnnstate"/>
   <method name="openConnection"/>
   <method name="closeConnection"/>
</public>

<script language="VBScript">
<![CDATA[
Dim cnn
Dim cnnState
Function openConnection()
   Set cnn = CreateObject("ADODB.Connection")
   cnn.ConnectionString =
      "driver={SQL Server};server=myserver;uid=sa;database=pubs"
   cnn.Open
   If cnn.State = adStateOpen Then
      cnnState = "open"
   Else
      cnnState = "closed"
   End If
End Function

Function closeConnection()
   cnn.Close
   cnnState = "closed"
End Function
]]>
</script>

請參閱

引用其它元件


<registration> 項目

定義用來將 Script 元件註冊為 COM 元件的資訊。

<registration progid="progID" classid="GUID" description="description"
   version="version" [remotable=remoteFlag]/>

– 或 –

<registration progid="progID" classid="GUID" description="description"
      version="version" [remotable=remoteFlag]>
   <script>
      (registration and unregistration script)
   </script>
</registration>

值

progID
(選擇性) 程式設計師建立 Script 元件的執行個體時，用來引用您 Script 元件的文字名稱。例如，您的 Script 元件程式 ID 若是 Component.MyComponent，則可在 Microsoft姬isual Basic 中利用下列陳述式建立其執行個體。

Set Component = CreateObject("Component.MyComponent")

備註 雖然 progid 屬於選擇性，您仍然必須包含 progid 或 classid 屬性 (可以同時包含兩者)。如果只指定 progid 屬性，將會自動產生物件類別 ID。要是只建立物件類別 ID，將不會註冊 progid，而且只能直接引用物件類別 ID 來建立物件。
GUID
(選擇性) 您使用物件類別 ID 產生程式 (例如 Unidgen.exe) 產生的 GUID。如果您未包含物件類別 ID，註冊程式會為您的 Script 元件指定一個物件類別 ID。
description
(選擇性) 儲存在註冊區中 Script 元件的文字描述，用於 Visual Basic 物件瀏覽器等特定工具。
version
(選擇性) 您指定的數字版本號碼。應用程式要求版本特定名稱時，會在程式 ID 之後加上版本，中間以句點隔開 (例如 MyComponent.1)。只能使用數字 (不可以使用小數點)。
備註 registration 屬性可以任何順序出現在 <registration> 項目中。
remoteFlag
(選擇性) 指出是否可利用 DCOM 從遠端執行 Script 元件的布林值。有關詳細資訊，請參閱＜在應用程式中使用 Script 元件＞主題中的建立 Script 元件的遠端執行個體。

附註

建立 Script 元件之後，即可使用 Regsvr32.exe 之類的程式加以註冊，程式會讀取 <registration> 項目中的資訊，然後將它寫入電腦的 Windows「註冊區」中。例如，可利用以下方法註冊 Script 元件：

regsvr32 file:\\myserver\MyComponent.wsc
備註 不一定所有情況都需要 <registration> 項目。例如，在 Microsoft埋nternet Explorer 5.0 中實行 DHTML 行為介面處理器的 Script 元件就不需要註冊，因為 Internet Explorer 在網頁中偵測到行為時就會加以註冊。有關註冊需求的詳細資訊，請參閱您實行之介面處理器的說明文件，並指出 Script 元件將要使用的主機。

如果您未包含物件類別 ID 的資訊，註冊程式在您的 Script 元件註冊時會為其指定物件類別 ID。不過，Script 元件在每一個註冊的地方都會有不同的物件類別 ID。強烈建議您自行為 Script 元件提供物件類別 ID，以確保在所有電腦上註冊之 Script 元件的類別 ID 完全相同。

如果您以會儲存類別 ID 的開發工具使用 Script 元件，讓註冊程式建立物件類別 ID 將會造成問題。要是註冊每次都建立一個新的物件類別 ID，將與應用程式儲存的 ID 不符。

註冊與取消註冊 Script 元件時，您可以選擇性地執行 Script。處理的方式是在 <registration> 項目中包含一個 <script> 項目。若要在註冊時執行 Script，請撰寫 register( ) 函數。若要在取消 Script 元件註冊時執行 Script，應包含 unregister( ) 函數。

範例

以下所示為同時包含程式 ID 和物件類別 ID 的標準 <registration> 項目。

<registration
   progid="Component.TestScript"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
   description="My Test Component"
   version="1"/>

以下 registration 項目允許從 DCOM 執行 Script 元件：

<registration>
   progid="Component.TestScript"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
   version="1"
   description="My Test Component"
   remotable=true/>

以下範例所示為包含將在 Script 元件註冊與取消註冊時執行之 Script 的 <registration> 項目。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<registration
   progid="Component.TestScript"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">
   version="1"
   description="My Test Component">

   <script language="VBScript">
      Function register()
         MsgBox "Component 'My Test Component' registered."
      End Function
      Function unregister()
         MsgBox "Component 'My Test Component' unregistered."
      End Function
   </script>
   ]]>
</registration>

請參閱

建立註冊資訊 | 註冊 Script 元件


<resource> 項目 (Windows Script 元件)

Windows Script 元件

<resource> 項目

獨立文字或數字資料不應固定編入 Script 元件的 Script 中。

<resource id="resourceID">
   text or number here
</resource>

值

resourceID
Script 元件內資源的唯一識別項。

附註

<resource> 項目允許您將要在 Script 元件中與 Script 元件混合的字串或數字分離出來。例如，資源項目通常用於維護可能翻譯為其它語言的字串。

若要取得資源的值，應呼叫 getResource 函數，將您要使用的資源 ID 傳送給它。

範例

以下 Script 元件片段定義了一個資源 (稱為 errNonNumeric)，並展示其如何在 Script 中使用：

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <method name="random" internalName="getRandomNumber"/>
</public>
<resource id="errNonNumeric">
   Non-numeric value passed
</resource>

<script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = Cint(upperBound * Rnd + 1)
   Else
      getRandomNumber=getResource("errNonNumeric")
   End If
End Function
]]>
</script>

請參閱

引用其它元件


<script> 項目 (Windows Script 元件)

Windows Script 元件

<script> 項目

定義 Script 元件的行為。

<script language="language">
   script here
</script>

值

language
Script 元件檔案中使用之 Scripting 語言的名稱，例如 Microsoft® isual Basic®Scripting 版 (VBScript) 或 JScript。

附註

如果未啟用 XML 確認，XML 剖析程式會忽略 <script> 項目中全部的程式行。但是，如果在 Script 元件檔案最前面包含 <?XML ?> 宣告，XML 剖析程式會將 Script 中使用的大於 (<)、小於 (>) 及其它符號誤解為 XML 分隔符號。

如果您正在建立非常符合 XML 語法的檔案，必須確定 Script 元件中的字元不會被當作 XML 保留字元處理。其方法為，將實際的 Script 以 <![CDATA[ ... ]]> 區段圍住。有關 XML 確認的詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。

備註 除非您同時包含了 <?XML ?> 宣告，否則不要包含 CDATA 區段。

範例

<?XML version="1.0"?>
<component id="ScriptletFactorial">
<registration progid="Component.Factorial"/>
<public>
   <method name="factorial"/>
</public>

<script language="VBScript">
<![CDATA[
Function factorial(n)
   If isNumeric(n) Then
      If n <= 1 Then
         factorial = 1
      Else
         factorial = n * factorial(n-1)
      End If
   Else
      factorial = -2   ' Error code.
   End If
End Function
]]>
</script>
</component>

請參閱

Script 元件檔案內容


<component> 項目

圍住整個 Windows Script 元件定義。

<component id=componentid>
   script 元件資訊
</component>

值

componentid
唯一識別 Script 元件的字串。如果文件包含多個 Script 元件，或者您為數個 Script 元件產生一個型態程式庫時，這個值非常實用。識別項必須以字母開頭，而且可以包含空格。識別項在 Script 元件封裝內必須為唯一值。

如果有指定的話，這個值在主應用程式中的作用如同 Script 元件的物件類別名稱。例如，您若在 <component> 項目中指定元件 ID "MyComponent"，Visual Basic 物件瀏覽器中會將 Script 元件識別為 MyComponent 物件類別。要是未指定 Script 元件識別項，預設值為 ComponentCoClass。

附註

在 Script 元件檔案中，完整的 Script 元件定義 — 包括 <registration>、<public> 和 <implements> 項目 — 必須出現在 <component> 項目內。如果檔案包含多個 Script 元件，就必須依序以 <package> 項目將其圍住。

範例

以下範例所示為包含 factorial 方法與 name 屬性簡單但完整的 Script 元件。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<?XML version="1.0"?>
<component>
<registration>
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
</registration>

<public>
   <property name="name"/>
   <method name="factorial"/>
</public>

<script language="VBScript">
   <![CDATA[
   Function factorial(n)
      If isNumeric(n) Then
         If n <= 1 Then
            factorial = 1
         Else
            factorial = n*factorial(n-1)
         End If
      Else
         factorial = -2   ' Error code.
      End If
   End Function
   ]]>
</script>
</component>

請參閱

Script 元件檔案內容


行為處理器參考

Microsoft埋nternet Explorer 利用行為處理器提供行為 Script 元件一種方法，可透過自訂事件連回其包含的網頁，並存取包含文件的物件模型。

以下是行為處理器特定的項目、屬性以及方法。

  • <attach> 項目
  • <layout> 項目
  • element 屬性
  • attachNotification 方法
  • createEventObject 方法
  • fireEvent 方法


<attach> 項目

將包含文件的事件連結到 Script 元件中的函數。

<attach event="eventName" handler="functionName" [for="elementName"]/>

值

eventName
要連結的事件，例如 onmouseclick。
functionName
為回應事件而執行之 Script 元件檔案中的程序 (函數或副程式) 名稱。如果省略此屬性，將會為其產生。

如果未指定 for 屬性，handler 屬性的預設值就是 event 屬性的值。要是指定了 for 屬性，則預設的 handler 屬性值就是連結 for 屬性值、"_" 以及 event 屬性值所產生的字串。

elementName
與事件相關的項目，用於包含 DHTML 行為未明確附加的項目。for 屬性只有 "document"、"window" 及 "element" 這幾個可能值。如果未包含 for 屬性，會以 "element" 作為預設值，並假設在行為附加之項目上觸發。

範例

在下面範例中，<attach> 項目將三個事件連結到函數。例如，DHTML onmouseover 項目會連結到 Script 元件的 do_onmouseover 函數。只有在以行為附加之包含文件中的事件觸發時，才會執行連結到 DHTML onmouseover 和 onmouseout 事件的函數。docinit 函數明確地連結到 DHTML 文件物件的 onload 事件。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<?XML version="1.0"?>
<component id="bvrscript component1">
<registration progID="Behaviorscript component"/>
<implements type="Behavior">
   <attach event="onmouseover" handler="do_onmouseover"/>
   <attach event="onmouseout "handler="do_onmouseout"/>
   <attach for="window" event="onload" handler="docinit"/>
</implements>
<script language="JScript">
<![CDATA[
var normalColor, normalSpacing;
function do_onmouseover(){
   // Save original values.
   normalColor = style.color;
   normalSpacing= style.letterSpacing;
   style.color = "red";
   style.letterSpacing = 2;
}
function do_onmouseout(){
   // Reset to original values.
   style.color = normalColor;
   style.letterSpacing = normalSpacing;
}
function docinit(){
   document.linkColor = "red";
}
]]>
</script>
</component>

請參閱

建立行為 Script 元件


attachNotification 方法

將 Script 元件中的函數連結到主機所發送的通知訊息。

behavior.attachNotification (fpNotify)

值

behavior
用來實行行為介面的 <implements> 項目 ID。
備註 根據預設，行為處理器公開的屬性和方法會自動增加 到全域 Script 名稱空間，而且不必引用行為處理器的 ID 即可存取。在這種情況下，不要使用語法 中所示的 Behavior.attachNotification，可直接在 Script 中將方法當作 attachNotification 使用。有關詳細資訊，請參閱 <implements> 項目。
fpNotify
連結到通知的函數名稱。

附註

目前主機可以下列通知呼叫指定的函數：

  • "contentReady" 行為附加之項目的內容已經改變。剖析了項目的關閉 標記，以及 Script 設定了項目的 DHTML innerHTML 屬性時，就會立刻觸發。行為可使用此通知來擷取 其套用的項目內容。
  • "documentReady" 瀏覽器已將文件剖析完畢。此時可針對內容進行必要的修改或初始化。
    備註 attachNotification 方法不會將文件、視窗或網頁中任何項目內發生的標準 事件通知 Script 元件。建議使用 DHTML achEvent 方法接收這種型態的事件通知。

處理項目之 DHTML樣式屬性的變更，例如設定其可見性、變更色彩或變更字型時，建議您在 Script 元件的 <script> 項目內進行變更，如以下 Script 元件片段所示。在 documentReady 通知子句中變更會造成輕微的閃動。

備註 必須要有一個 CDATA 區段，使 <script> 元件中 的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性 。
<implements type="Behavior"/>
<script language="JScript">
<![CDATA[
   style.color = "green";
   style.letterSpacing = 5;
]]>
</script>

範例

以下範例所示為設定函數以截取通知，並予以適當處理的方法。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的 一致性。
<?XML version="1.0"?>
<component>
<implements type="Behavior">
   <event name="onResultChange"/>
</implements>

<script language="JScript">
<![CDATA[
   attachNotification (onNotification);
   function onNotification (sNotification){
      if (sNotification == "contentReady"){
         // Contents of element have changed.
      }
      else if (sNotification == "documentReady"){
         // Host has finished parsing element.
      }
      window.status = sNotification;
   }
]]>
</script>
</component>

請參閱

<event> 項目


createEventObject 方法

建立一個 DHTML 事件物件，以便在呼叫 fireEvent 方法時，使用此物件將事件內容資訊 傳送到包含文件。

oEvent = behavior.createEventObject()

值

behavior
用來實行行為介面的 <implements> 項目 ID。
備註 根據預設，createEventObject 方法具有全域範圍，而且不必引用行為處理器 ID 即可存取。例如，不要使用語法中所示的 Behavior.createEventObject，就可將函數當作 createEventObject 呼叫。有關詳細資訊，請參閱 <implements> 項目。
oEvent
方法建立的 event 物件。

附註

同一個 event 物件不能一再用於多次呼叫 fireEvent。

範例

以下 Script 元件片段取自假設計算機 Script 元件。只要結果改變，Script 元件就會觸發一個自訂 onResultChange 事件回網頁，將結果當作 event 物件的 expando 屬性傳送。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<component>
<implements type="Behavior">
   <event name="onResultChange"/>
</implements>

<script language="JScript">
<![CDATA[
attachEvent("onclick", doCalc);

function doCalc()
{
   // Code here to perform calculation. Results are placed into
   // the variable sResult.
   oEvent = createEventObject();
   oEvent.result = sResult;
   fireEvent("onResultChange",oEvent);
}
]]>
</script>
</component>

以下所示為包含 DHTML 網頁的外觀。觸發 onResultChange 事件時，會從 DHTML window.event 物件的 expando 屬性 result 取出計算結果，並在 resultWindow <DIV> 項目中顯示。

<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
   LK\:CALC {behavior:url(engine.wsc)}
</style>
<script language="JScript">
function showResults(){
   resultWindow.innerText=window.event.result;
}
</script>
</HEAD>

<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
   <DIV ID=resultWindow
      STYLE="border: '.025cm solid gray'"
         ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
   <TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
   <TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>

請參閱

公開行為 Script 元件中的自訂事件


element 屬性

將項目還原為套用行為狀態。

[oElement = ] Behavior.element

值

oElement
行為套用的項目。
Behavior
用來實行行為介面的 <implements> 項目 ID。
備註 根據預設，行為處理器公開的屬性和方法會自動增加到全域 Script 名稱空間，而且不必引用行為處理器的 ID 即可存取。在這種情況下，不要使用語法中所列的 Behavior.element，只要在 Script 中將直接使用 element 即可。有關詳細資訊，請參閱 <implements> 項目。

附註

屬性為唯讀性質。

有了這項屬性，行為可以和包含文件連接。DHTML 物件模型公開的所有屬性、方法以及事件都可利用這項屬性存取。

範例

以下 Script 元件片段利用 Script 元件實行展開及收起目錄。Script 元件附加到項目的 DHTML onmouseover 事件。它會將 DHTML cursor 項目的屬性設定為 "hand"，以告知使用者，可在項目上按一下來切換其子項目的可見性。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<public>
   <attach event="onmouseover" handler="event_onmouseover");
</public>

<implements type="Behavior"/>
<script language="JScript">
<![CDATA[
   function event_onmouseover()
   {
      oElement = window.event.srcElement;
      if (oElement == element)
         oElement.style.cursor = "hand";
   }
]]>
</script>

請參閱

有關將行為套用至 DHTML 項目的一般資訊，請參閱 Microsoft 網站上 Site Builder Network (SBN) Workshop 的＜Using DHTML Behaviors＞主題。


<layout> 項目

定義插入包含文件中的 HTML 文字。

<layout>
   <HTMLtag>Inserted text</HTMLtag>
</layout>

值

HTMLTag
項目的文字要替換之 HTML 標記的名稱。

附註

呼叫行為時，會將 <layout> 項目中的文字讀入包含文件中對應的項目。此行為相當於設定項目的 DHTML innerHTML 屬性。

如果未將 Script 元件定義為符合 XML，<layout> 項目的內容將不會顯示出來。不過，Script 元件若是符合 XML，就必須將 <layout> 項目的內容包含在 CDATA 中，以明確指定其為不可顯示。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。

範例

以下是具有 <layout> 項目的 Script 元件的範例。由於 Script 元件的最上面包含了 <?XML ?> 宣告，因此 <layout> 項目包含一個 CDATA 區段，使 XML 剖析程式看不到 <layout> 項目的內容。

<?XML version="1.0" ?>
<component id="bvrScriptlet1">
<registration progID="BehaviorScriptlet"/>
<implements type="Behavior">
   <layout>
   <![CDATA[
      <h1>This is the HTML to show in the element</h1>
   ]]>
   </layout>
</implements>
</component>

請參閱

有關將行為套用到 DHTML 項目的一般資訊，請參閱 Microsoft 網站上 Site Builder Network (SBN) Workshop 的＜Using DHTML Behaviors＞主題。


fireEvent 方法 (Windows Script 元件行為)

Windows Script 元件

fireEvent 方法

觸發自訂事件。

Behavior.fireEvent(sEvent[, oEvent])

值

Behavior
用來實行行為介面的 <implements> 項目 ID。
備註 根據預設，行為處理器公開的屬性和方法會自動增加到全域 Script 名稱空間，而且不必引用行為處理器的 ID 即可存取。在這種情況下，不要使用語法中所示的 Behavior.fireEvent，屬性可在 Script 中只當作 fireEvent 使用。有關詳細資訊，請參閱 <implements> 項目。
sEvent
在 <implements> 項目中宣告之自訂事件的名稱。
oEvent
(選擇性) 指定包含內容資訊的 event 物件。Event 物件是利用 createEventObject 方法建立。

附註

同一個 event 物件不能一再用於多次呼叫 fireEvenet 方法。

範例

以下 Script 元件片段取自計算機 Script 元件範例。只要結果改變，Script 元件就會觸發一個自訂 onResultChange 事件回網頁，將結果當作 event 物件的 expando 屬性傳送。

備註 必須要有一個 CDATA 區段，使 <script> 項目中的 Script 不會顯示出來。有關詳細資訊，請參閱 Script 元件檔案與 XML 的一致性。
<component>
<public>
   <event name="onResultChange" />
</public>

<implements type="Behavior">
   <attach event="onclick" handler="doCalc");
</implements>

<script language="JScript">
<![CDATA[
function doCalc(){
   // Code here to perform calculation. Results are placed into
   // the variable sResult.

   oEvent = createObjectEvent();
   oEvent.result = sResult;
   fireEvent("onResultChange",oEvent);
}
]]>
</script>
</component>

以下所示為包含 DHTML 網頁的外觀。onResultChange 事件觸發時，會從 window.event 物件的 expando 屬性 result 取出計算結果，並在 resultWindow <DIV> 項目中顯示。

<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
   LK\:CALC {behavior:url(engine.wsc)}
</style>
<script language="JScript">
function showResults(){
   resultWindow.innerText=window.event.result;
}
</script>
</HEAD>

<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
   <DIV ID=resultWindow
      STYLE="border: '.025cm solid gray'"
      ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
   <TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
   <TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>

請參閱

公開行為 Script 元件中的自訂事件 | fireEvent


Microsoft Windows Script Interfaces-Introduction

Microsoft® Windows® Script Interfaces
Microsoft Windows Script Interfaces-Introduction 		Language Reference
Next

Microsoft® Windows® Script Interfaces introduce a new way for an application to add scripting and OLE Automation capabilities. With the advent of the interfaces, hosts can call upon disparate scripting engines from multiple sources and vendors to perform scripting between components. The implementation of the script itself—language, syntax, persistent format, execution model, and so on—is left to the script vendor. The designers have taken care to allow hosts that rely on Windows Script to use arbitrary language back ends.

  • Windows Script Hosts
  • Windows Script Engines
  • IDispatchEx
  • IProvideMultipleClassInfo
  • Active Script Debugging Interfaces
Windows Script Terms

This list contains definitions of the scripting-related terms used in this document.

Term | Definition
Code object | An instance created by the scripting engine that is associated with a named item, such as the module behind a form in Visual Basic®, or a C++ class associated with a named item. Preferably, this is an OLE Component Object Model (COM) object that supports OLE Automation so the host or other nonscript entity can manipulate the code object.
Named item | An OLE COM object (preferably one that supports OLE Automation) that the host deems interesting to the script. Examples include the HTML Page and Browser in a Web browser, and the Document and Dialogs in Microsoft Word.
Script | The data that makes up the program that the scripting engine runs. A script can be any contiguous executable data, including pieces of text, blocks of pcode, or even machine-specific executable byte codes. A host loads a script into the scripting engine through one of the IPersist* interfaces or through the IActiveScriptParse interface.
Scripting engine | The OLE object that processes scripts. A scripting engine implements the IActiveScript and, optionally, IActiveScriptParse interfaces.
Scripting host | The application or program that owns the Windows Script engine. The host implements the IActiveScriptSite and, optionally, IActiveScriptSiteWindow interfaces.
Scriptlet | A portion of a script that gets attached to an object through the IActiveScriptParse interface. The aggregate collection of scriptlets is the script.
Script language | The language in which a script is written (VBScript, for example) and the semantics of that language.

Windows Script Background

Windows Script components fall into two categories: Windows Script hosts and Windows Script engines. A host creates a scripting engine and calls on the engine to run the scripts. Examples of Windows Script hosts include:

  • Microsoft Internet Explorer
  • Internet authoring tools
  • Shell

Windows Script engines can be developed for any language or run-time environment, including:

  • Microsoft Visual Basic Scripting Edition (VBScript)
  • Perl
  • Lisp

To make implementation of the host as flexible as possible, an OLE Automation wrapper for Windows Script is provided. However, a host that uses this wrapper object to instantiate the scripting engine does not have the degree of control over the run-time name space, the persistence model, and so on, that it would if it used Windows Script directly.

The Windows Script design isolates the interface elements required only in an authoring environment so that nonauthoring hosts (such as browsers and viewers) and script engines (for example, VBScript) can be kept lightweight.

Windows Script Basic Architecture

The following illustration shows the interaction between an Windows Script host and an Windows Script engine.

Following is a description of the steps involved in the interaction between the host and engine. The actual nesting of the function calls is omitted for clarity.

  1. Create a Project. The host loads a project or document. (This step is not particular to Windows Script, but is included here for completeness.)
  2. Create the Windows Script Engine. The host calls CoCreateInstance to create a new Windows Script engine, specifying the class identifier (CLSID) of the specific scripting engine to use. For example, the HTML browsing component of Internet Explorer receives the scripting engine's class identifier through the CLSID= attribute of the HTML <OBJECT> tag.
  3. Load the Script. If the script contents have been persisted, the host calls the script engine's IPersist*::Load method to feed it the script storage, stream, or property bag. Otherwise, the host uses either the IPersist*::InitNew or IActiveScriptParse::InitNew method to create a null script. A host that maintains a script as text can use IActiveScriptParse::ParseScriptText to feed the scripting engine the text of the script, after calling IActiveScriptParse::InitNew.
  4. Add Named Items. For each top-level named item (such as pages and forms) imported into the scripting engine's name space, the host calls the IActiveScript::AddNamedItem method to create an entry in the engine's name space. This step is not necessary if top-level named items are already part of the persistent state of the script loaded in step 3. A host does not use IActiveScript::AddNamedItem to add sublevel named items (such as controls on an HTML page); rather, the engine indirectly obtains sublevel items from top-level items by using the host's ITypeInfo and IDispatch interfaces.
  5. Run the Script. The host causes the engine to start running the script by setting the SCRIPTSTATE_CONNECTED flag in the IActiveScript::SetScriptState method. This call would likely perform any scripting engine construction work, including static binding, hooking up to events (see below), and executing code, in a way similar to a scripted main() function.
  6. Get Item Information. Each time the script engine needs to associate a symbol with a top-level item, it calls the IActiveScriptSite::GetItemInfo method, which returns information about the given item.
  7. Hook Up Event Advise. Before starting the actual script, the scripting engine connects to the events of all the relevant objects through the IConnectionPoint interface.
  8. Invoke Properties and Methods. As the script runs, the scripting engine realizes references to methods and properties on named objects through IDispatch::Invoke or other standard OLE binding mechanisms.


Windows Script Hosts

Microsoft® Windows® Script Interfaces
Windows Script Hosts 		Language Reference
Previous
Next

When implementing Microsoft® Windows® Script host, you can safely assume that a scripting engine will only call the IActiveScriptSite interface in the context of the base thread as long as the host does the following:

  • Chooses a base thread (generally the thread that contains the message loop).
  • Instantiates the scripting engine in the base thread.
  • Calls scripting engine methods only from the base thread, except where specifically allowed, as in the cases of IActiveScript::InterruptScriptThread and IActiveScript::Clone.
  • Calls the scripting engine's dispatch object only from the base thread.
  • Ensures that the message loop runs in the base thread if a window handle is provided.
  • Ensures that objects in the host's object model only source events in the base thread.

These rules are automatically followed by all single-threaded hosts. The restricted model described above is intentionally loose enough to allow a host to abort a stuck script by calling IActiveScript::InterruptScriptThread from another thread (initiated by a CTRL+BREAK handler or the like), or to duplicate a script in a new thread using IActiveScript::Clone.

Also, none of these restrictions apply to a host that chooses to implement a free-threaded IActiveScriptSite interface and a free-threaded object model. Such a host can use the IActiveScript interface from any thread, without restriction.


Windows Script Engines

Microsoft® Windows® Script Interfaces
Windows Script Engines 		Language Reference
Previous
Next

To implement an Microsoft® Windows® Script engine, create an OLE COM object that supports the following interfaces.

Interface | Description
IActiveScript | Provides the basic scripting ability. Implementation of this interface is required.
IActiveScriptParse | Provides the ability to add script text, evaluate expressions, and so on. Implementation of this interface is optional; however, if it is not implemented, the script engine must implement one of the IPersist* interfaces in order to load a script.
IPersist* Provides persistence support. Implementation of at least one of the following interfaces is required if IActiveScriptParse is not implemented.
Interface | Description
IPersistStorage | Provides support for the DATA={url} attribute in the OBJECT tag.
IPersistStreamInit | Provides support for the same as IPersistStorage as well as the DATA="string-encoded byte stream" attribute in the OBJECT tag.
IPersistPropertyBag | Provides support for the PARAM= attribute in the OBJECT tag.

Note: It is possible that the scripting engine will never be called upon to save or restore a script state through IPersist*. Instead, IActiveScriptParse is used by calling IActiveScriptParse::InitNew to create a blank script, then scriptlets are added and connected to events with IActiveScriptParse::AddScriptlet and general code is added with IActiveScriptParse::ParseScriptText. Nonetheless, a scripting engine should fully implement at least one IPersist* interface (preferably IPersistStreamInit), because other host applications may try to make use of them.

The following sections describe implementing a Windows Scripting engine in more detail.

  • Registry Standard
  • Script Engine States
  • Scripting Engine Threading

See the Script Interface Reference for more information.

Registry Standard

An Windows Script engine can identify itself using component categories. Windows Script currently defines two component categories.

Category | Decription
CATID_ActiveScript | Indicates that the class identifiers (CLSIDs) are Windows Script engines that support, at a minimum, the IActiveScript interface and a persistence mechanism (the IPersistStorage, IPersistStreamInit, or IPersistPropertyBag interface).
CATID_ActiveScriptParse | Indicates that the CLSIDs are Windows Script engines that support, at a minimum, the IActiveScript and IActiveScriptParse interfaces.

Although IActiveScriptParse is not a true persistence mechanism, it does support the IActiveScriptParse::InitNew method that is functionally equivalent to IPersist*::InitNew.

Script Engine States

At any given time, an Windows Script engine can be in one of several states.

State | Descriptioon
uninitialized | The script has not been initialized or loaded using an IPersist* interface, or does not have an IActiveScriptSite interface set. The scripting engine is generally not usable from this state until the script is loaded.
initialized The script has been initialized with an IPersist* interface and has an IActiveScriptSite interface set, but is not connected to host objects and sinking events. Note that this state simply means that the IPersist*::Load, IPersist*::InitNew, or IActiveScriptParse::InitNew method has been completed, and that the IActiveScript::SetScriptSite method has been called. The engine cannot run code in this mode. The engine queues code that the host passes to it through the IActiveScriptParse::ParseScriptText method, and executes the code after transitioning to the started state.

Because languages can vary widely in semantics, scripting engines are not required to support this state transition. Engines that support the IActiveScript::Clone method must, however, support this state transition. Hosts must prepare for this transition and take the appropriate action: release the current scripting engine, create a new scripting engine, and call IPersist*::Load, IPersist*::InitNew, or IActiveScriptParse::InitNew (and possibly also call IActiveScriptParse::ParseScriptText). Use of this transition should be considered an optimization of the above steps. Note that any information the scripting engine has obtained about the names of Named Items and the type information describing Named Items remains valid.

Because languages vary widely, defining the exact semantics of this transition is difficult. At a minimum, the scripting engine must disconnect from all events, and release all of the SCRIPTINFO_IUNKNOWN pointers obtained by calling the IActiveScriptSite::GetItemInfo method. The engine must re-obtain these pointers after the script is run again. The scripting engine should also reset the script back to an initial state that is appropriate for the language. VBScript, for example, resets all variables and retains any code added dynamically by calling IActiveScriptParse::ParseScriptText with the SCRIPTTEXT_ISPERSISTENT flag set. Other languages may need to retain current values (such as Lisp because there is no code/data separation) or reset to a well-known state (this includes languages with statically initialized variables).

Note that the transition to the started state should have the same semantics (that is, it should leave the scripting engine in the same state) as calling IPersist*::Save to save the scripting engine, and then calling IPersist*::Load to load a new scripting engine; these actions should have the same semantics as IActiveScript::Clone. Scripting engines that do not yet support IActiveScript::Clone or IPersist* should carefully consider how the transition to the started state should behave, so that such a transition would not violate the above conditions if IActiveScript::Clone or IPersist* support was later added.

During this transition to the started state, the scripting engine will disconnect from event sinks after the appropriate destructors, and so on, are executed in the script. To avoid having these destructors executed, the host can first move the script into the disconnected state before moving into the started state.

Use IActiveScript::InterruptScriptThread to cancel a running script thread without waiting for current events, and so on, to finish running.

started | The transition from the initialized state to the started state causes the engine to execute any code that was queued in the initialized state. The engine can execute code while in the started state, but it is not connected to any events added through the IActiveScript::AddNamedItem method. The engine can execute code by calling the IDispatch interface obtained from the IActiveScript::GetScriptDispatch method, or by calling IActiveScriptParse::ParseScriptText. It is possible that further background initialization (progressive loading) is still ongoing, and that calling the IActiveScript::SetScriptState method with the SCRIPTSTATE_CONNECTED flag set may cause the script to block until initialization is complete.
connected | The script is loaded and connected for sinking events from host objects. If this is a transition from the initialized state, the scripting engine should transition through the started state, performing the necessary actions, before entering the connected state and connecting to events.
disconnected | The script is loaded and has a run-time state, but is temporarily disconnected from sinking events from host objects. This can be done either logically (ignoring events received) or physically (calling IConnectionPoint::Unadvise on the appropriate connection points). If this is a transition from the initialized state, the scripting engine should transition through the started state, performing the necessary actions, before entering the disconnected state. Event sinks that are in progress are completed before the state changes (use IActiveScript::InterruptScriptThread to cancel a running script thread). This state is distinguished from the initialized state in that the transition to this state does not cause the script to reset, the run-time state of the script is not reset, and a script initialization procedure is not executed.
closed | The script has been closed. The scripting engine no longer works and returns errors for most methods.

The following illustration shows the relationships between the various scripting engine states, and shows the methods that cause transitions from one state to another.

The following illustration shows the actions that the scripting engine performs during the various state transitions.

Scripting Engine Threading

Because an Windows Script engine can be used in many environments, it is important to keep its execution model as flexible as possible. For example, a server-based host may need to preserve a multithreaded design while using Windows Script in an efficient manner. At the same time, a host that does not use threading, such as a typical application, should not be burdened with threading management. Windows Script achieves this balance by restricting the ways a free-threaded scripting engine can call back to the host, freeing hosts from this burden.

Scripting engines used on servers are typically implemented as free-threading COM objects. This means that methods on the IActiveScript interface and its associated interfaces can be called from any thread in the process, without marshaling. (Unfortunately, this also means that the scripting engine must be implemented as an in-process server, because OLE does not currently support interprocess marshaling of free-threaded objects.) Synchronization is the responsibility of the scripting engine. For scripting engines that are not internally reentrant, or for language models that are not multithreaded, synchronization could be as simple as serializing access to the scripting engine with a mutex. Of course certain methods, such as IActiveScript::InterruptScriptThread, should not be serialized in this way so that a stuck script can be terminated from another thread.

The fact that IActiveScript is typically free-threaded generally implies that the IActiveScriptSite interface and the host's object model should be free-threaded as well. This would make implementation of the host quite difficult, particularly in the common case where the host is a single-threaded Microsoft Windows®-based application with single-threaded or apartment-model ActiveX Controls in its object model. For this reason, the following constraints are placed on the scripting engine's use of IActiveScriptSite:

  • The script site is always called in the context of a host thread. That is, the scripting engine never calls the script site in the context of a thread that the scripting engine created, but only from within a scripting engine method that was called from the host through IActiveScript and its derivatives, through the exposed scripting engine's dispatch object, through a Windows message, or from an event source in the host's object model.
  • The script site is never called from within the context of a simple thread state control method (for example, the IActiveScript::InterruptScriptThread method) or from the IActiveScript::Clone method.


Windows Script Interface Reference

Microsoft® Windows® Script Interfaces
Windows Script Interface Reference 		Language Reference
Previous
Next

The following interfaces are specific to Microsoft® Windows® Script hosts:

  • IActiveScriptSite
  • IActiveScriptSiteWindow

The following interfaces are specific to Windows Script Engines.

  • IActiveScript
  • IActiveScriptError
  • IActiveScriptParse

The following enumerations are specific to Windows Script Engines.

  • SCRIPTSTATE
  • SCRIPTTHREADSTATE


IActiveScript

Microsoft® Windows® Script Interfaces
IActiveScript 		Language Reference
Previous
Next

The IActiveScript interface provides the methods necessary to initialize the scripting engine. The scripting engine must implement the IActiveScript interface.

Methods in Vtable Order

Method | Description
SetScriptSite | Informs the scripting engine of the IActiveScriptSite site provided by the host.
GetScriptSite | Retrieves the site object associated with the Windows Script engine.
SetScriptState | Places the scripting engine into the specified state.
GetScriptState | Retrieves the current state of the scripting engine.
Close | Causes the scripting engine to abandon any currently loaded script, lose its state, and release any interface pointers it has to other objects, thus entering a closed state.
AddNamedItem | Adds the name of a root-level item to the scripting engine's name space.
AddTypeLib | Adds a type library to the name space for the script.
GetScriptDispatch | Retrieves the IDispatch interface for the running script.
GetCurrentScriptThreadID | Retrieves a scripting-engine-defined identifier for the currently executing thread.
GetScriptThreadID | Retrieves a scripting-engine-defined identifier for the thread associated with the given Microsoft Win32® thread.
GetScriptThreadState | Retrieves the current state of a script thread.
InterruptScriptThread | Interrupts the execution of a running script thread.
Clone | Clones the current scripting engine (minus any current execution state), returning a loaded scripting engine that has no site in the current thread.


IActiveScript::AddNamedItem

Microsoft® Windows® Script Interfaces
IActiveScript::AddNamedItem 		Language Reference
Previous
Next

HRESULT AddNamedItem(
    LPCOLESTR pstrName,  // address of item name
    DWORD dwFlags        // item flags
);

Adds the name of a root-level item to the scripting engine's name space. A root-level item is an object with properties and methods, an event source, or all three.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

pstrName
[in] Address of a buffer that contains the name of the item as viewed from the script. The name must be unique and persistable.
dwFlags
[in] Flags associated with an item. Can be a combination of these values:

Value | Meaning
SCRIPTITEM_CODEONLY | Indicates that the named item represents a code-only object, and that the host has no IUnknown to be associated with this code-only object. The host only has a name for this object. In object-oriented languages such as C++, this flag would create a class. Not all languages support this flag.
SCRIPTITEM_GLOBALMEMBERS | Indicates that the item is a collection of global properties and methods associated with the script. Normally, a scripting engine would ignore the object name (other than for the purpose of using it as a cookie for the IActiveScriptSite::GetItemInfo method, or for resolving explicit scoping) and expose its members as global variables and methods. This allows the host to extend the library (run-time functions and so on) available to the script. It is left to the scripting engine to deal with name conflicts (for example, when two SCRIPTITEM_GLOBALMEMBERS items have methods of the same name), although an error should not be returned because of this situation.
SCRIPTITEM_ISPERSISTENT | Indicates that the item should be saved if the scripting engine is saved. Similarly, setting this flag indicates that a transition back to the initialized state should retain the item's name and type information (the scripting engine must, however, release all pointers to interfaces on the actual object).
SCRIPTITEM_ISSOURCE | Indicates that the item sources events that the script can sink. Child objects (properties of the object that are in themselves objects) can also source events to the script. This is not recursive, but it provides a convenient mechanism for the common case, for example, of creating a container and all of its member controls.
SCRIPTITEM_ISVISIBLE | Indicates that the item's name is available in the name space of the script, allowing access to the properties, methods, and events of the item. By convention the properties of the item include the item's children; therefore, all child object properties and methods (and their children, recursively) will be accessible.
SCRIPTITEM_NOCODE | Indicates that the item is simply a name being added to the script's name space, and should not be treated as an item for which code should be associated. For example, without this flag being set, VBScript will create a separate module for the named item, and C++ might create a separate wrapper class for the named item.


IActiveScript::AddTypeLib

Microsoft® Windows® Script Interfaces
IActiveScript::AddTypeLib 		Language Reference
Previous
Next

HRESULT AddTypeLib(
    REFGUID guidTypeLib,  // CLSID of type library
    DWORD dwMaj,          // major version number
    DWORD dwMin,          // minor version number
    DWORD dwFlags         // option flags
);

Adds a type library to the name space for the script. This is similar to the #include directive in C/C++. It allows a set of predefined items such as class definitions, typedefs, and named constants to be added to the run-time environment available to the script.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).
    TYPE_E_CANTLOADLIBRARY | The specified type library could not be loaded.

guidTypeLib
[in] CLSID of the type library to add.
dwMaj
[in] Major version number.
dwMin
[in] Minor version number.
dwFlags
[in] Option flags. Can be the following:

Value | Meaning
SCRIPTTYPELIB_ISCONTROL | The type library describes an ActiveX control used by the host.


IActiveScript::Clone

Microsoft® Windows® Script Interfaces
IActiveScript::Clone 		Language Reference
Previous
Next

HRESULT Clone(
    IActiveScript **ppscript  // receives pointer to IActiveScript
);

Clones the current scripting engine (minus any current execution state), returning a loaded scripting engine that has no site in the current thread. The properties of this new scripting engine will be identical to the properties the original scripting engine would be in if it were transitioned back to the initialized state.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_NOTIMPL | This method is not supported.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

ppscript
[out] Address of a variable that receives a pointer to the IActiveScript interface of the cloned scripting engine. The host must create a site and call the IActiveScript::SetScriptSite method on the new scripting engine before it will be in the initialized state and, therefore, usable.

The IActiveScript::Clone method is an optimization of IPersist*::Save, CoCreateInstance, and IPersist*::Load, so the state of the new scripting engine should be the same as if the state of the original scripting engine were saved and loaded into a new scripting engine. Named items are duplicated in the cloned scripting engine, but specific object pointers for each item are forgotten and are obtained with the IActiveScriptSite::GetItemInfo method. This allows an identical object model with per-thread entry points (an apartment model) to be used.

This method is used for multithreaded server hosts that can run multiple instances of the same script. The scripting engine may return E_NOTIMPL, in which case the host can achieve the same result by duplicating the persistent state and creating a new instance of the scripting engine with an IPersist* interface.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::Close

Microsoft® Windows® Script Interfaces
IActiveScript::Close 		Language Reference
Previous
Next

HRESULT Close(void);

Causes the scripting engine to abandon any currently loaded script, lose its state, and release any interface pointers it has to other objects, thus entering a closed state. Event sinks, immediately executed script text, and macro invocations that are already in progress are completed before the state changes (use IActiveScript::InterruptScriptThread to cancel a running script thread). This method must be called by the creating host before the interface is released to prevent circular reference problems.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine was already in the closed state).
    OLESCRIPT_S_PENDING | The method was queued successfully, but the state hasn't changed yet. When the state changes, the site will be called back on the IActiveScriptSite::OnStateChange method.
    S_FALSE | The method succeeded, but the script was already closed.


IActiveScript::GetCurrentScriptThreadID

Microsoft® Windows® Script Interfaces
IActiveScript::GetCurrentScriptThreadID 		Language Reference
Previous
Next

HRESULT GetCurrentScriptThreadID(
    SCRIPTTHREADID *pstidThread  // receives scripting thread identifier
);

Retrieves a scripting-engine-defined identifier for the currently executing thread. The identifier can be used in subsequent calls to script thread execution-control methods such as the IActiveScript::InterruptScriptThread method.

  • Returns S_OK if successful, or E_POINTER if an invalid pointer was specified.
pstidThread
[out] Address of a variable that receives the script thread identifier associated with the current thread. The interpretation of this identifier is left to the scripting engine, but it can be just a copy of the Windows thread identifier. If the Win32 thread terminates, this identifier becomes unassigned and can subsequently be assigned to another thread.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::GetScriptDispatch

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptDispatch 		Language Reference
Previous
Next

HRESULT GetScriptDispatch(
    LPCOLESTR pstrItemName  // address of item name
    IDispatch **ppdisp      // receives IDispatch pointer
);

Retrieves the IDispatch interface for the methods and properties associated with the currently running script.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).
    S_FALSE | The scripting engine does not support a dispatch object; the ppdisp parameter is set to NULL.

pstrItemName
[in] Address of a buffer that contains the name of the item for which the caller needs the associated dispatch object. If this parameter is NULL, the dispatch object contains as its members all of the global methods and properties defined by the script. Through the IDispatch interface and the associated ITypeInfo interface, the host can invoke script methods or view and modify script variables.
ppdisp
[out] Address of a variable that receives a pointer to the object associated with the script's global methods and properties. If the scripting engine does not support such an object, NULL is returned.

Because methods and properties can be added by calling the IActiveScriptParse interface, the IDispatch interface returned by this method can dynamically support new methods and properties. Similarly, the IDispatch::GetTypeInfo method should return a new, unique ITypeInfo interface when methods and properties are added. Note, however, that language engines must not change the IDispatch interface in a way that is incompatible with any previous ITypeInfo interface returned. That implies, for example, that DISPIDs will never be reused.


IActiveScript::GetScriptSite

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptSite 		Language Reference
Previous
Next

HRESULT GetScriptSite(
    REFIID iid,           // interface identifier
    void **ppvSiteObject  // address of host site interface
);

Retrieves the site object associated with the Windows Script engine.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_NOINTERFACE | The specified interface is not supported.
    E_POINTER | An invalid pointer was specified.
    S_FALSE | No site has been set; the ppvSiteObject parameter is set to NULL.

iid
[in] Identifier of the requested interface.
ppvSiteObject
[out] Address of the location that receives the interface pointer to the host's site object.


IActiveScript::GetScriptState

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptState 		Language Reference
Previous
Next

HRESULT GetScriptState(
    SCRIPTSTATE *pss  // address of structure for state information
);

Retrieves the current state of the scripting engine. This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.

  • Returns S_OK if successful, or E_POINTER if an invalid pointer was specified.
pss
[out] Address of a variable that receives a value defined in the SCRIPTSTATE enumeration. The value indicates the current state of the scripting engine associated with the calling thread.


IActiveScript::GetScriptThreadID

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptThreadID 		Language Reference
Previous
Next

HRESULT GetScriptThreadID(
    DWORD dwWin32ThreadID,       // Win32 thread identifier
    SCRIPTTHREADID *pstidThread  // receives scripting thread identifier
);

Retrieves a scripting-engine-defined identifier for the thread associated with the given Win32 thread.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized) and therefore failed.

dwWin32ThreadID
[in] Thread identifier of a running Win32 thread in the current process. Use the GetCurrentScriptThreadID function to retrieve the thread identifier of the currently executing thread.
pstidThread
[out] Address of a variable that receives the script thread identifier associated with the given Win32 thread. The interpretation of this identifier is left to the scripting engine, but it can be just a copy of the Windows thread identifier. Note that if the Win32 thread terminates, this identifier becomes unassigned and may subsequently be assigned to another thread.

The retrieved identifier can be used in subsequent calls to script thread execution control methods such as the IActiveScript::InterruptScriptThread method.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::GetScriptThreadState

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptThreadState 		Language Reference
Previous
Next

HRESULT GetScriptThreadState(
    SCRIPTTHREADID stidThread,    // identifier of script thread
    SCRIPTTHREADSTATE *pstsState  // receives state flag
);

Retrieves the current state of a script thread.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

stidThread
[in] Identifier of the thread for which the state is desired, or one of the following special thread identifiers:

Value | Meaning
SCRIPTTHREADID_BASE | The base thread; that is, the thread in which the scripting engine was instantiated.
SCRIPTTHREADID_CURRENT | The currently executing thread.

pstsState
[out] Address of a variable that receives the state of the indicated thread. The state is indicated by one of the named constant values defined by the SCRIPTTHREADSTATE enumeration. If this parameter does not identify the current thread, the state may change at any time.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::InterruptScriptThread

Microsoft® Windows® Script Interfaces
IActiveScript::InterruptScriptThread 		Language Reference
Previous
Next

HRESULT InterruptScriptThread(
    SCRIPTTHREADID   stidThread,  // identifier of thread
    const EXCEPINFO *pexcepinfo,  // receives error information
    DWORD dwFlags
);

Interrupts the execution of a running script thread (an event sink, an immediate execution, or a macro invocation). This method can be used to terminate a script that is stuck (in an infinite loop, for example). It can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite method.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

stidThread
[in] Identifier of the thread to interrupt, or one of the following special thread identifier values:

Value | Meaning
SCRIPTTHREADID_ALL | All threads. The interrupt is applied to all script methods currently in progress. Note that unless the caller has requested that the script be disconnected, by calling the IActiveScript::SetScriptState method with the SCRIPTSTATE_DISCONNECTED or SCRIPTSTATE_INITIALIZED flag set, the next scripted event causes script code to run again.
SCRIPTTHREADID_BASE | The base thread; that is, the thread in which the scripting engine was instantiated.
SCRIPTTHREADID_CURRENT | The currently executing thread.

pexcepinfo
[in] Address of an EXCEPINFO structure that receives error information associated with the error condition.
dwFlags
[in] Option flags associated with the interruption. Can be one of these values:

Value | Meaning
SCRIPTINTERRUPT_DEBUG | If supported, enter the scripting engine's debugger at the current script execution point.
SCRIPTINTERRUPT_RAISEEXCEPTION | If supported by the scripting engine's language, let the script handle the exception. Otherwise, the script method is aborted and the error code is returned to the caller; that is, the event source or macro invoker.


IActiveScript::SetScriptSite

Microsoft® Windows® Script Interfaces
IActiveScript::SetScriptSite 		Language Reference
Previous
Next

HRESULT SetScriptSite(
    IActiveScriptSite *pScriptSite  // address of host script site
);

Informs the scripting engine of the IActiveScriptSite interface site provided by the host. This method must be called before any other IActiveScript interface methods can be used.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_FAIL | An unspecified error occurred; the scripting engine was unable to finish initializing the site.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, a site was already set).

pScriptSite
[in] Address of the host-supplied script site to be associated with this instance of the scripting engine. The site must be uniquely assigned to this scripting engine instance; it cannot be shared with other scripting engines.


IActiveScript::SetScriptState

Microsoft® Windows® Script Interfaces
IActiveScript::SetScriptState 		Language Reference
Previous
Next

HRESULT SetScriptState(
    SCRIPTSTATE ss  // identifier of new state
);

Puts the scripting engine into the given state. This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.

  • Returns one of the following values:
    Return Value | Meaning
    S_OK | Success.
    E_FAIL | The scripting engine does not support the transition back to the initialized state. The host must discard this scripting engine and create, initialize, and load a new scripting engine to achieve the same effect.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized) and therefore failed.
    OLESCRIPT_S_PENDING | The method was queued successfully, but the state has not changed yet. When the state changes, the site will be called back through the IActiveScriptSite::OnStateChange method.
    S_FALSE | The method succeeded, but the script was already in the given state.
ss
[in] Sets the scripting engine to the given state. Can be one of the values defined in the SCRIPTSTATE enumeration.

For more information about scripting engine states, see Script Engine States.

See also IActiveScript::Clone, IActiveScript::GetScriptDispatch, IActiveScript::InterruptScriptThread, IActiveScriptParse::ParseScriptText, IActiveScriptSite::GetItemInfo


IActiveScriptError

Microsoft® Windows® Script Interfaces
IActiveScriptError 		Language Reference
Previous
Next

An object implementing this interface is passed to the IActiveScriptSite::OnScriptError method whenever the scripting engine encounters an unhandled error. The host then calls methods on this object to obtain information about the error that occurred.

Methods in Vtable Order

Method | Description
GetExceptionInfo | Retrieves information about an error.
GetSourcePosition | Retrieves the location in the source code where an error occurred.
GetSourceLineText | Retrieves the line in the source file where an error occurred.


IActiveScriptError::GetExceptionInfo

Microsoft® Windows® Script Interfaces
IActiveScriptError::GetExceptionInfo 		Language Reference
Previous
Next

HRESULT GetExceptionInfo(
    EXCEPINFO *pexcepinfo  // structure for exception information
);

Retrieves information about an error that occurred while the scripting engine was running a script.

  • Returns S_OK if successful, or E_FAIL if an error occurred.
pexcepinfo
[out] Address of an EXCEPINFO structure that receives error information.


IActiveScriptError::GetSourceLineText

Microsoft® Windows® Script Interfaces
IActiveScriptError::GetSourceLineText 		Language Reference
Previous
Next

HRESULT GetSourceLineText(
    BSTR *pbstrSourceLine  // address of buffer for source line
);

Retrieves the line in the source file where an error occurred while a scripting engine was running a script.

  • Returns S_OK if successful, or E_FAIL if the line in the source file was not retrieved.
pbstrSourceLine
[out] Address of a buffer that receives the line of source code in which the error occurred.


IActiveScriptError::GetSourcePosition

Microsoft® Windows® Script Interfaces
IActiveScriptError::GetSourcePosition 		Language Reference
Previous
Next

HRESULT GetSourcePosition(
    DWORD *pdwSourceContext,  // context cookie
    ULONG *pulLineNumber,     // line number of error
    LONG *pichCharPosition    // character position of error
);

Retrieves the location in the source code where an error occurred while the scripting engine was running a script.

  • Returns S_OK if successful, or E_FAIL if the location was not retrieved.
pdwSourceContext
[out] Address of a variable that receives a cookie that identifies the context. The interpretation of this parameter depends on the host application.
pulLineNumber
[out] Address of a variable that receives the line number in the source file where the error occurred.
pichCharPosition
[out] Address of a variable that receives the character position in the line where the error occurred.


IActiveScriptParse

Microsoft® Windows® Script Interfaces
IActiveScriptParse 		Language Reference
Previous
Next

If the Windows Script engine allows raw text code scriptlets to be added to the script or allows expression text to be evaluated at run time, it implements the IActiveScriptParse interface. For interpreted scripting languages that have no independent authoring environment, such as VBScript, this provides an alternate mechanism (other than IPersist*) to get script code into the scripting engine, and to attach script fragments to various object events.

Methods in Vtable Order

Method | Description
InitNew | Initializes the scripting engine.
AddScriptlet | Adds a code scriptlet to the script.
ParseScriptText | Parses the given code scriptlet, adding declarations into the name space and evaluating code as appropriate.


IActiveScriptParse::AddScriptlet

Microsoft® Windows® Script Interfaces
IActiveScriptParse::AddScriptlet 		Language Reference
Previous
Next

HRESULT AddScriptlet(
    LPCOLESTR pstrDefaultName,   // address of default name of scriptlet
    LPCOLESTR pstrCode,          // address of scriptlet text
    LPCOLESTR pstrItemName,      // address of item name
    LPCOLESTR pstrSubItemName,   // address of subitem name
    LPCOLESTR pstrEventName,     // address of event name
    LPCOLESTR pstrDelimiter,     // address of end-of-scriptlet delimiter
    DWORD dwSourceContextCookie, // application-defined value for debugging
    ULONG ulStartingLineNumber,  // starting line of the script
    DWORD dwFlags,               // scriptlet flags
    BSTR *pbstrName,             // address of actual name of scriptlet
    EXCEPINFO *pexcepinfo        // address of exception information
);

Adds a code scriptlet to the script. This method is used in environments where the persistent state of the script is intertwined with the host document and the host is responsible for restoring the script, rather than through an IPersist* interface. The primary examples are HTML scripting languages that allow scriptlets of code embedded in the HTML document to be attached to intrinsic events (for instance, ONCLICK="button1.text='Exit'").

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    DISP_E_EXCEPTION | An exception occurred in the parsing of the scriptlet; the pexcepinfo parameter contains information about the exception.
    E_INVALIDARG | An argument was invalid.
    E_NOTIMPL | This method is not supported; the scripting engine does not support adding event-sinking scriptlets.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized) and therefore failed.
    OLESCRIPT_E_INVALIDNAME | The default name supplied is invalid in this scripting language.
    OLESCRIPT_E_SYNTAX | An unspecified syntax error occurred in the scriptlet.

pstrDefaultName
[in] Address of a default name to associate with the scriptlet. If the scriptlet does not contain naming information (as in the ONCLICK example above), this name will be used to identify the scriptlet. If this parameter is NULL, the scripting engine manufactures a unique name, if necessary.
pstrCode
[in] Address of the scriptlet text to add. The interpretation of this string depends on the scripting language.
pstrItemName
[in] Address of a buffer that contains the item name associated with this scriptlet. This parameter, in addition to pstrSubItemName, identifies the object for which the scriptlet is an event handler.
pstrSubItemName
[in] Address of a buffer that contains the name of a subobject of the named item with which this scriptlet is associated; this name must be found in the named item's type information. This parameter is NULL if the scriptlet is to be associated with the named item instead of a subitem. This parameter, in addition to pstrItemName, identifies the specific object for which the scriptlet is an event handler.
pstrEventName
[in] Address of a buffer that contains the name of the event for which the scriptlet is an event handler.
pstrDelimiter
[in] Address of the end-of-scriptlet delimiter. When the pstrCode parameter is parsed from a stream of text, the host typically uses a delimiter, such as two single quotation marks ("), to detect the end of the scriptlet. This parameter specifies the delimiter that the host used, allowing the scripting engine to provide some conditional primitive preprocessing (for example, replacing a single quotation mark ['] with two single quotation marks for use as a delimiter). Exactly how (and if) the scripting engine makes use of this information depends on the scripting engine. Set this parameter to NULL if the host did not use a delimiter to mark the end of the scriptlet.
dwSourceContextCookie
[in] Application-defined value that is used for debugging purposes.
ulStartingLineNumber
[in] Zero-based value that specifies which line the parsing will begin at.
dwFlags
[in] Flags associated with the scriptlet. Can be a combination of the following values:

Return Value | Meaning
SCRIPTTEXT_ISVISIBLE | Indicates that the script text should be visible (and, therefore, callable by name) as a global method in the name space of the script.
SCRIPTTEXT_ISPERSISTENT | Indicates that the code added during this call should be saved if the scripting engine is saved (for example, through a call to IPersist*::Save), or if the scripting engine is reset by way of a transition back to the initialized state. For more information about this state, see Script Engine States.

pbstrName
[out] Actual name used to identify the scriptlet. This will be, in order of preference: a name explicitly specified in the scriptlet text, the default name provided in pstrDefaultName, or a unique name synthesized by the scripting engine.
pexcepinfo
[out] Address of a structure containing exception information. This structure should be filled in if DISP_E_EXCEPTION is returned.


IActiveScriptParse::InitNew

Microsoft® Windows® Script Interfaces
IActiveScriptParse::InitNew 		Language Reference
Previous
Next

HRESULT InitNew(void);

Initializes the scripting engine.

  • Returns S_OK if successful, or E_FAIL if an error occurred during initialization.

Before the scripting engine can be used, one of the following methods must be called: IPersist*::Load, IPersist*::InitNew, or IActiveScriptParse::InitNew. The semantics of this method are identical to IPersistStreamInit::InitNew, in that this method tells the scripting engine to initialize itself. Note that it is not valid to call both IPersist*::InitNew or IActiveScriptParse::InitNew and IPersist*::Load, nor is it valid to call IPersist*::InitNew, IActiveScriptParse::InitNew, or IPersist*::Load more than once.


IActiveScriptParse::ParseScriptText

Microsoft® Windows® Script Interfaces
IActiveScriptParse::ParseScriptText 		Language Reference
Previous
Next

HRESULT ParseScriptText(
    LPCOLESTR pstrCode,          // address of scriptlet text
    LPCOLESTR pstrItemName,      // address of item name
    IUnknown *punkContext,       // address of debugging context
    LPCOLESTR pstrDelimiter,     // address of end-of-scriptlet delimiter
    DWORD dwSourceContextCookie, // application-defined value for debugging
    ULONG ulStartingLineNumber,  // starting line of the script
    DWORD dwFlags,               // scriptlet flags
    VARIANT *pvarResult,         // address of buffer for results
    EXCEPINFO *pexcepinfo        // address of buffer for error data
);

Parses the given code scriptlet, adding declarations into the name space and evaluating code as appropriate.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    DISP_E_EXCEPTION | An exception occurred in the processing of the scriptlet. The pexcepinfo parameter contains information about the exception.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_NOTIMPL | This method is not supported. The scripting engine does not support run-time evaluation of expressions or statements.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine is in the uninitialized or closed state, or the SCRIPTTEXT_ISEXPRESSION flag was set and the scripting engine is in the initialized state).
    OLESCRIPT_E_SYNTAX | An unspecified syntax error occurred in the scriptlet.

pstrCode
[in] Address of the scriptlet text to evaluate. The interpretation of this string depends on the scripting language.
pstrItemName
[in] Address of the item name that gives the context in which the scriptlet is to be evaluated. If this parameter is NULL, the code is evaluated in the scripting engine's global context.
punkContext
[in] Address of the context object. This object is reserved for use in a debugging environment, where such a context may be provided by the debugger to represent an active run-time context. If this parameter is NULL, the engine uses pstrItemName to identify the context.
pstrDelimiter
[in] Address of the end-of-scriptlet delimiter. When pstrCode is parsed from a stream of text, the host typically uses a delimiter, such as two single quotation marks ("), to detect the end of the scriptlet. This parameter specifies the delimiter that the host used, allowing the scripting engine to provide some conditional primitive preprocessing (for example, replacing a single quotation mark ['] with two single quotation marks for use as a delimiter). Exactly how (and if) the scripting engine makes use of this information depends on the scripting engine. Set this parameter to NULL if the host did not use a delimiter to mark the end of the scriptlet.
dwSourceContextCookie
[in] Application-defined value that is used for debugging purposes.
ulStartingLineNumber
[in] Zero-based value that specifies which line the parsing will begin at.
dwFlags
[in] Flags associated with the scriptlet. Can be a combination of these values:

Value | Meaning
SCRIPTTEXT_ISEXPRESSION | If the distinction between a computational expression and a statement is important but syntactically ambiguous in the script language, this flag specifies that the scriptlet is to be interpreted as an expression, rather than as a statement or list of statements. By default, statements are assumed unless the correct choice can be determined from the syntax of the scriptlet text.
SCRIPTTEXT_ISPERSISTENT | Indicates that the code added during this call should be saved if the scripting engine is saved (for example, through a call to IPersist*::Save), or if the scripting engine is reset by way of a transition back to the initialized state.
SCRIPTTEXT_ISVISIBLE | Indicates that the script text should be visible (and, therefore, callable by name) as a global method in the name space of the script.

pvarResult
[out] Address of a buffer that receives the results of scriptlet processing, or NULL if the caller expects no result (that is, the SCRIPTTEXT_ISEXPRESSION value is not set).
pexcepinfo
[out] Address of a structure that receives exception information. This structure is filled if IActiveScriptParse::ParseScriptText returns DISP_E_EXCEPTION.

If the scripting engine is in the initialized state, no code will actually be evaluated during this call; rather, such code is queued and executed when the scripting engine is transitioned into (or through) the started state. Because execution is not allowed in the initialized state, it is an error to call this method with the SCRIPTTEXT_ISEXPRESSION flag when in the initialized state.

The scriptlet can be an expression, a list of statements, or anything allowed by the script language. For example, this method is used in the evaluation of the HTML <SCRIPT> tag, which allows statements to be executed as the HTML page is being constructed, rather than just compiling them into the script state.

The code passed to this method must be a valid, complete portion of code. For example, in VBScript it is illegal to call this method once with Sub Function(x) and then a second time with End Sub. The parser must not wait for the second call to complete the subroutine, but rather must generate a parse error because a subroutine declaration was started but not completed.

For more information about script states, see Script Engine States.


IActiveScriptSite

Microsoft® Windows® Script Interfaces
IActiveScriptSite 		Language Reference
Previous
Next

The host must create a site for the Windows Script engine by implementing the IActiveScriptSite interface. Usually, this site will be associated with the container of all the objects that are visible to the script (for example, the ActiveX Controls). Typically, this container will correspond to the document or page being viewed. Microsoft Internet Explorer, for example, would create such a container for each HTML page being displayed. Each ActiveX control (or other automation object) on the page, and the scripting engine itself, would be enumerable within this container.

Methods in Vtable Order

Method | Description
GetLCID | Retrieves the locale identifier that the host uses for displaying user-interface elements.
GetItemInfo | Obtains information about an item that was added to an engine through a call to the IActiveScript::AddNamedItem method.
GetDocVersionString | Retrieves a host-defined string that uniquely identifies the current document version from the host's point of view.
OnScriptTerminate | Called when the script has completed execution.
OnStateChange | Informs the host that the scripting engine has changed states.
OnScriptError | Informs the host that an execution error occurred while the engine was running the script.
OnEnterScript | Informs the host that the scripting engine has begun executing the script code.
OnLeaveScript | Informs the host that the scripting engine has returned from executing script code.


IActiveScriptSite::GetDocVersionString

Microsoft® Windows® Script Interfaces
IActiveScriptSite::GetDocVersionString 		Language Reference
Previous
Next

HRESULT GetDocVersionString(
    BSTR *pbstrVersionString  // address of document version string
);

Retrieves a host-defined string that uniquely identifies the current document version. If the related document has changed outside the scope of Windows Script (as in the case of an HTML page being edited with NotePad), the scripting engine can save this along with its persisted state, forcing a recompile the next time the script is loaded.

  • Returns S_OK if successful, or E_NOTIMPL if this method is not supported.
pstrVersionString
[out] Address of the host-defined document version string.

If E_NOTIMPL is returned, the scripting engine should assume that the script is in sync with the document.


IActiveScriptSite::GetItemInfo

Microsoft® Windows® Script Interfaces
IActiveScriptSite::GetItemInfo 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::GetItemInfo(
    LPCOLESTR pstrName,     // address of item name
    DWORD dwReturnMask,     // bit mask for information retrieval
    IUnknown **ppunkItem,   // address of pointer to item's IUnknown
    ITypeInfo **ppTypeInfo  // address of pointer to item's ITypeInfo
);

Allows the scripting engine to obtain information about an item added with the IActiveScript::AddNamedItem method.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    TYPE_E_ELEMENTNOTFOUND | An item of the specified name was not found.

pstrName
[in] The name associated with the item, as specified in the IActiveScript::AddNamedItem method.
dwReturnMask
[in] A bit mask specifying what information about the item should be returned. The scripting engine should request the minimum amount of information possible because some of the return parameters (for example, ITypeInfo) can take considerable time to load or generate. Can be a combination of the following values:

Value | Meaning
SCRIPTINFO_IUNKNOWN | Return the IUnknown interface for this item.
SCRIPTINFO_ITYPEINFO | Return the ITypeInfo interface for this item.

ppunkItem
[out] Address of a variable that receives a pointer to the IUnknown interface associated with the given item. The scripting engine can use the IUnknown::QueryInterface method to obtain the IDispatch interface for the item. This parameter receives NULL if dwReturnMask does not include the SCRIPTINFO_IUNKNOWN value. Also, it receives NULL if there is no object associated with the item name; this mechanism is used to create a simple class when the named item was added with the SCRIPTITEM_CODEONLY flag set in the IActiveScript::AddNamedItem method.
ppTypeInfo
[out] Address of a variable that receives a pointer to the ITypeInfo interface associated with the item. This parameter receives NULL if dwReturnMask does not include the SCRIPTINFO_ITYPEINFO value, or if type information is not available for this item. If type information is not available, the object cannot source events, and name binding must be realized with the IDispatch::GetIDsOfNames method. Note that the ITypeInfo interface retrieved describes the item's coclass (TKIND_COCLASS) because the object may support multiple interfaces and event interfaces. If the item supports the IProvideMultipleTypeInfo interface, the ITypeInfo interface retrieved is the same as the index zero ITypeInfo that would be obtained using the IProvideMultipleTypeInfo::GetInfoOfIndex method.

This method retrieves only the information indicated by the dwReturnMask parameter; this improves performance. For example, if an ITypeInfo interface is not needed for an item, it is simply not specified in dwReturnMask.


IActiveScriptSite::GetLCID

Microsoft® Windows® Script Interfaces
IActiveScriptSite::GetLCID 		Language Reference
Previous
Next

HRESULT GetLCID(
    LCID *plcid  // address of variable for language identifier
);

Retrieves the locale identifier associated with the host's user interface. The scripting engine uses the identifier to ensure that error strings and other user-interface elements generated by the engine appear in the appropriate language.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_NOTIMPL | This method is not implemented. Use the system-defined locale.
    E_POINTER | An invalid pointer was specified.

plcid
[out] Address of a variable that receives the locale identifier for user-interface elements displayed by the scripting engine.

If this method returns E_NOTIMPL, the system-defined locale identifier should be used.


IActiveScriptSite::OnEnterScript

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnEnterScript 		Language Reference
Previous
Next

HRESULT OnEnterScript(void);

Informs the host that the scripting engine has begun executing the script code.

  • Returns S_OK if successful.

The scripting engine must call this method on every entry or reentry into the scripting engine. For example, if the script calls an object that then fires an event handled by the scripting engine, the scripting engine must call IActiveScriptSite::OnEnterScript before executing the event, and must call the IActiveScriptSite::OnLeaveScript method after executing the event but before returning to the object that fired the event. Calls to this method can be nested. Every call to this method requires a corresponding call to IActiveScriptSite::OnLeaveScript.


IActiveScriptSite::OnLeaveScript

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnLeaveScript 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::OnLeaveScript(void);

Informs the host that the scripting engine has returned from executing script code.

  • Returns S_OK if successful.

The scripting engine must call this method before returning control to a calling application that entered the scripting engine. For example, if the script calls an object that then fires an event handled by the scripting engine, the scripting engine must call the IActiveScriptSite::OnEnterScript method before executing the event, and must call IActiveScriptSite::OnLeaveScript after executing the event before returning to the object that fired the event. Calls to this method can be nested. Every call to IActiveScriptSite::OnEnterScript requires a corresponding call to this method.


IActiveScriptSite::OnScriptError

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnScriptError 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::OnScriptError(
    IActiveScriptError *pase  // address of error interface
);

Informs the host that an execution error occurred while the engine was running the script.

  • Returns S_OK if the error was correctly handled, or an OLE defined error code otherwise.
pase
[in] Address of the error object's IActiveScriptError interface. A host can use this interface to obtain information about the execution error.


IActiveScriptSite::OnScriptTerminate

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnScriptTerminate 		Language Reference
Previous
Next

HRESULT OnScriptTerminate(
    VARIANT *pvarResult,   // address of script results
    EXCEPINFO *pexcepinfo  // address of structure with exception information
);

Informs the host that the script has completed execution.

  • Returns S_OK if successful.
pvarResult
[in] Address of a variable that contains the script result, or NULL if the script produced no result.
pexcepinfo
[in] Address of an EXCEPINFO structure that contains exception information generated when the script terminated, or NULL if no exception was generated.

The scripting engine calls this method before the call to the IActiveScriptSite::OnStateChange method, with the SCRIPTSTATE_INITIALIZED flag set, is completed. This method can be used to return completion status and results to the host. Note that many script languages, which are based on sinking events from the host, have life spans that are defined by the host. In this case, this method may never be called.


IActiveScriptSite::OnStateChange

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnStateChange 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::OnStateChange(
    SCRIPTSTATE ssScriptState  // new state of engine
);

Informs the host that the scripting engine has changed states.

  • Returns S_OK if successful.
ssScriptState
[in] Value that indicates the new script state. See the IActiveScript::GetScriptState method for a description of the states.


IActiveScriptSiteWindow

Microsoft® Windows® Script Interfaces
IActiveScriptSiteWindow 		Language Reference
Previous
Next

This interface is implemented by hosts that support a user interface on the same object as IActiveScriptSite. Hosts that do not support a user interface, such as servers, would not implement the IActiveScriptSiteWindow interface. The scripting engine accesses this interface by calling QueryInterface from IActiveScriptSite.

Methods in Vtable Order

Method | Description
GetWindow | Retrieves the window handle that can act as the owner of a pop-up window that the scripting engine must display.
EnableModeless | Causes the host to enable or disable its main window as well as any modeless dialog boxes.


IActiveScriptSiteWindow::EnableModeless

Microsoft® Windows® Script Interfaces
IActiveScriptSiteWindow::EnableModeless 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::EnableModeless(
    BOOL fEnable  // enable flag
);

Causes the host to enable or disable its main window as well as any modeless dialog boxes.

  • Returns S_OK if successful, or E_FAIL if an error occurred.
fEnable
[in] Flag that, if TRUE, enables the main window and modeless dialogs or, if FALSE, disables them.

This method is identical to the IOleInPlaceFrame::EnableModeless method.

Calls to this method can be nested.


IActiveScriptSiteWindow::GetWindow

Microsoft® Windows® Script Interfaces
IActiveScriptSiteWindow::GetWindow 		Language Reference
Previous
Next

HRESULT GetWindow(
    HWND *phwnd  // address of variable for window handle
);

Retrieves the handle to a window that can act as the owner of a pop-up window that the scripting engine must display.

  • Returns S_OK if successful, or E_FAIL if an error occurred.
phwnd
[out] Address of a variable that receives the window handle.

This method is similar to the IOleWindow::GetWindow method.


Enumerations

Microsoft® Windows® Script Interfaces
Enumerations 		Language Reference
Previous
Next

This section describes the enumerations used by Windows Script engines.

  • SCRIPTSTATE
  • SCRIPTTHREADSTATE


SCRIPTSTATE

Microsoft® Windows® Script Interfaces
SCRIPTSTATE 		Language Reference
Previous
Next

typedef enum tagSCRIPTSTATE {
    SCRIPTSTATE_UNINITIALIZED = 0,
    SCRIPTSTATE_INITIALIZED   = 5,
    SCRIPTSTATE_STARTED       = 1,
    SCRIPTSTATE_CONNECTED     = 2,
    SCRIPTSTATE_DISCONNECTED  = 3,
    SCRIPTSTATE_CLOSED        = 4
} SCRIPTSTATE;

Contains named constant values that specify the state of a scripting engine. This enumeration is used by the IActiveScript::GetScriptState, IActiveScript::SetScriptState, and IActiveScriptSite::OnStateChange methods.

SCRIPTSTATE_UNINITIALIZED
Script has just been created, but has not yet been initialized using an IPersist* interface and IActiveScript::SetScriptSite.
SCRIPTSTATE_INITIALIZED
Script has been initialized, but is not running (connecting to other objects or sinking events) or executing any code. Code can be queried for execution by calling the IActiveScriptParse::ParseScriptText method.
SCRIPTSTATE_STARTED
Script can execute code, but is not yet sinking the events of objects added by the IActiveScript::AddNamedItem method.
SCRIPTSTATE_CONNECTED
Script is loaded and connected for sinking events.
SCRIPTSTATE_DISCONNECTED
Script is loaded and has a run-time execution state, but is temporarily disconnected from sinking events.
SCRIPTSTATE_CLOSED
Script has been closed. The scripting engine no longer works and returns errors for most methods.


SCRIPTTHREADSTATE

Microsoft® Windows® Script Interfaces
SCRIPTTHREADSTATE 		Language Reference
Previous

typedef enum tagSCRIPTTHREADSTATE {
    SCRIPTTHREADSTATE_NOTINSCRIPT  = 0,
    SCRIPTTHREADSTATE_RUNNING      = 1
} SCRIPTTHREADSTATE;

Contains named constant values that specify the state of a thread in a scripting engine. This enumeration is used by the IActiveScript::GetScriptThreadState method.

SCRIPTTHREADSTATE_NOTINSCRIPT
Specified thread is not currently servicing a scripted event, processing immediately executed script text, or running a script macro.
SCRIPTTHREADSTATE_RUNNING
Specified thread is actively servicing a scripted event, processing immediately executed script text, or running a script macro.


IDispatchEx Interface

IDispatchEx, an extension of the IDispatch interface, supports features appropriate for dynamic languages such as scripting languages. This section describes the IDispatchEx interface itself, the differences between IDispatch and IDispatchEx, and the rationale for the extensions. It is expected that readers are familiar with IDispatch and have access to the IDispatch documentation.

Remarks

IDispatch was developed essentially for Microsoft® Visual Basic®. The primary limitation of IDispatch is that it assumes that objects are static. In other words, since objects do not change during run time, type information can fully describe them at compile time. Dynamic run-time models that are found in scripting languages such as Visual Basic Scripting Edition (VBScript) and JScript and object models such as Dynamic HTML require a more flexible interface.

IDispatchEx was developed to provide all the services of IDispatch as well as some extensions that are appropriate for more dynamic late-bound languages such as scripting languages. The additional features of IDispatchEx beyond those provided by IDispatch are:

  • Add new members to an object ("expando") — use GetDispID with the fdexNameEnsure flag.
  • Delete members of an object — use DeleteMemberByName or DeleteMemberByDispID.
  • Case-sensitive dispatch operations — use fdexNameCaseSensitive or fdexNameCaseInsensitive.
  • Search for member with implicit name — use fdexNameImplicit.
  • Enumerate DISPIDs of an object — use GetNextDispID.
  • Map from DISPID to element name — use GetMemberName.
  • Obtain properties of object members — use GetMemberProperties.
  • Method invocation with this pointer — use InvokeEx with DISPATCH_METHOD.
  • Allow browsers that support the concept of name spaces to obtain the name space parent of an object — use GetNameSpaceParent.

Objects that support IDispatchEx might also support IDispatch for backward compatibility. The dynamic nature of objects that support IDispatchEx has a few implications for the IDispatch interface of those objects. For example, IDispatch makes the following assumption:

The member and parameter DISPIDs must remain constant for the lifetime of the object. This allows a client to obtain DISPIDs once and cache them for later use.

Since IDispatchEx allows the addition and deletion of members, the set of valid DISPIDs does not remain constant. However, IDispatchEx requires that the mapping between DISPID and member name remain constant. This means that if a member is deleted:

  • The DISPID cannot be reused until a member with the same name is created.
  • The DISPID must remain valid for GetNextDispID.
  • The DISPID must be accepted gracefully by any of the IDispatch/IDispatchEx methods — they must recognize the member as deleted and return an appropriate error code (usually DISP_E_MEMBERNOTFOUND or S_FALSE).

Examples

This JScript code in the function test() does the following:

  • Creates a new object by calling the Object constructor and assigns a pointer to the new object to the variable Obj.
  • Creates a new element named Elem in the object and assigns to this element a pointer to the function cat.
  • Calls this function. Since it is being called as a method, the this pointer refers to the object Obj. The function adds a new element, Bar, to the object.

The full HTML code is:

   <HTML>
   <BODY>
   <SCRIPT LANGUAGE="JScript">
   function cat()
   {
      // Create new element and assign the value 10
      this.Bar = 10;
   }

   function test()
   {
      // Construct new object
      Obj = new Object();

      // Create new element and assign function pointer
      Obj.Elem = cat;

      // Call Elem method ("this" == Obj)
      Obj.Elem();

      // Obj.Bar now exists
   }
   test();
   </SCRIPT>
   </BODY>
   </HTML>

A control placed on this same Web page could obtain a dispatch pointer to the script engines from the browser. The control could then implement the function test():

   <HTML>
   <BODY>
   <SCRIPT LANGUAGE="JScript">
   function cat()
   {
      // Create new element and assign the value 10
      this.Bar = 10;
   }
   </SCRIPT>
   <OBJECT ID="test" <CLASSID="CLSID:9417DB5D-FA2A-11D0-8CB3-00C04FC2B085">>
   </OBJECT>
   </BODY>
   </HTML>

Code from the control, test, does the same thing as the JScript function test(). Note that these dispatch calls are made into the running JScript engine and change the state of the engine:

  • Obtains the dispatch pointer to the cat function using GetDispID().
  • Obtains the dispatch pointer to the Object function using GetDispID().
  • Constructs an object by calling the Object function with InvokeEx() and obtains a dispatch pointer to the newly constructed object.
  • Creates a new element, Elem, in the object using GetDispID() with the fdexNameEnsure flag.
  • Puts the dispatch pointer to cat in the element using InvokeEx().
  • Calls the dispatch pointer to cat as a method by calling InvokeEx() and passing in the dispatch pointer to the constructed object as the this pointer.
  • The cat method creates a new element, Bar, on the current this object.
  • Verifies that the new element, Bar, was created in the constructed object by enumerating through the elements using GetNextDispID().

The code for the test control:

   BOOL test(IDispatchEx *pdexScript)
   {
      HRESULT hr;
      VARIANT var;
      BSTR bstrName;
      DISPID dispid, putid;
      IDispatchEx *pdexObj;
      IDispatch   *pdispObj, *pdispCat;
      DISPPARAMS dispparams, dispparamsNoArgs = {NULL, NULL, 0, 0};

      // Get dispatch pointer for "cat"
      bstrName = SysAllocString(OLESTR("cat"));
      pdexScript->GetDispID(bstrName, 0, &dispid);
      SysFreeString(bstrName);
      pdexScript->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_PROPERTYGET, &dispparamsNoArgs,
         &var, NULL, NULL);
      pdispCat = var.pdispVal;

      // Create object by calling "Object" constructor
      bstrName = SysAllocString(OLESTR("Object"));
      pdexScript->GetDispID(bstrName, 0, &dispid);
      SysFreeString(bstrName);
      pdexScript->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_CONSTRUCT, &dispparamsNoArgs,
         &var, NULL, NULL);
      pdispObj = var.pdispVal;
      pdispObj->QueryInterface(IID_IDispatchEx, (void **)&pdexObj);

      // Create new element in object
      bstrName = SysAllocString(OLESTR("Elem"));
      pdexObj->GetDispID(bstrName, fdexNameEnsure, &dispid);
      SysFreeString(bstrName);

      // Assign "cat" dispatch pointer to element
      putid = DISPID_PROPERTYPUT;
      var.vt = VT_DISPATCH;
      var.pdispVal = pdispCat;
      dispparams.rgvarg = &var;
      dispparams.rgdispidNamedArgs = &putid;
      dispparams.cArgs = 1;
      dispparams.cNamedArgs = 1;
      pdexObj->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_PROPERTYPUTREF, &dispparams,
         NULL, NULL, NULL);

      // Invoke method with "this" pointer
      putid = DISPID_THIS;
      var.vt = VT_DISPATCH;
      var.pdispVal = pdispObj;
      dispparams.rgvarg = &var;
      dispparams.rgdispidNamedArgs = &putid;
      dispparams.cArgs = 1;
      dispparams.cNamedArgs = 1;
      pdexObj->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_METHOD, &dispparams,
      NULL, NULL, NULL);

      // Confirm that new element "Bar" is in object
      hr = pdexObj->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
      while (hr != S_FALSE)
      {
         pdexObj->GetMemberName(dispid, &bstrName);
         if (!wcscmp(bstrName, OLESTR("Bar")))
            return TRUE;
         SysFreeString(bstrName);
         hr = pdexObj->GetNextDispID(fdexEnumAll, dispid, &dispid);
      }
      return FALSE;
   }

Methods

IDispatchEx Methods

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx Methods

In This Section

IDispatchEx::DeleteMemberByDispID
Deletes a member by DISPID.
IDispatchEx::DeleteMemberByName
Deletes a member by name.
IDispatchEx::GetDispID
Maps a single member name to its corresponding DISPID, which can then be used on subsequent calls to IDispatchEx::InvokeEx.
IDispatchEx::GetMemberName
Retrieves the name of a member.
IDispatchEx::GetMemberProperties
Retrieves a member's properties.
IDispatchEx::GetNameSpaceParent
Retrieves the interface for the namespace parent of an object.
IDispatchEx::GetNextDispID
Enumerates the members of the object.
IDispatchEx::InvokeEx
Provides access to properties and methods exposed by an IDispatchEx object.

Related Section

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::DeleteMemberByDispID

Deletes a member by DISPID.

HRESULT DeleteMemberByDispID(
    DISPID id
);

Returns one of the following values:

S_OK | Success.
S_FALSE | Member exists but cannot be deleted.

Parameters

id
Member identifier. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.

Remarks

If the member is deleted, the DISPID needs to remain valid for GetNextDispID.

If a member with a given name is deleted and later a member with the same name is recreated, the DISPID should be the same. (Whether member names that differ only by case are the "same" is object-dependent.)

Example

BSTR bstrName;
DISPID dispid;
IDispatch *pdex;

// Assign to pdex and bstrName
pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
pdex->DeleteMemberByDispID(dispid);

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::DeleteMemberByName

Deletes a member by name.

HRESULT DeleteMemberByName(
   BSTR bstrName,
   DWORD grfdex
);

Returns one of the following values:

S_OK | Success.
S_FALSE | Member exists but cannot be deleted.

Parameters

bstrName
Name of member to be deleted.
grfdex
Determines if the member name is case sensitive. This can be one of the following values:
Value | Meaning
fdexNameCaseSensitive | Requests that the name lookup be done in a case-sensitive manner. Can be ignored by object that does not support case-sensitive lookup.
fdexNameCaseInsensitive | Requests that the name lookup be done in a case-insensitive manner. Can be ignored by object that does not support case-insensitive lookup.

Remarks

If the member is deleted, the DISPID needs to remain valid for GetNextDispID.

If a member with a given name is deleted and later a member with the same name is recreated, the DISPID should be the same. (Whether members that differ only by case are the "same" is object-dependent.)

Example

BSTR bstrName;
IDispatch *pdex;

// Assign to pdex and bstrName
pdex->DeleteMemberByName(bstrName, fdexNameCaseSensitive);

See Also

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetDispID

Maps a single member name to its corresponding DISPID, which can then be used on subsequent calls to IDispatchEx::InvokeEx.

 HRESULT GetDispID(
   BSTR bstrName,
   DWORD grfdex,
   DISPID *pid
);

Returns one of the following values:

S_OK | Success.
E_OUTOFMEMORY | Out of Memory.
DISP_E_UNKNOWNNAME | The name was not known.

Parameters

bstrName
Passed in name to be mapped.
grfdex
Determines the options for obtaining the member identifier. This can be a combination of the following values:
Value | Meaning
fdexNameCaseSensitive | Requests that the name lookup be done in a case-sensitive manner. May be ignored by object that does not support case-sensitive lookup.
fdexNameEnsure | Requests that the member be created if it does not already exist. The new member should be created with the value VT_EMPTY.
fdexNameImplicit | Indicates that the caller is searching object(s) for a member of a particular name when the base object is not explicitly specified.
fdexNameCaseInsensitive | Requests that the name lookup be done in a case-insensitive manner. May be ignored by object that does not support case-insensitive lookup.
pid
Pointer to caller-allocated location to receive DISPID result. If an error occurs, pid contains DISPID_UNKNOWN.

Remarks

GetDispID can be used instead of GetIDsOfNames to obtain the DISPID for a given member.

Because IDispatchEx allows the addition and deletion of members, the set of DISPIDs does not remain constant for the lifetime of an object.

The unused riid parameter in IDispatch::GetIDsOfNames has been removed.

Example

BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;

   // Assign to pdex and bstrName
   pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
   // Use dispid

See Also

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetMemberName

Retrieves the name of a member.

HRESULT GetMemberName(
   DISPID id,
   BSTR *pbstrName
);

Returns one of the following values:

S_OK | Success.
DISP_E_UNKNOWNNAME | The name was not known.

Parameters

id
Identifies the member. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.
pbstrName
Address of a BSTR that receives the name of the member. The calling application is responsible for freeing this value.

Example

HRESULT hr;
   BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;

   // Assign to pdex
   hr = pdex->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
   while (hr != S_FALSE)
   {
   pdex->GetMemberName(dispid, &bstrName);
   if (!wcscmp(bstrName, OLESTR("Bar")))
      return TRUE;
   SysFreeString(bstrName);
   hr = pdexObj->GetNextDispID(fdexEnumAll, dispid, &dispid);
}

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetMemberProperties

Retrieves a member's properties.

HRESULT GetMemberProperties(
   DISPID id,
   DWORD grfdexFetch,
   DWORD *pgrfdex
);

Returns one of the following values:

S_OK | Success.
DISP_E_UNKNOWNNAME | The name was not known.

Parameters

id
Identifies the member. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.
grfdexFetch
Determines which properties to retrieve. This can be a combination of the values listed under pgrfdex and/or a combination of the following values:
Value | Meaning
grfdexPropCanAll | Combines fdexPropCanGet, fdexPropCanPut, fdexPropCanPutRef, fdexPropCanCall, fdexPropCanConstruct and fdexPropCanSourceEvents.
grfdexPropCannotAll | Combines fdexPropCannotGet, fdexPropCannotPut, fdexPropCannotPutRef, fdexPropCannotCall, fdexPropCannotConstruct and fdexPropCannotSourceEvents.
grfdexPropExtraAll | Combines fdexPropNoSideEffects and fdexPropDynamicType.
grfdexPropAll | Combines grfdexPropCanAll, grfdexPropCannotAll and grfdexPropExtraAll.
pgrfdex
Address of a DWORD that receives the requested properties. This can be a combination of the following values:
Value | Meaning
fdexPropCanGet | The member can be obtained using DISPATCH_PROPERTYGET.
fdexPropCannotGet | The member cannot be obtained using DISPATCH_PROPERTYGET.
fdexPropCanPut | The member can be set using DISPATCH_PROPERTYPUT.
fdexPropCannotPut | The member cannot be set using DISPATCH_PROPERTYPUT.
fdexPropCanPutRef | The member can be set using DISPATCH_PROPERTYPUTREF.
fdexPropCannotPutRef | The member cannot be set using DISPATCH_PROPERTYPUTREF.
fdexPropNoSideEffects | The member does not have any side effects. For example, a debugger could safely get/set/call this member without changing the state of the script being debugged.
fdexPropDynamicType | The member is dynamic and can change during the lifetime of the object.
fdexPropCanCall | The member can be called as a method using DISPATCH_METHOD.
fdexPropCannotCall | The member cannot be called as a method using DISPATCH_METHOD.
fdexPropCanConstruct | The member can be called as a constructor using DISPATCH_CONSTRUCT.
fdexPropCannotConstruct | The member cannot be called as a constructor using DISPATCH_CONSTRUCT.
fdexPropCanSourceEvents | The member can fire events.
fdexPropCannotSourceEvents | The member cannot fire events.

Example

BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;
   DWORD dwProps;

   // Assign to pdex and bstrName
   pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
   pdex->GetMemberProperties(dispid, grfdexPropAll, &dwProps);
   if (dwProps & fdexPropCanPut)
      // Assign to member

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetNameSpaceParent

Retrieves the interface for the namespace parent of an object.

HRESULT GetNameSpaceParent(
   IUnknown **ppunk
);

Returns S_OK if successful or an OLE-defined error code otherwise.

Parameters

ppunk
Address of an IUnknown interface pointer that receives the namespace parent's interface.

See Also

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetNextDispID

Enumerates the members of the object.

HRESULT GetNextDispID(
   DWORD grfdex,
   DISPID id,
   DISPID *pid
);

Returns one of the following values:

S_OK | Success.
S_FALSE | Enumeration is done.

Parameters

grfdex
Determines which set of items will be enumerated. This can be a combination of the following values:
Value | Meaning
fdexEnumDefault | Requests that the object enumerates the default elements. The object is allowed to enumerate any set of elements.
fdexEnumAll | Requests that the object enumerates all of the elements. The object is allowed to enumerate any set of elements.
id
Identifies the current member. GetNextDispID will retrieve the item in the enumeration after this one. Uses GetDispID or a previous call to GetNextDispID to obtain this identifier. Uses the DISPID_STARTENUM value to obtain the first identifier of the first item.
pid
Address of a DISPID variable that receives the identifier of the next item in the enumeration.

If a member is deleted by DeleteMemberByName or DeleteMemberByDispID, the DISPID needs to remain valid for GetNextDispID.

Example

HRESULT hr;
   BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;

   // Assign to pdex
   hr = pdex->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
   while (hr != S_FALSE)
   {
      pdex->GetMemberName(dispid, &bstrName);
      if (!wcscmp(bstrName, OLESTR("Bar")))
      return TRUE;
      SysFreeString(bstrName);

      hr = pdexObj->GetNextDispID(fdexEnumAll, dispid, &dispid);
   }

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID | IDispatchEx::DeleteMemberByName | IDispatchEx::DeleteMemberByDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::InvokeEx

Provides access to properties and methods exposed by an IDispatchEx object.

HRESULT InvokeEx(
   DISPID id,
   LCID lcid,
   WORD wFlags,
   DISPARAMS *pdp,
   VARIANT *pVarRes,
   EXCEPINFO *pei,
   IServiceProvider *pspCaller
);

Returns one of the following values:

S_OK | Success.
DISP_E_BADPARAMCOUNT | The number of elements provided to DISPPARAMS is different from the number of arguments accepted by the method or property.
DISP_E_BADVARTYPE | One of the arguments in rgvarg is not a valid variant type.
DISP_E_EXCEPTION | The application needs to raise an exception. In this case, the structure passed in pei should be filled in.
DISP_E_MEMBERNOTFOUND | The requested member does not exist, or the call to InvokeEx tried to set the value of a read-only property.
DISP_E_NONAMEDARGS | This implementation of IDispatch does not support named arguments.
DISP_E_OVERFLOW | One of the arguments in rgvarg could not be coerced to the specified type.
DISP_E_PARAMNOTFOUND | One of the parameter DISPIDs does not correspond to a parameter on the method.
DISP_E_TYPEMISMATCH | One or more of the arguments could not be coerced.
DISP_E_UNKNOWNLCID | The member being invoked interprets string arguments according to the LCID, and the LCID is not recognized. If the LCID is not needed to interpret arguments, this error should not be returned.
DISP_E_PARAMNOTOPTIONAL | A required parameter was omitted.

Parameters

id
Identifies the member. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.
lcid
The locale context in which to interpret arguments. The lcid is passed to InvokeEx to allow the object to interpret its arguments specific to a locale.
wFlags
Flags describing the context of the InvokeEx call:
Value | Meaning
DISPATCH_METHOD | The member is invoked as a method. If a property has the same name, both this and the DISPATCH_PROPERTYGET flag may be set (defined by IDispatch).
DISPATCH_PROPERTYGET | The member is retrieved as a property or data member (defined by IDispatch).
DISPATCH_PROPERTYPUT | The member is changed as a property or data member (defined by IDispatch).
DISPATCH_PROPERTYPUTREF | The member is changed by a reference assignment rather than a value assignment. This flag is valid only when the property accepts a reference to an object (defined by IDispatch).
DISPATCH_CONSTRUCT The member is being used as a constructor. (This is a new value defined by IDispatchEx). The legal values for wFlags are:
DISPATCH_PROPERTYGET
DISPATCH_METHOD
DISPATCH_PROPERTYGET
DISPATCH_METHOD
DISPATCH_PROPERTYPUT
DISPATCH_PROPERTYPUTREF
DISPATCH_PROPERTYPUT
DISPATCH_PROPERTYPUTREF
DISPATCH_CONSTRUCT
pdp
Pointer to a structure containing an array of arguments, an array of argument DISPIDs for named arguments, and counts for the number of elements in the arrays. See the IDispatch documentation for a full description of the DISPPARAMS structure.
pVarRes
Pointer to the location where the result is to be stored or Null if the caller expects no result. This argument is ignored if DISPATCH_PROPERTYPUT or DISPATCH_PROPERTYPUTREF is specified.
pei
Pointer to a structure that contains exception information. This structure should be filled in if DISP_E_EXCEPTION is returned. Can be Null. See the IDispatch documentation for a full description of the EXCEPINFO structure.
pspCaller
Pointer to a service provider object supplied by the caller, which allows the object to obtain services from the caller. Can be Null.

IDispatchEx::InvokeEx provides all of the same features as IDispatch::Invoke and adds a few extensions:

DISPATCH_CONSTRUCT | Indicates that the item is being used as a constructor.
pspCaller | The pspCaller allows the object access to services provided by the caller. Specific services may be handled by the caller itself or delegated to callers further up the call chain. For example, if a script engine inside a browser makes an InvokeEx call to an external object, the object can follow the pspCaller chain to obtain services from the script engine or browser. (Note that the call chain is not the same as the creation chain — also known as container chain or site chain. The creation chain may be available through some other mechanism such as IObjectWithSite.)
"this" pointer | When DISPATCH_METHOD is set in wFlags, there may be a "named parameter" for the "this" value. The DISPID will be DISPID_THIS and it must be the first named parameter. The unused riid parameter in IDispatch::Invoke has been removed. The puArgArr parameter in IDispatch::Invoke has been removed.

See the IDispatch::Invoke documentation for the following examples:

"Calling a method with no arguments"

"Getting and setting properties"

"Passing parameters"

"Indexed Properties"

"Raising exceptions during Invoke"

"Returning errors"

Example

VARIANT var;
   BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;
   DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};

   // Assign to pdex and bstrName
   pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
   pdex->InvokeEx(dispid, LOCALE_USER_DEFAULT,
   DISPATCH_PROPERTYGET, &dispparamsNoArgs,
   &var, NULL, NULL);

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


getFileVersion 方法

傳回指定檔案的版本編號。

object.GetFileVersion(pathspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
pathspec
必要項。檔案所在的路徑 (絕對或相對的)。

附註

如果 pathspec 並非以命名的檔案結尾，或檔案不包含版本資訊，則 GetFileVersion 方法會傳回一個長度為零的字串 ("") 。

附註 GetFileVersion 方法只能在指定的路徑字串下運作。它不會嘗試解析路徑，也不會檢查指定的路徑是否存在。

下面的範例說明 GetFileVersion 方法的用法。

function ShowFileVersion(pathspec){
  var fso, s = "";
  fso = new ActiveXObject("Scripting.FileSystemObject");
  s += fso.GetFileVersion(pathspec);
  if (s == "")
    s = "No version information available.";
  return(s);
}

基本條件

版本 1


SerialNumber 屬性 (JScript)

JScript

SerialNumber 屬性

傳回可用來明確指定磁碟卷冊的小數。

object.SerialNumber

此物件一律為Drive 物件。

附註

可以利用SerialNumber 屬性確認磁碟已插入正確的可移除影音程式磁碟機。

以下範例說明SerialNumber 屬性的用法:

function ShowDriveInfo(drvpath){
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
  switch (d.DriveType)
  {
    case 0: t = "Unknown"; break;
    case 1: t = "Removable"; break;
    case 2: t = "Fixed"; break;
    case 3: t = "Network"; break;
    case 4: t = "CD-ROM"; break;
    case 5: t = "RAM Disk"; break;
  }
  s = "Drive " + d.DriveLetter + ": - " + t;
  s += "<br>" + "SN: " + d.SerialNumber;
  return(s);
}

基本條件

版本 1


Topic Not Found

The link you just clicked was not able to connect to the target page. Some possible reasons and remedies are as follows:

Reason | Remedy
The URL of the destination topic is incorrect or has changed. | Use the index or the search function instead.
Problems with the help installation. | Uninstall help and then rerun Setup.


JScript

0...n 屬性

傳回由執行中函數的 arguments 屬性所傳回的 arguments 物件中的個別引數之實際值。

[function.]arguments[[0|1|2|...|n]]

引數

function
選擇項。目前正在執行的 Function 物件名稱。
0, 1, 2, �, n
必要項。在 0 到 n 的範圍內的非負整數，其中 0 代表第一個引數，n 代表最後一個引數。最後一個引數 n 的值是 arguments.length-1。

附註

0 . . . n 屬性傳回的值是傳給執行中函數的實際值。雖然不是實際的引數陣列，但組成 arguments 物件的個別引數的存取方式與陣列元素的存取方式相同。

範例

以下範例示範 arguments 物件的 0 . . . n 屬性用法。為充分了解範例起見，傳送一或多個引數給函數：

function ArgTest(){
   var s = "";
   s += "個別的引數是: "
   for (n=0; n< arguments.length; n++){
      s += ArgTest.arguments[n];
      s += " ";
   }
   return(s);
}
print(ArgTest(1, 2, "hello", new Date()));

基本條件

版本 5.5

請參閱

適用於：arguments 物件 | Function 物件


JScript

條件式編譯

條件式編譯讓您在使用新JScript 語言功能的同時，還能與不支援這些功能的舊版本相容。

條件式編譯使用@cc_on 陳述式，或是使用一個 @if 或 @set 陳述式來啟動。使用Jscript的新功能也包含在條件式編譯的某些典型使用中，像在一個script中嵌入偵錯支援，以及追蹤程式碼的執行。

將條件式編譯一律放在註解中，這樣一來，不了解條件式編譯的主應用程式(如Netscape 領航員)才能略過它。這裡有一個例子。

/*@cc_on @*/
/*@if (@_jscript_version >= 4)
   alert("JScript version 4 or better");
   @else @*/
   alert("You need a more recent script engine.");
/*@end @*/

這個例子使用了只有在條件式編譯是被@cc_on 陳述式啟動時，才會使用的特殊定界標。不支援條件式編譯的Script 引擎只看到需要一個新Script 引擎的訊息出現。


JScript

條件式編譯變數

下列已事先定義的變數可以使用在條件式編譯中。如果變數不是true，這個變數還未定義，而且存取時會變成NaN。

變數 | 說明
@_win32 | 在Win32 system中執行為True。
@_win16 | 在Win16 system中執行為True。
@_mac | 在蘋果麥金塔系統執行為True。
@_alpha | 在DEC Alpha處理器中執行為True。
@_x86 | 在Internet處理器中執行為True。.
@_mc680x0 | 在Motorola 680x0處理器中執行為True。
@_PowerPC | 在Motorola PowerPC處理器中執行為True。
@_jscript | 一律為true。
@_jscript_build | 包含JScript scripting 引擎的建立編號。
@_jscript_version | 包含JScript 版本編號（主要與次要編號格式）。


使用訊息方塊

使用警告、提示和確認

請使用警告、確認和提示訊息方塊，以便從您的使用者處取得輸入訊息。這些方塊都是介面 window 物件的方法。由於此 window 物件位在物件架構 (hierarchy) 的頂端，所以您並不需要真的使用這些訊息方塊的完整名稱 (例如，window.alert())，不過這仍不失為一個好辦法，因為這能幫助您記住它們是屬於哪一個物件。

警告訊息方塊

alert 方法有一個引數，也就是您想要顯示給使用者的文字字串。不過，此字串並不是 HTML。訊息方塊有一個 [確定] 按鈕，如此一來，使用者必須關閉它並強制回應，也就是說，在繼續執行之前，使用者必須先關閉訊息方塊。

window.alert("Welcome! Press OK to continue.");

確認訊息方塊

確認訊息方塊能讓您詢問使用者一個「是或否」的問題，並提供使用者一個選擇按下 [確定] 或 [取消] 按鈕的機會。confirm 方法會傳回 true 或 false。這個訊息方塊也是強制回應︰使用者必須回應 (按一下按鈕)、並關閉該訊息方塊，然後再繼續執行。

var truthBeTold = window.confirm("Click OK to continue. Click Cancel to stop.");
if (truthBeTold) {
window.alert("Welcome to our Web page!");
}  else  window.alert("Bye for now!");

提示訊息方塊

提示訊息方塊有一個文字欄位，能讓使用者鍵入回應提示的答覆。這個方塊有一個 [確定] 按鈕和一個 [取消] 按鈕。如果您能提供第二個字串的引數，提示訊息方塊就會顯示文字欄位中的第二個字串，作為預設的回應。否則，預設的文字會是 <undefined>。

與 alert( ) 和 confirm( ) 方法一樣，prompt 也會顯示一個強制回應訊息方塊。在繼續執行之前，使用者必須先關閉它。

var theResponse = window.prompt("Welcome?","Enter your name here.");


在瀏覽器中顯示資訊

Microsoft JScript 提供兩種在瀏覽器中直接顯示資料的方法。您可以使用 document 物件的 write( ) 和 writeln( ) 方法。您也可以在瀏覽器的表單中，以及警告、提示和確認訊息方塊中顯示資訊。

使用 document.write( ) 和 document.writeln( )

最常用來顯示資訊的方法就是使用 document 物件的 write( ) 方法。它包含了一個引數，也就是在瀏覽器中顯示的字串。此字串可以是純文字或 HTML。

字串可以放入單引號或雙引號內，因此您可以引用包含引號或省略符號的項目。

document.write("Pi is approximately equal to " + Math.PI);
document.write( );
秘訣 下面是一個簡單的函數，不必每次當要在瀏覽器視窗中顯示某些內容時鍵入 document.write。這個函數並不會通知您寫入的內容是否尚未定義，但可讓您使用 w(); 指令以顯示空白行。
function w(m) { //寫入函數。
m = "" + m + ""; //  確保變數 m 為一字串。
if ("undefined" != m) { //測試是否為空字串或其他未定義的項目。
   document.write(m);
   }
document.write("<br>");
}

w('<IMG SRC="horse.gif">');
w();
w("This is an engraving of a horse.");
w();

writeln( ) 方法與 write( ) 方法幾乎完全相同，只不過它會在您提供的字串後面附加一個換行字元。在 HTML 中，此種方法通常會在項目後面加一個空格，但是如果您使用 <PRE> 和 <XMP> 標記，換行字元會逐字地解譯，而瀏覽器會將它顯示出來。

當您呼叫 write( ) 方法時，如果文件並非在已開啟和接受剖析的過程，則它會開啟並清除文件，這是很危險的事。下面範例中的 Script 打算每分鐘顯示一次時間，但是顯示過第一次之後就無法再顯示了，因為它已在處理過程中將自己清除了。

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JScript">
function singOut()  {
var theMoment = new Date();
var theHour = theMoment.getHours();
var theMinute = theMoment.getMinutes();
var theDisplacement = (theMoment.getTimezoneOffset() / 60);
theHour -= theDisplacement;
if (theHour > 23)  {
theHour -= 24
}
document.write(theHour + " hours, " + theMinute + " minutes, Coordinated Universal Time.");
window.setTimeout("singOut();", 60000);
}
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT>
singOut();
</SCRIPT>
</BODY>
</HTML>

如果您使用 window 物件的 alert() 方法，而非 document.write()，則 Script 會正常執行。

window.alert(theHour + " hours, " + theMinute + " minutes, Coordinated Universal Time.");
window.setTimeout("singOut();", 60000);
}

清除目前的文件

document 物件的 clear() 方法可清除目前的文件，亦可清除您的 Script (以及文件的其他部份)，因此在使用它的方式與時機上應特別小心。

document.clear();


Copyright

Microsoft® JScript®

本文件的資訊，包括URL及其他網際網路的相關引用，若有變更，恕不另行通知。除非另有註明，否則本文件所提及之公司名稱、組織、產品、人名和事件皆屬虛構，並非特定意指任何真實的公司、組織、產品、人物或事件。遵守所有應適用之著作權法規定為軟體使用者之責任。由於版權所有的限制，未經 Microsoft Corporation 書面許可，貴用戶不得為任何目的而使用任何形式或方式 (電子式、機械式、影印、錄製或其他) 複製、儲存或引進至檢索系統，或傳送本文件的任何部份。

對於本文件所涵蓋之主要內容，Microsoft 可能擁有專利權、專利優先權、商標權、著作權或其他智慧財產權。除非另由 Microsoft Corporatrion 提供書面授權，否則本文件之提供並非即授予貴用戶上述之專利權、商標權、著作權或其他智慧財產。

© 1991-2000微軟公司。所有權利保留。

Microsoft、 MS、 MS-DOS、 ActiveX、 JScript、 Microsoft Press、 MSDN、Visual Basic、Windows、Windows NT、Win32、和Win32s 係於美國及/或其他國家之商標或註冊商標。

本文所提及之產品及公司的真正名稱可能為各該所有者之商標。


陣列長度必須被指定為一有限的正值

設定現有 Array 物件的 length 屬性時，所指定的陣列長度不是正數或零。將負數或非數字 (NaN) 指派給 Array 物件的 length 屬性時，就會發生這個錯誤。請注意，Jscript 會將分數自動轉換成整數。

修正這個錯誤

為長度屬性指派正整數。除了整數的最大值之外 (大約是 40 億)，陣列的大小沒有上限。以下範例示範 Array 物件 length 屬性正確的指定方式。

var my_array = new Array();
my_array.length = 99;

請參閱

使用陣列


陣列長度必須是一有限的正整數

呼叫 Array 建構元時所用的引數不是整數 (whole number，這是指零加上正整數的集合)所造成的錯誤。

修正這個錯誤

只能在建立新的 Array 物件時使用正整數。如果要建立的陣列中只有一個元素，而且不是整數，請以兩個步驟進行。首先，建立一個只有一個元素的陣列，然後將數值放到第一個元素中 (array[0])。以下範例就會產生這個錯誤。

var piArray = new Array(3.14159);

以下範例示範單一數值元素陣列正確的指定方式。

var piArray = new Array(1);
piArray [0] = 3.14159;

除了整數的最大值之外 (大約是 40 億)，陣列的大小沒有上限。

請參閱

使用陣列


必須要有陣列或引數物件

提供的陣列不是引數。這個錯誤只適用於 Function.prototype.apply方法。如果指定的話，這個函數的第二個引數必須是 Array 物件或Arguments 物件。

修正這個錯誤

  • 指定 Array 或 Arguments 物件做為第二個引數。

請參閱

使用陣列 | 套用方法 | JScript 函數


必須是布林（Boolean）

您試圖對不是 Boolean 型別的物件叫用 Boolean.prototype.toString 或 Boolean.prototype.valueOf 方法。這種叫用必須用在 Boolean 型別的物件。例如：

var o = new Object;
o.f = Boolean.prototype.toString;
o.f();

修正這個錯誤

  • 只對 Boolean 型別的物件叫用 Boolean.prototype.toString 或 Boolean.prototype. valueOf 方法。

請參閱

Boolean 物件 | JScript 資料型別 | 控制程式流程 | 複製、傳送與比較資料


無法指定為函數的結果

您試圖將數值指派給函數結果。您可以將函數結果指派給變數，不能將它當成變數使用。如果要指派新的數值給函數本身，請省略括弧 (函數呼叫運算子)。以下範例示範會產生這種錯誤的狀況。

myFunction() = 42;  // Attempting to assign the value 42 to the result of the function call.

修正這個錯誤

  • 不要將函數呼叫的結果值做為可指派的目標。但可以將函數呼叫的結果指派給變數。
myVar = myFunction(42);
  • 或者，您可以將函數本身 (不是它的傳回值) 指派給變數。
myFunction = new Function("return 42;");

請參閱

Function 物件 | 撰寫 JScript 程式碼 | JScript 函數


無法指派給 'this'

試圖將數值指派給 this。this 是 Jscript 關鍵字，是指以下任一項：

  • 目前正在執行方法的物件。
  • 沒有目前方法時的全域物件 (或不屬於其他任何物件的方法)。

所謂方法是指透過物件叫用的 JScript 函數。在方法裏，this 關鍵字作為叫用方法的物件的參考 (這正好是以 new 運算子叫用的類別建構元所建的物件)。

您可以在方法裏使用 this 來引用目前的物件，但無法將新的值指派給 this。

修正這個錯誤

  • 不要嘗試指派給 this。若要存取執行個體化物件的屬性或方法，請使用點運算子 (如 circle.radius)。
備註：使用者自訂的變數不得命名為 this；這是為 JScript 保留的字。

請參閱

This | 解決 Script 的問題


無法在迴圈外使用 'break'

您試圖在迴圈外使用 break 關鍵字。break 關鍵字是用來終止迴圈或 switch 陳述式。它必須嵌在迴圈或 switch 陳述式的主體內。

例外狀況

break 關鍵字後面可以跟著標籤。

break labelname;

只有在使用巢狀迴圈或 switch 陳述式，而且必須中斷非最內層迴圈時，才有必要使用標籤形式的 break 關鍵字。

修正這個錯誤

  • 確定 break 關鍵字出現在封閉的迴圈或 switch 陳述式內。

請參閱

Break | 控制程式流程 | 解決 Script 的問題


無法在迴圈外使用 'continue'

您試圖在迴圈外使用 continue 陳述式。continue 陳述式只能用於下列主體內：

  • do-while 迴圈
  • while 迴圈
  • for 迴圈
  • for/in 迴圈

修正這個錯誤

確定 continue 敘述出現在下列主體內：

  • do-while 迴圈
  • while 迴圈
  • for 迴圈
  • for/in 迴圈

請參閱

Continue | 控制程式流程 | 解決 Script 的問題


關閉條件式編譯

您試圖使用條件式編譯變數，但未先開啟條件式編譯功能。條件式編譯功能一旦開啟，它會告訴 JScript 編譯器將 @ 開頭的識別項當成條件式編譯變數。開啟的方式是在條件程式碼開始前使用以下陳述式：

/*@cc_on @*/

修正這個錯誤

  • 將下列敘述加到條件程式碼開始處：
/*@cc_on @*/

請參閱

條件式編譯 | 條件式編譯變數 | @cc_on | @if 陳述式 | @set 陳述式


必須要有 Date 物件

JScript

必須要有Date物件

您試圖對不是 Date型別的物件叫用 Date.prototype.toString 或 Date.prototype. valueOf 方法。這種叫用必須用在 Date 型別的物件。例如：

var o = new Object;
o.f = Date.prototype.toString;
o.f();

修正這個錯誤

  • 只對 Date 型別的物件使用 Date.prototype.toString 或 Date.prototype. valueOf 方法來叫用。

請參閱

Date 物件 | getDate 方法 | 內建物件


在 'switch' 陳述式中，'default' 只能出現一次

您試圖在 switch 陳述式中使用不止一次 default 陳述式。預設狀況一定是 switch 陳述式中的最後一個狀況敘述 (這是失敗的狀況)。

修正這個錯誤

  • 刪去 switch 陳述式中任何多餘的 default 狀況敘述(在switch陳述式中最多使用一個預設狀況敘述)。

請參閱

Switch | 控制程式流程 | JScript 保留關鍵字


必須要有 Enumerator 物件

您試圖對不是 Enumerator 型別的物件叫用 Enumerator.prototype.atEnd、Enumerator.prototype.item、Enumerator.prototype.moveFirst 或 Enumerator.prototype.moveNext 方法。這種叫用必須用在 Enumerator 型別的物件。以下程式碼範例就會破壞這個規則：

var o = new Object;
o.f = Enumerator.prototype.atEnd;
o.f();

修正這個錯誤

  • 只對 Enumerator 型別的物件叫用 Enumerator.prototype.atEnd、Enumerator.prototype.item、Enumerator.prototype.moveFirst 或 Enumerator.prototype.moveNext 方法。若要查出物件是不是 Enumerator 物件，可使用：
    if(x instanceof Enumerator)

請參閱

Enumerator 物件


已丟出 (throw) 一例外事件但並未被接收 (caught)

JScript

已丟出（throw）一例外事件但並未被接收（caught）

您在程式碼中用到 throw 陳述式，但並未將它包括在 try 區塊中，或是沒有相關聯的 catch 區塊可處理錯誤。例外狀況使用 throw 陳述式從 try 區塊中丟出，並在 try 區塊外以 catch 陳述式攔截。

修正這個錯誤

  • 把會丟出例外狀況的程式碼包括在 try 區塊中，並確定有對應的 catch 區塊。
  • 確定catch 陳述式預期的例外事件形式是正確的。
  • 如果再丟出一次例外事件，確定有另一個相關聯的catch陳述式可處理錯誤。

請參閱

錯誤物件 | throw 陳述式 | try...catch 陳述式


必須要有 '(' (JScript)

JScript

必須要有 '('

您試圖將運算式括在一組括弧裏，但未包含左括弧'(' 。有些運算式必須括在一組左、右括弧裏。請注意下列範例中括弧的使用情況。

for (initialize; test; increment) {
statement;
}

修正這個錯誤

  • 將左括弧 '(' 加到評估運算式中。


必須要有 ')' (JScript)

JScript

必須要有 ')'

您試圖將運算式括在一組括弧裏，但未包含右括弧 ')'。有些運算式必須括在一組左、右括弧裏。請注意下列範例中括弧的使用情況。

for (initialize; test; increment) {
statement;
}

修正這個錯誤

  • 將右括弧')'加到評估運算式中。


必須要有 '/'

您試圖建立通用運算式常值，但未包括斜線 '/'。字串常值表示成括在一對引號中的字元，而通用運算式常值表示成括在一對斜線 '/' 中的字元。

修正這個錯誤

  • 插入終止正斜線'/'，以標示通用運算式的結束。

請參閱

通用運算式物件 | 通用運算式語法


必須要有 ':' (JScript)

JScript

必須要有 ':'

您試圖使用三元條件運算子建立運算式，但在第二、第三個運算元之間未包括冒號'：'。三元 (三個運算元) 條件運算子要求第二 (true)、第三 (false) 個運算元之間必須用冒號'：'。

修正這個錯誤

  • 在第二、第三個運算元之間插入冒號'：'。

請參閱

條件式 (三元) 運算子 (?:) | JScript 運算子


必須要有 ';'

JScript

須要有 ';'

您試圖在同一行放多個陳述式，但未以分號';'隔開。分號';'是用來終止敘述。雖然可以將多個敘述放在同一行上，但必須用分號';'將每個陳述式與下一個陳述式分隔。

修正這個錯誤

  • 以分號';'標示每個敘述的結束。
  • 確定函數呼叫使用正確的括弧。
  • 確定在 for 迴圈的標題沒漏了分號';'。

請參閱

撰寫 JScript 程式碼


必須要有 '@'

您試圖使用 @set 陳述式建立將要用於條件式編譯陳述式的變數，但未在變數名稱前放at符號"@"。

修正這個錯誤

  • 在變數名稱前加上 at符號"@"。例如：
    @set @myvar = 1

請參閱

@set 陳述式 | 條件式編譯 | 條件式編譯變數


必須要有 '}'

您未包括右大括弧'}'，來標示函數主體、迴圈、程式碼區塊或物件初值設定式的結束。例如，for 迴圈若只有左大括弧'{'標示迴圈的主體，就會造成這類錯誤。

修正這個錯誤

  • 加入標示函數、迴圈、區塊或物件初值設定式結束的右大括弧'}'。

請參閱

Function 物件 | 控制程式流程


必須要有 '=' (JScript)

JScript

必須要有 '='

您試圖建立用於條件式編譯陳述式的變數，但未在變數跟要設定的數值間放等號。

修正這個錯誤

  • 加入等號。例如：
    @set @myvar1 = 1

請參閱

條件式編譯 | 條件式編譯變數


必須要有 ']' (JScript)

JScript

必須要有 ']'

您引用了一個陣列元素，但未包括右方括弧']'。引用陣列元素的任何運算式都必須包括左、右方括弧。

修正這個錯誤

  • 為引用陣列元素的運算式加上右方括弧']'。

請參閱

使用陣列 | 陣列物件


通用 (regular) 運算式中，必須要有 ']' (JScript)

JScript

通用 (regular) 運算式中，必須要有 ']'

您試圖建立字元類別，來進行通用運算式模式比對，但未包括右方括弧"]"。將個別的常值字元組合放在方括弧裏，就可以組成字元類別。字元類別會比對它所包含的每一個字元。例如，/[abc]/ 會比對 "a"、"b"或"c" 任一個字母。

修正這個錯誤

  • 為通用運算式加入右方括弧']'。
備註 如果想比對一個方括弧，請利用倒斜線 (\[] 將它免除，使 JScript 不會將它解譯為特殊字元。

請參閱

通用運算式物件 | 通用運算式語法


必須要有 'catch'

您使用 try 區塊來處理例外狀況，但未撰寫相關的 catch 陳述式述。例外狀況處理機制要求將可能失敗的程式碼，以及萬一發生例外狀況時不應執行的程式碼都包在 try 區塊裏。例外狀況是使用 throw陳述式從 try 區塊中丟出，並在 try 區塊外以一或多個 catch 陳述式攔截。

修正這個錯誤

  • 加入相關的 catch 區塊。
  • 嘗試以 finally 區塊代替 catch 區塊。

請參閱

try...catch 陳述式 | Error 物件


必須要有常數

您試圖在條件式編譯測試陳述式中使用 (非條件式編譯) 變數。條件式編譯測試陳述式必須得出常數。

修正這個錯誤

  • 將變數換成常值。
  • 將變數換成條件式編譯變數。

請參閱

條件式編譯 | 條件式編譯變數


必須要有 '@end'

您試圖建立條件式編譯的程式區塊，但未在結束處包括 @end 陳述式。只要將 JScript 陳述式包括在 @if/@end 區塊裏，就可以對它們進行條件式編譯。

修正這個錯誤

  • 加入對應的 @end 陳述式。

請參閱

條件式編譯 | 條件式編譯變數


必須要有十六進位數字

您建立的 Unicode 逸出順序不正確。Unicode 逸出順序是以 \u 開始，後面跟著不多不少剛好四個十六進位數字。Unicode 十六進位數字只能包含數字 0-9，大寫字母 A-F 和小寫字母 a-f。以下範例示範正確的 Unicode 逸出順序。

z = "\u1A5F";

修正這個錯誤

  • 確定 Unicode 十六進位數字是以 \u 開始，只包含數字 0-9、大寫字母 A-F 和小寫字母 a-f；而且四個數字為一組。
備註 如果想在字串中使用常值文字 \u，請利用兩個倒斜線 - (\\u) - 一個是用來免除第一個倒斜線。

請參閱

JScript 資料型別


必須要有識別項 (JScript)

JScript

必須要有識別項

根據上下文，您應該使用一個識別項，但您使用的不是識別項。識別項可以是：

  • 一個變數，
  • 一個屬性，
  • 一個陣列，
  • 或是一個函數名稱。

修正這個錯誤

  • 更改運算式，使識別項出現在等號左邊。

請參閱

使用陣列


必須要有識別項、字串或數字

宣告物件常值所用的常值語法不正確。物件常值的屬性必須是識別項、字串或數字。物件常值 (也稱為 "物件初值設定式") 是由以逗點分隔的成對「屬性:數值」清單組成，並且全部括在方括弧裏。例如：

var point = {x:1.2, y:-3.4};

修正這個錯誤

  • 確定使用正確的常值語法。

請參閱

逗點運算子 (,)


通用（regular）運算式中，必須要有 ')' (JScript)

JScript

通用（regular）運算式中，必須要有 ')'

您試圖建立通用運算式擷取、判別或群組，但未包括右括弧 ')'。在通用運算式中，括弧有幾種用途。其中主要是用來擷取子運算式或指定判別提示；也可以用來將比對模式集合在一起，使得如 *，+，? 等符號可以將這些項目當成一個單位來處理。

修正這個錯誤

  • 加上最右邊的右括弧')'。
備註 如果想比對一個括弧，請利用倒斜線將它免除 - \( -，使 JScript 不會將它解譯為特殊字元。

請參閱

通用運算式物件 | 通用運算式語法


必須要有 'while'

您在 do � while 迴圈中未包括 while 條件。do 陳述式必須在程式碼區塊結束處有一個對應的 while 測試。

修正這個錯誤

  • 在右大括弧後面包括 while 測試敘述。

請參閱

while 陳述式 | 控制程式流程


必須要有 '{'

您未包括左大括弧'{'，來標示函數主體的開始。即使只有一行，構成函數主體的程式碼都必須括在左、右大括弧裏。請注意，在函數主體中使用大括弧的規則比在迴圈中使用時更為嚴格。

修正這個錯誤

  • 加入標示函數主體開始的左大括弧'{'。

請參閱

Function 物件


函數沒有一個正確的原型（prototype）物件

您試圖使用 instanceof 來判定物件是不是衍生自特定函數類別，卻將物件的 prototype 屬性重新定義為 null 或外部物件型別 (兩者都不是有效的 JScript 物件)。外部物件型別可能是來自主機物件模型的物件 (例如 Internet Explorer 的文件或視窗物件)，也可能是外部 COM 物件。

修正這個錯誤

  • 確定函數的 prototype 屬性引用有效的 JScript 物件。

請參閱

Function 物件 | prototype 屬性


必須要有函數

您可能試圖對非 Function 物件叫用 Function prototype 方法之一，也可能在函數呼叫內容中使用物件。例如，因為 example 不是函數，下列程式碼就會產生這類錯誤。

var example = new Object();  // 建立一個叫做 "example" 的新物件。
var x = example ();  // 嘗試把 example 當成一個函數呼叫它。

修正這個錯誤

  • 只對 Function 物件呼叫 Function prototype 方法。
  • 確定只在呼叫函數時使用函數呼叫運算子 ()。

請參閱

Function 物件 | prototype 屬性


指定不合法 (JScript)

JScript

指定不合法

您試圖將數值指定給唯讀的識別項。您無法將數值指定給唯讀的識別項，如主機定義的物件與外部 COM 物件。

修正這個錯誤

  • 不要將數值指定給唯讀的識別項。

請參閱

指定運算子 (=)


不正確的字元 (JScript)

JScript

不正確的字元

組成識別碼所用的字元不是 JScript 編譯器可辨識的有效字元。有效的字元採用下列規則：

  • 第一個字元必須是 ASCII 字母 (大寫或小寫) 或底線 (_)。
  • 之後的字元可以是 ASCII 字母、數字或底線。
  • 識別項名稱不能是保留字。

修正這個錯誤

  • 避免使用不屬於 JScript 語言定義的字元。

請參閱

JScript 變數 | 特殊字元 | JScript 資料型別


不正確的字元集範圍 (JScript)

JScript

不正確的字元集範圍

您試圖以不正確的字元集範圍建立一個通用運算式。字元集範圍必須只用一個字元，例如 a-z 或 0-9；字元集中不得包含 \w 這類字元類別。範圍的第一個字元也必須在範圍的第二個字元之前。例如：

var good = /[a-z]/;  // 有效的字元範圍- a 在z之前。
var notGood = /[z-a]/;  // 無效的字元範圍- z 不在 a之前。

修正這個錯誤

  • 只使用一個字元來組成通用運算式字元集，並確定次序正確。

請參閱

通用運算式物件 | 通用運算式語法


必須要有 JScript 物件

您試圖傳送非 JScript 物件給預期 JScript 物件的內建函數。有各種不同的內建函數需要 JScript 中定義的物件 (相對於主機定義的物件，或如控制項這類外部元件)。

修正這個錯誤

  • 確定傳送正確的型別做為參數。

請參閱

JScript 物件 | 使用陣列


標籤不存在

引用不存在的標籤。標籤可用來標示程式碼區塊，但在指定的範圍內必須是唯一的。

修正這個錯誤

  • 檢查標籤名稱的拼字是否正確。
  • 確定引用的所有標籤，都已在目前的領域裡定義過(包含之後的定義)。

請參閱

Labeled 陳述式 | switch 陳述式 | break 陳述式 | continue 陳述式


標籤被重新定義

建立新的標籤，卻給它一個現有標籤的名稱。標籤可用來標示程式碼區塊，但在指定的範圍內必須是唯一的。

修正這個錯誤

  • 確保程式中用的所有標籤在它們個別的領域中都是唯一的。

請參閱

Labeled 陳述式 | switch 陳述式 | break 陳述式 | continue 陳述式


必須要有數字

您試圖對不是 Number 型別的物件叫用 Number.prototype.toString 或 Number.prototype. valueOf方法。這種叫用必須用在 Number 型別的物件。

修正這個錯誤

只對 Number 型別的物件叫用 Number.prototype.toString 或 Number.prototype. valueOf 方法。

請參閱

Number 物件 | number 屬性


必須要有物件

您試圖對不是 String型別的物件叫用 String.prototype.toString 或 String.prototype.valueOf 方法。這種叫用必須用在 String 型別的物件。

修正這個錯誤

只對 String 型別的物件叫用 String.prototype.toString 或 String.prototype.valueOf 方法。

請參閱

Object 物件 | JScript 物件


必須要有物件成員

試圖對物件的資料成員執行運算，但成員不存在。

修正這個錯誤

  • 確定鍵入的資料成員名稱正確。

請參閱

Object 物件 | JScript 物件


必須要有通用運算式物件 (JScript)

JScript

必須要有通用運算式物件

您試圖從 RegExp prototype 物件中對其他型別的物件叫用RegExp.prototype.toString 或 RegExp.prototype.valueOf方法。這種叫用必須用在 Regular Expression 型別的物件。

修正這個錯誤

  • 只對有效的 RegExp 物件叫用 RegExp.prototype.toString 或 RegExp.prototype.valueOf方法。

請參閱

通用運算式物件 | 通用運算式語法


不能在函數之外使用 'return' 陳述式

JScript

不能在函數之外使用'return' 陳述式

您在程式碼的全域範圍中使用 return 陳述式。return 陳述式應該只出現在函數主體內。

利用 () 運算子來叫用函數就是一個運算式。所有運算式都有值；return 陳述式是用來指定函數傳回的值。一般格式為：

return [ expression ];

執行 return 敘述時，會計算 expression，並做為函數值傳回。如果沒有運算式，就傳回 undefined。

執行到 return 敘述時，即使函數主體中還有其他陳述式，函數的執行都會停止。唯一的例外是，如果 return 陳述式出現在 try 區塊中，而且有對應的 finally 區塊，就會先執行 finally 區塊的程式碼，再傳回函數。

如果函數是因為到達函數主體的結束處而傳回，不是因為執行到 return 陳述式，那麼傳回的值就是 undefined 值 (這表示不能在較大的運算式中使用函數結果)。

修正這個錯誤

  • 刪去程式碼主體 (全域範圍) 中的 return 陳述式。

請參閱

return 陳述式 | Function 物件 | caller 屬性


必須要有字串

試圖從 String prototype 物件中對其他型別的物件叫用 String.prototype.toString 或 String.prototype.valueOf方法。這種叫用必須用在 String 型別的物件。

修正這個錯誤

  • 只對字串叫用 String.prototype.toString 或 String.prototype.valueOf 方法。

請參閱

String 物件 | toString 方法


語法錯誤 (JScript)

JScript

語法錯誤

所建的陳述式違反 JScript 的一或多項文法規則。

修正這個錯誤

  • 仔細檢查所指示行號的程式語法。
  • 尋找方向錯誤的括弧或大括弧。

請參閱

Error物件


通用（regular）運算式中，發生語法錯誤 (JScript)

JScript

通用（regular）運算式中，發生語法錯誤

搜尋字串的結構違反 JScript 通用運算式的一或多項文法規則。

修正這個錯誤

  • 確定通用運算式搜尋字串的結構嚴守 JScript 的通用運算式語法。

請參閱

通用運算式物件 | 通用運算式物件屬性 | 通用運算式物件方法 | 通用運算式語法 | compile 方法


分數位的數值超出範圍

您試圖傳送無效的引數給 Number.prototype.toExponential函數。toExponential() 函數的引數必須介於 0 到 20 之間 (含0與 20)。

修正這個錯誤

  • 確定傳到 toExponential() 的引數不會太大或太小。

請參閱

toExponential 方法


此精算值是超出範圍的

您試圖傳送無效的引數給 Number.prototype.toPrecision 函數。toPrecision 的引數必須介於 1 到 21 之間 (含 21)。

修正這個錯誤

  • 確定傳到 toPrecision的引數不會太大或太小。

請參閱

toPrecision 方法


解碼的 URI 不是有效編碼

您試圖將格式錯誤的 URI (Uniform Resource Identifier) 解碼。URI 有特殊的語法；大部分非文數字的字元都必須經過編碼後才能用於 URI。您可以使用 encodeURI 和 encodeURIComponent 方法根據一般的 JScript 字串建立 URI。.

完整的 URI 由一連串元件與分隔符號構成。一般格式為：

<Scheme>:<first>/<second>;<third>?<fourth>

角括弧裏的名稱代表元件，而":"、"/"、";"和"?" 是保留字元，做為分隔符號使用。

修正這個錯誤

  • 確定只嘗試將有效的 URI 解碼。您無法將一般的 JScript 字串解碼，因為其中包含無效的字元。

請參閱

decodeURI 方法 | decodeURIComponent 方法


將被編碼的 URI 中包含無效的字元

您試圖將字串編碼為 URI (Uniform Resource Identifier)，但它包含無效的字元。雖然字串內大部分都是可以轉換成 URI 的有效字元，但有些 Unicode 字元組不合法。

修正這個錯誤

確定將被編碼的字串中只包含有效的 Unicode 字元組。

完整的 URI 由一連串元件與分隔符號構成。一般格式為：

<Scheme>:<first>/<second>;<third>?<fourth>

角括弧裏的名稱代表元件，而 ":"、"/"、";"和"?"是保留字元，做為分隔符號使用。

請參閱

encodeURI 方法 | encodeURIComponent 方法 |


Throw 必須接著一運算式，且於同一行程式碼

您使用了 throw 關鍵字，但在同一原始程式行上，它的後面並未跟著運算式。throw 陳述式由兩個部分組成：throw 關鍵字，後面跟著將被丟出的運算式。例如：

if (denominator == 0) {
throw new DivideByZeroException();
}

這兩個元件不得分開。

修正這個錯誤

  • 確定 throw 關鍵字跟即將被丟出的運算式出現在同一行上。

請參閱

Error 物件 | throw 陳述式 | try...catch 陳述式


未定義的識別項

您試圖使用 JScript 編譯器無法辨識的識別項。遇到下列狀況時，就會傳回未定義的值：

  • 不存在的變數
  • 已宣告，但未指派數值的變數
  • 不存在的物件屬性

修正這個錯誤

  • 以 var 陳述式宣告變數 (例如 var x;)。

請參閱

JScript 變數 | 變數範圍


未預期的次數符號 (JScript)

JScript

未預期的次數符號

撰寫通用運算式搜尋模式時，您使用不正確的重複因數建立了一個模式元素。例如，模式

/^+/

是不正確的，因為元素^ (輸入的開頭) 不能有重複因數。下表列出了不能有重複因數的元素。

元素 | 說明
^ | 輸入的開頭
$ | 輸入的結尾
\b | 文字邊界
\B | 非文字的邊界
* | 0或更多個重複
+ | 1或更多個重複
? | 0或1個重複
{n} | n 個重複
{n,} | n 或更多個重複
{n,m} | n 到 m 個重複，包含n與m

修正這個錯誤

  • 確定搜尋模式元素的重複因數都是正確的。

請參閱

通用運算式物件 | 通用運算式語法


無法判定程式註解的結尾 (JScript)

JScript

無法判定程式註解的結尾

您開始一個多行的程式註解，但未以正確的方式結束。多行程式註解是以 "/*" 組合開始，並以 "*/" 組合結束。範例如下：

/* This is a comment
This is another part of the same comment.*/

修正這個錯誤

  • 確定以 "*/" 結束多行程式註解。

請參閱

Comment 陳述式


無法判定字串常數的結尾 (JScript)

JScript

無法判定字串常數的結尾

您未以右引號結束字串常數。字串常數必須括在一對引號中。

備註 可以使用單引號或雙引號的搜尋比對。雙引號可以包含於括在單引號的字串中，而單引號也可以包含於括在雙引號的字串中。

修正這個錯誤

  • 將右引號加到字串結尾。

請參閱

String 物件 | toString 方法


必須要有 VBArray

您提供的物件不是 Visual Basic safeArray，但這裏應該是 Visual Basic safeArray。

new VBArray(safeArray);

VBArray 是唯讀的，而且無法直接建立。safeArray 引數是 VBArray 值，而且必須在傳給 VBArray 建構元前先取得 VBArray 值。只有從現有 ActiveX 或其他物件中，才能擷取 VBArray 值。

修正這個錯誤

  • 確定只傳送 VBArray 陣列物件給 VBArray 建構元。

請參閱

VBArray 物件 | 使用陣列


運算子摘要 (JScript)

JScript

運算子摘要

下列表格列出在運算子個別類型中的 JScript 運算子。

計算運算子

運算子 | 符號
加法 | +
遞減 | —
除法 | /
遞增 | ++
模數 | %
乘法 | *
減法 | -
一元負數 | —

邏輯運算子

運算子 | 符號
逗號 | ,
條件式(三元) | ?:
等於 | ==
大於 | >
大於或等於 | >=
恆等 | ===
不等於 | !=
小於 | <
小於或等於 | <=
AND 邏輯 | &&
NOT 邏輯 | !
Or 邏輯 | ||
非恆等 | !==

位元運算子

運算子 | 符號
AND 位元 | &
位元左移 | <<
NOT 位元 | ~
Or 位元 | |
位元右移 | >>
XOR 位元 | ^
不帶正負號的右移 | >>>

指定運算子

指定運算子

複合指定運算子

其他運算子

delete

instanceof

new

typeof

void

基本條件

版本 1


科技預報版上的 Jscript 語言功能

Microsoft JScript 5.6 中引進了一些新的功能。

入門

以下的文件資料可以幫助你加快速度。歡迎您對這些文件資料提出建議與批評。

內容 | 請參閱
in 運算子 | in 運算子
新Global物件方法 | decodeURIComponent 方法 decodeURI 方法 encodeURI 方法 encodeURIComponent 方法
新 Object物件方法 | hasOwnProperty 方法 isPrototypeOf 方法
新Function物件方法 | apply 方法 call 方法
新Array物件方法 | pop 方法 push 方法 shift 方法 splice 方法 unshift 方法
新Number物件方法 | toFixed 方法 toExponential 方法 toPrecision 方法
新Date 物件方法 | toDateString 方法 toTimeString 方法 toLocaleDateString 方法 toLocaleTimeString 方法
新RegExp 物件方法與屬性 | toString 方法 global 屬性 ignoreCase 屬性 multiline 屬性
新String物件方法 | localeCompare 方法 toLocaleLowerCase 方法 toLocaleUpperCase 方法
新Error物件屬性 | name 屬性 message 屬性


getFileVersion 方法

傳回指定檔案的版本編號。

object.GetFileVersion(pathspec)

引數

object
必要項。一律是 FileSystemObject 的名稱。
pathspec
必要項。檔案所在的路徑 (絕對或相對的)。

附註

如果 pathspec 並非以命名的檔案結尾，或檔案不包含版本資訊，則 GetFileVersion 方法會傳回一個長度為零的字串 ("") 。

備註 GetFileVersion 方法只能在指定的路徑字串下運作。它不會嘗試解析路徑，也不會檢查指定的路徑是否存在。

下面的範例說明 GetFileVersion 方法的用法。

function ShowFileVersion(pathspec){
  var fso, s = "";
  fso = new ActiveXObject("Scripting.FileSystemObject");
  s += fso.GetFileVersion(pathspec);
  if (s == "")
    s = "No version information available.";
  return(s);
}

基本條件

版本 1


版本資訊 (JScript)

JScript

版本資訊

下表列出了Microsoft JScript 利用主應用程式執行的版本。

語言元素 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5
Microsoft Internet Explorer 3.0 | x |  |  |  |  |
Microsoft Internet Information Server 1.0 |  | x |  |  |  |
Microsoft Internet Explorer 4.0 |  |  | x |  |  |
Microsoft Internet Information Server 4.0 |  |  | x |  |  |
Microsoft Windows Scripting Host 1.0 |  |  | x |  |  |
Microsoft Visual Studio 6.0 |  |  |  | x |  |
Microsoft Internet Explorer 5.0 |  |  |  |  | x |
Microsoft Internet Information Services 5.0 |  |  |  |  |  | x

下表列出了JScript 的語言功能以及它們首次出現的版本。

語言項目 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5
0�n 屬性 |  |  |  |  |  | x
$1...$9 屬性 |  |  | x |  |  |
abs 方法 | x |  |  |  |  |
acos 方法 | x |  |  |  |  |
ActiveXObject 物件 |  |  | x |  |  |
加號運算子 (+) | x |  |  |  |  |
anchor 方法 | x |  |  |  |  |
apply 方法 |  |  |  |  |  | x
arguments 屬性 |  | X |  |  |  |
Array 物件 |  | X |  |  |  |
asin 方法 | x |  |  |  |  |
指定運算子 (=) | x |  |  |  |  |
atan 方法 | x |  |  |  |  |
atan2 方法 | x |  |  |  |  |
atEnd 方法 |  |  | x |  |  |
big 方法 | x |  |  |  |  |
AND 位元運算子 (&) | x |  |  |  |  |
位元左移運算子 (<<) | x |  |  |  |  |
NOT位元運算子 (~) | x |  |  |  |  |
OR位元運算子 (|) | x |  |  |  |  |
位元右移運算子 (>>) | x |  |  |  |  |
XOR位元運算子 (^) | x |  |  |  |  |
blink 方法 | x |  |  |  |  |
bold 方法 | x |  |  |  |  |
Boolean 物件 |  | x |  |  |  |
break 陳述式 | x |  |  |  |  |
call 方法 |  |  |  |  |  | x
callee 屬性 |  |  |  |  |  | x
caller 屬性 |  | x |  |  |  |
catch 陳述式 |  |  |  |  | x |
@cc_on 陳述式 |  |  | x |  |  |
ceil 方法 | x |  |  |  |  |
charAt 方法 | x |  |  |  |  |
charCodeAt 方法 |  |  |  |  |  | x
逗號運算子(,) | x |  |  |  |  |
//(單行註解陳述式) | x |  |  |  |  |
/*..*/(多行註解陳述式) | x |  |  |  |  |
比較運算子 | x |  |  |  |  |
compile 方法 |  |  | x |  |  |
concat 方法 (Array) |  |  | x |  |  |
concat 方法 (String) |  |  | x |  |  |
條件式編譯 |  |  | x |  |  |
條件式編譯變數 |  |  | x |  |  |
條件式(三元)運算子(?:) | x |  |  |  |  |
constructor 屬性 |  | x |  |  |  |
continue 陳述式 | x |  |  |  |  |
cos 方法 | x |  |  |  |  |
轉換資料型態 |  |  | x |  |  |
Date 物件 | x |  |  |  |  |
decodeURI 方法 |  |  |  |  |  | x
decodeURIComponent |  |  |  |  |  | x
遞減運算子 (—) | x |  |  |  |  |
delete 運算子 |  |  | x |  |  |
description 屬性 |  |  |  |  | x |
dimensions 方法 |  |  | x |  |  |
除號運算子 (/) | x |  |  |  |  |
do...while 陳述式 |  |  | x |  |  |
E 屬性 | x |  |  |  |  |
encodeURI 方法 |  |  |  |  |  | x
encodeURI 元件 |  |  |  |  |  | x
Enumerator 物件 |  |  | x |  |  |
等於運算子 (==) | x |  |  |  |  |
Error 物件 |  |  |  |  | x |
escape 方法 | x |  |  |  |  |
eval 方法 | x |  |  |  |  |
exec 方法 |  |  | x |  |  |
exp 方法 | x |  |  |  |  |
fixed 方法 | x |  |  |  |  |
floor 方法 | x |  |  |  |  |
fontcolor 方法 | x |  |  |  |  |
fontsize 方法 | x |  |  |  |  |
for 陳述式 | x |  |  |  |  |
for...in 陳述式 |  |  |  |  | x |
fromCharCode 方法 |  |  | x |  |  |
Function 物件 |  | x |  |  |  |
function 陳述式 | x |  |  |  |  |
getDate 方法 | x |  |  |  |  |
getDay 方法 | x |  |  |  |  |
getFullYear 方法 |  |  | x |  |  |
getHours 方法 | x |  |  |  |  |
getItem 方法 |  |  | x |  |  |
getMilliseconds 方法 |  |  | x |  |  |
getMinutes 方法 | x |  |  |  |  |
getMonth 方法 | x |  |  |  |  |
GetObject 函數 |  |  | x |  |  |
getSeconds 方法 | x |  |  |  |  |
getTime 方法 | x |  |  |  |  |
getTimezoneOffset 方法 | x |  |  |  |  |
getUTCDate 方法 |  |  | x |  |  |
getUTCDay 方法 |  |  | x |  |  |
getUTCFullYear 方法 |  |  | x |  |  |
getUTCHours 方法 |  |  | x |  |  |
getUTCMilliseconds 方法 |  |  | x |  |  |
getUTCMinutes 方法 |  |  | x |  |  |
getUTCMonth 方法 |  |  | x |  |  |
getUTCSeconds 方法 |  |  | x |  |  |
getVarDate 方法 |  |  | x |  |  |
getYear 方法 | x |  |  |  |  |
Global 物件 |  |  | x |  |  |
global 屬性 |  |  |  |  |  | x
大於運算子 (>) | x |  |  |  |  |
大於或等於運算子 (>=) | x |  |  |  |  |
hasOwnProperty 方法 |  |  |  |  |  | x
恆等運算子(===) | x |  |  |  |  |
@if 陳述式 |  |  | x |  |  |
if...else 陳述式 | x |  |  |  |  |
ignoreCase 屬性 |  |  |  |  |  | x
遞增運算子 (++) | x |  |  |  |  |
index 屬性 |  |  | x |  |  |
indexOf 方法 | x |  |  |  |  |
不等於運算子 (!=) | x |  |  |  |  |
Infinity 屬性 |  |  | x |  |  |
input 屬性 |  |  | x |  |  |
instanceof 運算子 |  |  |  |  | x |
isFinite 方法 |  |  | x |  |  |
isNaN 方法 | x |  |  |  |  |
isPrototypeOf 方法 |  |  |  |  |  | x
italics 方法 | x |  |  |  |  |
item 方法 |  |  | x |  |  |
join 方法 |  | x |  |  |  |
Labeled 陳述式 |  |  | x |  |  |
lastIndex 屬性 |  |  | x |  |  |
lastIndexOf 方法 | x |  |  |  |  |
LastMatch 屬性 |  |  |  |  |  | x
lastParen 屬性 |  |  |  |  |  | x
lbound 方法 |  |  | x |  |  |
leftContext 屬性 |  |  |  |  |  | x
length 屬性 (Arguments) |  |  |  |  |  | x
length 屬性 (Array) |  | x |  |  |  |
length 屬性 (Function) |  | x |  |  |  |
length 屬性 (String) | x |  |  |  |  |
小於運算子 (<) | x |  |  |  |  |
小於或等於運算子 (<=) | x |  |  |  |  |
link 方法 | x |  |  |  |  |
LN2 屬性 | x |  |  |  |  |
LN10 屬性 | x |  |  |  |  |
localeCompare 方法 |  |  |  |  |  | x
log 方法 | x |  |  |  |  |
LOG2E 屬性 | x |  |  |  |  |
LOG10E 屬性 | x |  |  |  |  |
AND 邏輯運算子 (&&) | x |  |  |  |  |
NOT 邏輯運算子 (!) | x |  |  |  |  |
OR 邏輯運算子 (||) | x |  |  |  |  |
match 方法 |  |  | x |  |  |
Math 物件 | x |  |  |  |  |
max 方法 | x |  |  |  |  |
MAX_VALUE 屬性 |  | x |  |  |  |
message 屬性 |  |  |  |  |  | x
min 方法 | x |  |  |  |  |
MIN_VALUE 屬性 |  | x |  |  |  |
模數運算子 (%) | x |  |  |  |  |
moveFirst 方法 |  |  | x |  |  |
moveNext 方法 |  |  | x |  |  |
multiline 屬性 |  |  |  |  |  | x
乘號運算子 (*) | x |  |  |  |  |
name 屬性 |  |  |  |  |  | x
NaN 屬性 (Global) |  |  | x |  |  |
NaN 屬性 (Number) |  | x |  |  |  |
NEGATIVE_INFINITY 屬性 |  | x |  |  |  |
new 運算子 | x |  |  |  |  |
非恆等運算子 (!==) | x |  |  |  |  |
Number 物件 |  | x |  |  |  |
number 屬性 |  |  |  |  | x |
Object 物件 |  |  | x |  |  |
運算子優先順序 | x |  |  |  |  |
parse 方法 | x |  |  |  |  |
parseFloat 方法 | x |  |  |  |  |
parseInt 方法 | x |  |  |  |  |
PI 屬性 | x |  |  |  |  |
pop 方法 |  |  |  |  |  | x
POSITIVE_INFINITY 屬性 |  | x |  |  |  |
pow 方法 | x |  |  |  |  |
prototype 屬性 |  | x |  |  |  |
propertyIsEnumeramble 屬性 |  |  |  |  |  | x
push 方法 |  |  |  |  |  | x
random 方法 | x |  |  |  |  |
RegExp 物件 |  |  | x |  |  |
通用運算式物件 |  |  | x |  |  |
通用運算式語法 |  |  | x |  |  |
replace 方法 | x |  |  |  |  |
return 陳述式 | x |  |  |  |  |
reverse 方法 |  | x |  |  |  |
rightContext 屬性 |  |  |  |  |  | x
round 方法 | x |  |  |  |  |
ScriptEngine 函數 |  | x |  |  |  |
ScriptEngineBuildVersion 函數 |  | x |  |  |  |
ScriptEngineMajorVersion 函數 |  | x |  |  |  |
ScriptEngineMinorVersion 函數 |  | x |  |  |  |
search 方法 |  |  | x |  |  |
@set 陳述式 |  |  | x |  |  |
setDate 方法 | x |  |  |  |  |
setFullYear 方法 |  |  | x |  |  |
setHours 方法 | x |  |  |  |  |
setMilliseconds 方法 |  |  | x |  |  |
setMinutes 方法 | x |  |  |  |  |
setMonth 方法 | x |  |  |  |  |
setSeconds 方法 | x |  |  |  |  |
setTime 方法 | x |  |  |  |  |
setUTCDate 方法 |  |  | x |  |  |
setUTCFullYear 方法 |  |  | x |  |  |
setUTCHours 方法 |  |  | x |  |  |
setUTCMilliseconds 方法 |  |  | x |  |  |
setUTCMinutes 方法 |  |  | x |  |  |
setUTCMonth 方法 |  |  | x |  |  |
setUTCSeconds 方法 |  |  | x |  |  |
setYear 方法 | x |  |  |  |  |
shift 方法 |  |  |  |  |  | x
sin 方法 | x |  |  |  |  |
slice 方法 (Array) |  |  | x |  |  |
slice 方法 (String) |  |  | x |  |  |
small 方法 | x |  |  |  |  |
sort 方法 |  | x |  |  |  |
source 屬性 |  |  | x |  |  |
splice 方法 |  |  |  |  |  | x
split 方法 |  |  | x |  |  |
sqrt 方法 | x |  |  |  |  |
SQRT1_2 屬性 | x |  |  |  |  |
SQRT2 屬性 | x |  |  |  |  |
strike 方法 | x |  |  |  |  |
String 物件 | x |  |  |  |  |
sub 方法 | x |  |  |  |  |
substr 方法 |  |  | x |  |  |
substring 方法 | x |  |  |  |  |
減號運算子 (-) | x |  |  |  |  |
sup 方法 | x |  |  |  |  |
switch 陳述式 |  |  | x |  |  |
tan 方法 | x |  |  |  |  |
test 方法 |  |  | x |  |  |
this 陳述式 | x |  |  |  |  |
throw 陳述式 |  |  |  |  | x |
toArray 方法 |  |  | x |  |  |
toDateString 方法 |  |  |  |  |  | x
toExponential 方法 |  |  |  |  |  | x
toFixed 方法 |  |  |  |  |  | x
toGMTString 方法 | x |  |  |  |  |
toLocaleDateString 方法 |  |  |  |  |  | x
toLocaleLowercase 方法 |  |  |  |  |  | x
toLocaleString 方法 | x |  |  |  |  |
toLocaleTimeString 方法 |  |  |  |  |  | x
toLocaleUppercase 方法 |  |  |  |  |  | x
toLowerCase 方法 | x |  |  |  |  |
toPrecision 方法 |  |  |  |  |  | x
toString 方法 |  | x |  |  |  |
toTimeString 方法 |  |  |  |  |  | x
toUpperCase 方法 | x |  |  |  |  |
toUTCString 方法 |  |  | x |  |  |
try 陳述式 |  |  |  |  | x |
typeof 運算子 | x |  |  |  |  |
ubound 方法 |  |  | x |  |  |
一元負數運算子 (-) | x |  |  |  |  |
undefined 屬性 |  |  |  |  |  | x
unescape 方法 | x |  |  |  |  |
unshift 方法 |  |  |  |  |  | x
不帶正負號的右移運算子 (>>>) | x |  |  |  |  |
UTC 方法 | x |  |  |  |  |
valueOf 方法 |  | x |  |  |  |
var 陳述式 | x |  |  |  |  |
VBArray 物件 |  |  | x |  |  |
void 運算子 |  | x |  |  |  |
while 陳述式 | x |  |  |  |  |
with 陳述式 | x |  |  |  |  |


撰寫 JScript 程式碼

JScript

JScript 變數

在任何程式語言裡，一個概念會使用資料加以量化。

How old am I?

在Jscript中，給予概念的名稱就是變數；它代表了一個個體執行的值。使用這個變數，其實是使用變數代表的資料。這裡有一個例子：

NumberOfDaysLeft = EndDate – TodaysDate;

從機制方面來說，變數用來儲存、擷取、操作各種出現在Script中不同的值。如果給予變數有意義的名稱，可以讓人們更易於了解 Script 所做的事。

宣告變數

一個變數第一次出現在Script 中就是它的宣告。這次的出現會使變數安置在記憶體中，便於您稍後在Script中使用。請務必在使用變數之前先用var 關鍵字宣告變數。

var count;  // 單個宣告。
var count, amount, level;  // 以一個var 關鍵字宣告多個變數。.
var count = 0, amount = 100;  // 一個陳述式的變數宣告與初始化。

如果不在var 陳述式中初始化變數，此變數會自動顯示undefined 的Jscript值。雖然這樣做並不安全，宣告陳述式中省略var 關鍵字卻是合法的JScript 語法。 此時，JScript 直譯程式將使得變數出現在全域範圍。不過當您在程序階層宣告變數時，如果不想讓變數出現在全域範圍，您就必須在宣告變數時使用var 關鍵字。

命名變數

變數名稱是識別項。在Jscript中，識別項用來：

  • 命名變數，
  • 命名函數，
  • 提供迴圈的標籤。.

JScript 是大小寫相異的語言。也就是說，一個名為myCounter 的變數跟一個名為MYCounter的變數是不同的。變數名稱的長度不限。下列是幾項建立合法變數名稱的原則：

  • 第一個字元必須是ASCII字母 (大小寫皆可)、底線 (_)字元。注意數字不能拿來當第一個字元。
  • 後面的字元必須是字母、數字、或底線。
  • 變數名稱不能為保留字。

這裡是一些正確變數名稱的例子：

_pagecount
Part9
Number_Items

這裡是一些不正確變數名稱的例子：

99Balloons // 不能以數字開頭。
Smith&Wesson // (&)字元不是正確的變數名稱字元。

當您想要宣告並初始化一個變數，可是又不想給它特定的值，您可以指定其JScript值為null裡有個例子。

var bestAge = null;
var muchTooOld = 3 * bestAge; // muchTooOld 的值為0。

如果宣告了一個變數，但沒有指定值，那麼這個變數確實存在，只是其Jscript值為undefined。這裡有個例子。

var currentCount;
var finalCount = 1 * currentCount; // finalCount 的值是NaN，因為currentCount 未定義。

注意在JScript 中null 和undefined 最大的不同是，null 就好比數字0，而undefined 好比特殊值NaN (非數字)。null 值和undefined 值經比較後一律相等。

宣告變數時可以省略var 關鍵字，並為它指定一個值。 這是不明確的宣告。

noStringAtAll = ""; // 不明確地宣告變數noStringAtAll。

未經宣告的變數不能使用。

var volume = length * width; // 錯誤 - 長度與寬度不存在。

強制轉換

JScript 直譯程式只能評估運算元的資料型態相同的運算式。如果沒有強制轉換，執行兩種不同資料型態的運算式(例如一個數字和一個字串) 會產生錯誤結果。Jscript卻不是這樣。

JScript 的語言架構不夠嚴謹。這代表JScript 的變數並沒有固定的型態(相對於嚴謹的架構像C++ 語言)。JScript變數的型態即相當於其所包含之值的型態。這有一個好處，就是在您決定它的值為何種型態時，有了很大的彈性空間。

當您在Jscript中同時執行好幾種不同類型的值時，不用害怕JScript 直譯程式會出問題。因為Jscript直譯程式會自動地將一種資料類型轉換(強制轉換)成另一種，然後再執行。例如：

執行 | 結果
增加一個數字和字串 | 數字強制轉換成字串。
增加一個布林和字串 | 布林強制轉換成字串。
增加一個數字和布林 | 布林強制轉換成數字。

再想想下面的例子。

var x = 2000;      // 一個數字。
var y = "Hello";   // 一個字串。
x = x + y;         // 強制轉換成字串的數字。
document.write(x); // 輸出2000Hello。

若要明確將字串轉換成整數，請使用parseInt 方法。要明確將字串轉換成數字，請使用parseFloat 方法。注意為了比較，字串會自動轉換成相等的數字，但是字串會保留作為加法的運算 (連結)。


new 運算子

JScript

typeof 運算子

說明

傳回一個字串，指出運算式的資料型態。

typeof[()expression[]] ;

expression 引數是要取得型態資訊的任意運算式。

附註

typeof 運算子會以字串傳回型態資訊。typeof 可能傳回的六個值分別是：number、string、boolean、object、function 和 undefined。

在 typeof 語法中的括弧可有可無。

基本條件

版本 1

請參閱

運算子優先順序 | 運算子摘要


Scripting 執行階段程式庫

FileSystemObject 物件模型

FileSystemObject (FSO) 物件模型可讓您使用一般常用的 .method 語法，以及為數眾多的屬性、方法和事件來處理資料夾和檔案。

使用這項以物件為基礎的工具，您可以：

  • 利用 HTML 來建立網頁
  • 利用 Windows Script Host 來建立 Microsoft Windows 的批次檔
  • 利用 Script 控制項為其他程式語言所開發的應用程式提供 Scripting 功能

由於在客戶端使用 FSO 會加重駭客存取客戶端區域檔案系統所造成的安全性問題，所以本文假定使用 FSO 物件模型所建立的 Script，是透過伺服端的 Internet 網頁來執行的。因為使用的是伺服端，所以 Internet Explorer 預設的安全性設定不允許客戶端使用 FileSystemObject 物件。覆蓋這些預設值可能會使本機電腦的檔案系統受到駭客威脅，進而造成檔案系統的整體性完全被破壞，導致資料遺失或更嚴重的後果。

FSO 物件模型讓伺服端的應用程式具有建立、變更、移動和刪除資料夾的能力，或是偵測某些特定資料夾是否存在，如果存在的話，還能偵測出資料夾所在的位置。您也可以找到有關資料夾的資訊，像是資料夾的名稱、建立資料夾或最後一次修改資料夾的日期等等。

FSO 物件模型也簡化了檔案的處理。處理檔案時，主要的重點在於如何將資料以最節省空間和資源，以及最容易存取的格式來儲存。您必須能建立檔案、插入或變更資料，並且輸出 (讀取) 資料。由於將資料儲存在 Access 或 SQL Server 之類的資料庫中，會使您的應用程式大量增加額 外的消耗時間，所以將資料儲存在二進位檔案或文字檔案中可能是最有效率的解決方案。因為您可能不想增加額外的消耗時間，或是您對資料存取的需求並不需要用到功能完整的資料庫所提供的額外功能。

  • FSO 物件模型包含在 Scripting 型態程式庫 (Scrrun.dll) 中，可支援透過 TextStream 物件來建立和處理文字檔的功能。雖然目前還無法支援建立或處理二進位檔案的功能，但是未來對二進位檔案的支援已在規劃當中。


Copyright

Microsoft® VBScript®

本文件的資訊，包括URL及其他網際網路的相關引用，若有變更，恕不另行通知。除非另有註明，否則本文件所提及之公司名稱、組織、產品、人名和事件皆屬虛構，並非特定意指任何真實的公司、組織、產品、人物或事件。遵守所有應適用之著作權法規定為軟體使用者之責任。由於版權所有的限制，未經 Microsoft Corporation 書面許可，貴用戶不得為任何目的而使用任何形式或方式 (電子式、機械式、影印、錄製或其他) 複製、儲存或引進至檢索系統，或傳送本文件的任何部份。

對於本文件所涵蓋之主要內容，Microsoft 可能擁有專利權、專利優先權、商標權、著作權或其他智慧財產權。除非另由 Microsoft Corporatrion 提供書面授權，否則本文件之提供並非即授予貴用戶上述之專利權、商標權、著作權或其他智慧財產。

© 1991-2000 微軟公司。所有權利保留。

Microsoft、 MS、 MS-DOS、 ActiveX、 JScript、 Microsoft Press、 MSDN、Visual Basic、Windows、Windows NT、Win32、和Win32s 係於美國及/或其他國家之商標或註冊商標。

本文所提及之產品及公司的真正名稱可能為各該所有者之商標。


ActiveX 元件無法產生物件

VBScript 5.5 版本無法為您執行個體化物件，因為其物件的類別並未登錄到系統登錄檔中，或是其中之一或多個相關的動態連結程式庫(DLLs)無法取得。另外，物件所需的 DLL 可能由於找不到或是已損壞而無法使用。

修正這個錯誤

  • 請確定所有相關的動態連結程式庫都可以使用。 例如，資料存取物件 (DAO) 需要在不同平台下所需之支援的動態連結程式庫。對於這種物件您可能必須在回到安裝程式。
  • Internet Explorer 可能會嘗試為您建立物件，但是您在Internet Explorer沒有正確的安全權限設定。重設Internet Explorer 的安全設定然後再試一次。

請參閱

將VBScript 用於物件


引數不為選擇性

Visual Basic Scripting Edition

發生例外情況

您的 Script 呼叫一個COM 物件，並由其輪流丟回一個例外事件。

修正這個錯誤

  • 除非這個呼叫是由Raise 方法所產生的，否則請聯絡產生此錯誤的COM 物件開發者。
  • 聯絡 Microsoft 產品支援服務部（Microsoft Product Support Services）來回報這個錯誤訊息發生時的情形。

請參閱

Raise 方法 | Err


引數不為選擇性

您呼叫一個程序，但是使用了錯誤的參數數量。傳入程序的引數數量必須要符合其程序定義時的參數數量。

修正這個錯誤

  • 檢查函數簽名（signature）以確定您已提供了所有必須的引數。

請參閱

VBScript 程序


此陣列的長度是固定的或暫時被鎖住

您嘗試使用ReDim 改變已固定大小的陣列的元素數目。動態宣告的陣列或是 Variant 變數中的陣列可以暫時被鎖定。

修正這個錯誤

  • 如果陣列是在程序中宣告的，使用ReDim 將它從靜態轉變為動態。
  • 如果陣列是於模組層級中宣告，請宣告此陣列，但不要指定元素的數目。

請參閱

Array 函數 | Dim 陳述式 | ReDim 陳述式 | Set 陳述式 | Private 陳述式 | Public 陳述式


在物件類別中不能有多個預設 (Default) 屬性或方法

您在類別定義裡標示了一個以上的屬性或物件為預設。一個類別中只能有一個預設屬性或是預設方法。

修正這個錯誤

  • 請確認這個類別中只有一個預設屬性和一個預設方法。

請參閱

Function 陳述式


呼叫 Sub 程序時，不能使用括弧

Visual Basic Scripting Edition

呼叫Sub程序時，不能使用括弧

您在呼叫子程序時未使用Call陳述式，卻用了括弧 ()。當呼叫一個子程序而未使用Call 陳述式時，不要使用括弧。

修正這個錯誤

  • 從子程序呼叫中移除括弧。
  • 對子程序改用 Call 陳述式。

請參閱

Call 陳述式 | Sub 陳述式


無法執行所要求的動作

您的Script 不能繼續執行，因為主機把script 引擎停住。主機並未明確地傳回錯誤程式碼。

修正這個錯誤

  • 錯誤的解決方法依各個主機而定。


該物件類別不支援 Automation

Visual Basic Scripting Edition

該物件類別不支援Automation

您嘗試要存取一個不支援 Automation 的物件屬性或是方法。您可以建立並傳回一個指標給不支援 Automation的物件，但是您不能存取它的屬性和方法。

修正這個錯誤

  • 請檢視建立其物件的應用程式參考文件，以了解此類別使用 Automation的限制。
備註 物件可能已經用 CreateObject 建立了，但它也可能已經由主機物件模型（host object model）引進。

請參閱

CreateObject 函數


物件類別的初始與終結沒有引數

您的Script 有一個用Class_Initialize事件或是Class_Terminate事件定義的類別。您為上述程序的任何一個指定了一個或多個參數。千萬不要指定參數於上述程序中。

修正這個錯誤

  • 從這個類別定義中移除參數。

請參閱

Initialize 事件 | Terminate 事件


尚未定義物件類別

您建立一個引用到類別 (使用 New 或 Set陳述式) ，而未事先定義類別。

修正這個錯誤

  • 請確認您在引用類別之前已經先定義它了。

請參閱

Set 陳述式


'Default' 只能用於 Property Get

Visual Basic Scripting Edition

'Default' 只能用於Property Get

您在Property Let 或 Property Set使用了Default保留字。您只能在Property Get 中指定 Default 保留字。

修正這個錯誤

  • 只使用Default保留字於Property Get 。

請參閱

Property Let 陳述式 | Property Set 陳述式 | Property Get 陳述式


使用 'Default' 時，也必需設定 'Public'

Visual Basic Scripting Edition

使用'Default'時，也必需設定'Public'

您定義一個屬性為Default ，但不是Public 。如果您定義一個屬性為Default，必須還要定義它為Public 。

修正這個錯誤

  • 定義所有Default 屬性為 Public。

請參閱

Function 陳述式


除以零

您嘗試建立一個運算式，其中用零來除某數。這樣會產生無限大 (無法使用) 的結果。

修正這個錯誤

  • 請檢查運算式的拼字或是大小寫錯誤。


載入 DLL 時發生錯誤

您的應用程式引用一個找不到的 DLL。另外，這個DLL 也有可能引用其它找不到的DLL。

修正這個錯誤

  • 請確定DLL 已存在。
  • 當要引用DLL時， 使用完整路徑名稱。
  • 取得引用的 DLL 並使它可被其他 DLL 所引用。


通用（regular）運算式中，必須要有 ']' (VBScript)

Visual Basic Scripting Edition

通用（regular）運算式中，必須要有 ']'

您嘗試為通用運算式的比對建立一個字元類別，但並不包含右括號]。個別常值字元的組合可以放置在括號中，結合為字元類別。字元類別與所含之任何字元相符。例如，/[abc]/ 符合字元 "a"， "b" 或是 "c" 其中任何一個。

修正這個錯誤

  • 將右括號加到通用運算式中。

請參閱

通用運算式(RegExp)物件


必須要有 'Case'

Visual Basic Scripting Edition

必須要有'Case'

您建立了一個 Select�End Select 結構，但是沒有包含任何 Case 陳述式。下面例子將示範Select�End Select 結構正確的用法。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

修正這個錯誤

  • 請確定 Select�End Select 結構包含了所有必要的部分。

請參閱

Select Case 陳述式


必須要有 'Class'

您建立一個 Class 程序，但是以End 關鍵字結束，而不是以End Class 陳述式作為結束。請一律以End Classt 陳述式來結束Class 程序。

修正這個錯誤

  • 以End Class陳述式結束Class 陳述式。

請參閱

Class 陳述式


必須要有 'End'

Visual Basic Scripting Edition

必須要有'End'

您建立一個結構，但是並未正確的結束它。下面的表格列出了必須以End 陳述式結束的VBScript 結構。

結構 | 結束陳述式
Sub | End Sub
Function | End Function
If | End If
Class | End Class
With | End With
Select | End Select

修正這個錯誤

  • 以相關的End Sub 陳述式結束 Sub 程序。
  • 以相關的End Function陳述式結束Function程序。
  • 以相關的 End If 陳述式結束If 程序。
  • 以相關的End Class 陳述式結束 Class程序。
  • 以相關的 End With 陳述式結束With 程序。
  • 以相關的 End Select陳述式結束 Select 程序。

請參閱

Sub 陳述式 | Function 陳述式


必須是陳述式的結尾

出現在陳述式結尾之外的文字。

修正這個錯誤

  • 請移除額外的文字。
  • 如果您想要為您的程式碼作註解，請在陳述式的結尾插入一個省略符號 "'"。

請參閱

VBScript 程式撰寫規格


必須要有 '=' (VBScript)

Visual Basic Scripting Edition

必須要有'='

您使用 Set 陳述式，但並未包含 =。

修正這個錯誤

  • 使用 Set 陳述式的全部語法。

請參閱

Set 陳述式


必須要有運算式

您建立了一個 Select�End Select 結構，但是它包含了一個Case語句，而且該語句內則含有和Case Else 陳述式一起的一或多個值。Case Else 陳述式 (case 以下) 必須出現在自己的行中。下面示範了Select�End Select 結構的正確用法。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

修正這個錯誤

  • 建立新的一行給Case Else 陳述式使用。

請參閱

Select Case 陳述式


必須要有 'Function'

Visual Basic Scripting Edition

必須要有'Function'

您建立一個 Function 程序，但是用End 關鍵字結束，而非以End Function 陳述式作為結束。 Function 程序必須包含一個用來結束的 End Function 陳述式。

修正這個錯誤

  • 以End Function 陳述式結束您的Function程序。

請參閱

Function 陳述式 | Call 陳述式 | Dim 陳述式 | Exit 陳述式 | Set 陳述式 | Sub 陳述式


必須要有識別項 (VBScript)

Visual Basic Scripting Edition

必須要有識別項

您宣告了一個變數，但是使用VBScript 保留字作為名稱。

修正這個錯誤

  • 選擇其它的變數名稱( 非VBScript 保留字)。
  • 將保留字放置於 [ ] 之中。


必須要有 'If'

Visual Basic Scripting Edition

必須要有'If'

您建立一個 If...Then...Else 區塊，但是沒有適當地結束區塊。If 陳述式區塊必須是一行中第一個陳述式，且須以End If陳述式結束。以下示範了正確的 If...Then...Else 區塊。

If condition Then
   [statements]
[ElseIf condition-n Then
   [elseifstatements]] . . .
[Else
   [elsestatements]]
End If

修正這個錯誤

  • 檢查是否您用End 陳述式結束您的If 陳述式區塊。如果是，將它改成 End If 陳述式。

請參閱

If...Then...Else 陳述式


必須要有 'In'

您建立一個 For Each...Next 區塊，但是未包括 In 關鍵字於第一行。If 陳述式區塊必須是一行中第一個陳述式，且須以 End If 陳述式結束。下面示範了 For Each...Next 區塊的正確結構。

For Each element In group
   [statements]
   [Exit For]
   [statements]
Next [element]

修正這個錯誤

  • 確定這個 For Each...Next 區塊包含所有必要的部分。

請參閱

For Each...Next 陳述式 | Do...loop 陳述式 | Exit 陳述式 | For...Next 陳述式 | While...Wend 陳述式


通用（regular）運算式中，必須要有 ')'

您嘗試建立一個通用運算式之子運算式，但是並未包含右括弧 ")"。括弧在通用運算中有幾個目的。主要地，它們把個別項目結合成單一的子運算式，這樣那些事物便能被 *， +， ? 等等視為單一元件。

修正這個錯誤

  • 加入右括弧 ")" 到您的通用運算式子運算式中。

請參閱

通用運算式(RegExp)物件


必須要有整數常數

您想要在Dim 陳述式中使用一非常數來建立一個陣列。在 VBScript 中，Dim 陳述式大小的值必須為一常數。例如，

Dim a(10)   ' 為合法。
Dim a(x)    ' 為非法。
Dim a(1=2)  '為非法。

修正這個錯誤

  • 使用 ReDim陳述式。

請參閱

Dim 陳述式 | ReDim 陳述式


必須要有 '('

當您宣告一個程序時，您並未包含左括弧 "("。

Sub mysample x // x 應該包含於括弧中。
End Sub

或是使用 redim 陳述式。

Redim x // x應該包含於括弧中。

修正這個錯誤

  • 加入左括弧 "("。

請參閱

運算式優先順序


在屬性宣告中必須要有 Let、Set 或 Get

Visual Basic Scripting Edition

在屬性宣告中必須要有Let、Set 或 Get

您建立了一個 Property Let，Property Set或是 Property Get 陳述式，但是並沒有包含關鍵字Let， Set或是 Get。 Property陳述式必須跟著Let， Set或是 Get。

修正這個錯誤

  • 請確認 Property陳述式跟著Let， Set或是 Get。

請參閱

Property Let 陳述式 | Property Set 陳述式 | Property Get 陳述式


必須要有字母（literal）常數

您宣告了一個常數，但指定它為變數運算式(可被改變的值)。常數不能包含執行階段的程式碼

修正這個錯誤

  • 宣告常數時，不要使用運算式。

請參閱

VBScript 常數 | VBScript 常數 | Const 陳述式


必須要有 'Loop'

您建立一個 Do 迴圈結構，但是結束迴圈的動作不正確。Do 迴圈結構是以相關的Loop 陳述式來終結。以下示範了正確的 Do 迴圈結構。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或者，您可以使用這個寫法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

修正這個錯誤

  • 請確定 Do 迴圈結構包含了所有必要的部分。

請參閱

Do...loop 陳述式 | Exit 陳述式 | For...Next 陳述式 | While...Wend 陳述式


必須要有 'Next'

您建立一個 For...Next 迴圈結構，但是結束迴圈的動作不正確。For...Next 迴圈結構必須以Next 陳述式作結尾。以下示範了正確的 For...Next 迴圈結構。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

修正這個錯誤

  • 請確認 For...Next 迴圈結構包含了所有必要的部分。

請參閱

For...Next 陳述式 | Do...loop 陳述式 | Exit 陳述式 | For Each...Next 陳述式 | While...Wend 陳述式


必須要有 'Property'

Visual Basic Scripting Edition

必須要有'Property'

您建立一個Property 程序 (Property Let， Property Set 或是 Property Get)，但是沒有以End Property 陳述式結束程序。Property 程序必須以End Property 陳述式結束。

修正這個錯誤

  • 請確定 Property 程序以End Property 陳述式結束。

請參閱

Property Let 陳述式 | Property Set 陳述式 | Property Get 陳述式


必須要有 ')' (VBScript)

Visual Basic Scripting Edition

必須要有 ')'

您試著把運算式括在一組括弧裡，但是並不包括右括弧 )。有些運算式必須位於一組左括弧和右括弧之中。

修正這個錯誤

  • 把右括弧 ")" 加到您的求值運算式中。

請參閱

運算子優先順序


必須要有 'Select'

您建立一個 Select...End Selec 結構，但是並未包含作結束用的 End Select 陳述式。以下示範了Select�End Select 的正確結構。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] ?
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

修正這個錯誤

  • 請確認 Select...End Select 結構包含了所有必要的部分。

請參閱

Select Case 陳述式 | If...Then...Else 陳述式


必須要有陳述式

您當成引數傳到Execute 陳述式的字串，無法剖析為一個陳述式。 Execute 陳述式可以用來動態執行 VBScript 程式碼。例如，參考下列的VBScript 程式碼。

Execute "msgbox 1"  '可以執行， 因為msgbox 為一陳述式。
Execute "5*4"       '不可執行， 因為5*4 無法產生陳述式。

Expected statement 錯誤也會發生在編譯任何需要陳述式的 script 程式碼期間，不只是 Execute 和Eval 才會產生這種錯誤。例如，下面的程式碼會在 Internet Explorer 產生此錯誤。

<html>
<script language=vbscript>
    5*4
</script>
</html>

請注意VBScript中有兩個截然不同且毫不相關的Execute 陳述式，

  • 可以馬上編譯和執行的Execute 陳述式，
  • 通用運算式的 Execute 方法。

修正這個錯誤

  • 請確認傳入Execute 陳述式的字串是陳述式。
  • 如果您想要評估的字串是一個運算式， 請使用Eval。

請參閱

Execute 陳述式 | Eval


必須要有 'Sub'

Visual Basic Scripting Edition

必須要有'Sub'

您建立一個Sub 程序，但卻使用了 End 關鍵字取代了End Sub 陳述式。Sub 程序必須包含一個用作結束的End Sub陳述式。

修正這個錯誤

  • 使用End Sub 陳述式來結束您的Sub程序。

請參閱

Sub 陳述式 | Call 陳述式 | Dim 陳述式 | Exit 陳述式 | Function 陳述式


必須要有 'Then'

您建立一個 If...Then...Else 結構，但是第一行未包含 Then 關鍵字。以下示範了 If...Then...Else 的正確結構。

If condition Then statements [Else elsestatements ]

或是，您可以使用區塊形式語法：

If condition Then
   [statements]
[ElseIf condition-n Then
   [elseifstatements]] . . .
[Else
   [elsestatements]]
End If

修正這個錯誤

  • 請確認 If...Then...Else 結構包含了所有必要的部分。

請參閱

If...Then...Else 陳述式 | Select Case 陳述式 | 使用條件陳述式


必須要有 'To'

您建立一個 For...Next 迴圈，但是第一行未包括 To 關鍵字。For...Next 迴圈的第一行必須包含 To 關鍵字。以下示範正確的 For...Next 迴圈結構。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

修正這個錯誤

  • 請確認 For...Next 迴圈包含了所有必要的部分。

請參閱

For...Next 陳述式 | For Each...Next 陳述式 | Do...loop 陳述式 | Exit 陳述式 | For...Next 陳述式 | While...Wend 陳述式


必須要有 'Wend'

您建立一個 While...Wend 迴圈，但是結束迴圈的動作不正確。一個 While...Wend 迴圈必須用相關的 Wend 陳述式來結束，以下示範了 While...Wend 迴圈的正確結構。

While condition
   Version [statements]
Wend

修正這個錯誤

  • 請確認 While...Wend 迴圈包含了所有必要的部分。

請參閱

程式碼的迴圈 | While...Wend 陳述式 | Do...loop 陳述式 | For...Next 陳述式 | For Each...Next 陳述式 | Exit 陳述式


必須要有 'While' 或 'Until'

Visual Basic Scripting Edition

必須要有'While' 或 'Until'

您建立了 Do 迴圈，但是沒有包括相關的 While 或是 Until 關鍵字。Do迴圈的測試條件需要內含 While 或是 Until 關鍵字的測試條件陳述式。以下示範 Do 迴圈正確的結構。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或是， 您可使用這種結構：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

修正這個錯誤

  • 請確定Do 迴圈包含所有必要的部分。

請參閱

程式碼的迴圈 | Do...loop 陳述式 | For...Next 陳述式 | For...Next 陳述式 | While...End 陳述式 | Exit 陳述式


必須要有 'While,' 'Until,' 或為陳述式的結尾

您建立了 Do 迴圈，但是沒有包括相關的 While 或是 Until 關鍵字。Do 迴圈的測試條件需要內含一個 While 或是 Until 關鍵字的測試條件陳述式。以下示範 Do 迴圈正確的結構。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或是，您可使用這種結構：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

修正這個錯誤

  • 請確定Do 迴圈包含所有必要的部分。
  • 使用While 或是 Until 關鍵字來結束Do 迴圈。

請參閱

程式碼的迴圈 | Do...loop 陳述式 | For...Next 陳述式 | For...Next 陳述式 | While...Wend 陳述式 | Exit 陳述式


必須要有 'With'

您建立一個 B>With 區塊，但是並非以End With 陳述式結束，而是以 End 關鍵字來結束它。With 區塊必須以相關的 End With 陳述式來結束。以下示範了 With 區塊正確的組成成分。

With object
   statements
End With

修正這個錯誤

  • 如果您使用End 關鍵字來結束 With 區塊，請把它改成 End With 陳述式。
  • 確定With 控制結構包含了所有必要的部分。

請參閱

使用條件陳述式 | With 陳述式 | Set 陳述式 | If...Then...Else 陳述式 | Select Case 陳述式


在 Automation 的運作過程中找不到檔案名稱或物件類別

您使用 GetObject 函數，但是提供了無法辨識的類別或是檔案名稱當作參數。GetObject 函數需要完整的路徑名稱或是已登錄到系統的類別名稱，以進入檔案擷取所要的物件，

修正這個錯誤

  • 檢查名稱的拼字錯誤，然後再試一次。
  • 確定類別參數使用的名稱符合登錄在系統中的名稱。

請參閱

GetObject 函數 | CreateObject 函數


沒有設定 For 迴圈的初始值

您的 script 執行緒跳到 For...Next 迴圈中。這樣會有錯誤發生，因為 For...Next 迴圈計數器必須要重新開始。 以下示範 For...Next 迴圈的正確結構。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

修正這個錯誤

  • 移除跳到 For...Next 迴圈的動作。
  • 確定 For...Next 迴圈包含所有必要的部分。

請參閱

程式碼的迴圈 | For...Next 陳述式 | Do...loop 陳述式 | Exit 陳述式 | For Each...Next 陳述式 | While...end 陳述式


識別項太長

您建立一個變數或是函數名稱，其中包含太多字元。字元的限制是255個。

修正這個錯誤

  • 選擇一個較短的名稱。

請參閱

VBScript 變數 | VBScript 資料型態 | Dim 陳述式 | Public 陳述式 | Private 陳述式


指定不合法 (VBScript)

Visual Basic Scripting Edition

指定不合法

您嘗試在一個指定運算式的左邊使用唯讀的識別項。不能指定數值為一個唯讀的識別項。

修正這個錯誤

  • 只在指定運算式右邊才使用唯讀識別項。

請參閱

指定運算子(=) | 比較運算子 |運算子優先順序 | 運算子摘要 | Set 陳述式


內部錯誤

發生一個內部錯誤。

修正這個錯誤

  • 除非這個呼叫是由Raise 方法產生，否則請聯絡 Microsoft 產品支援服務部（Microsoft Product Support Services）來回報這個錯誤訊息發生時的情形。

請參閱

Raise 方法


不正確的字元 (VBScript)

Visual Basic Scripting Edition

不正確的字元

您嘗試在一個運算式中使用雙字元集 (DBCS) 或是其他不支援的字元。

修正這個錯誤

  • 把不支援的字元包含到括號 [] 中。


'exit' 陳述式不正確

您在下列程式控制結構的其中一項裡使用 Exit 陳述式：

  • With 陳述式。
  • If...Then...Else陳述式。
  • Select Case陳述式。

您只可以合法地使用 Exit 陳述式來離開這些結構：

  • Do...While 迴圈 (Exit Do)。
  • For...Next 迴圈 (Exit For)。
  • For Each...Next 迴圈 (Exit For)。
  • Function 程序 (Exit Function)。
  • Sub程序 (Exit Sub)。

修正這個錯誤

  • 您可能用錯了 Exit If、Exit With 或是 Exit Select。
  • 在 If、With或是 Select 陳述式中不要使用 Exit。

請參閱

Exit 陳述式 | Do...loop 陳述式 | For Each...Next 陳述式 | For...Next 陳述式 | Function 陳述式 | Sub 陳述式


'for' 迴圈控制變數不正確

您建立一個 For...Next 迴圈，含有和內部迴圈同樣的控制變數。另外，您可能已用一個不合法的控制變數建立了For...Next 迴圈。以下示範 For...Next 迴圈的正確結構。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

修正這個錯誤

  • 重新以最外層迴圈範圍內的唯一名稱命名 For...Next 迴圈中的控制變數。

請參閱

程式碼的迴圈 | For...Next 陳述式 | Do...loop 陳述式 | Exit 陳述式 | For Each...Next 陳述式 | While...Wend 陳述式


不正確的數字

您運算式中的數值太大，或是超出範圍。

修正這個錯誤

  • 使用較小的數值。

請參閱

VBScript 資料型態 | VarType 函數


不正確或不合格的引用

您嘗試在物件之外的東西使用With陳述式。With 陳述式只能使用在非null 的物件值。以下示範With 區塊的正確結構。

With object
   statements
End With

修正這個錯誤

  • 為With陳述式指定一個物件。

請參閱

With 陳述式


不正確的圖片

您嘗試載入的圖形檔是不可辨識的格式。合法的格式包含了點陣圖(*.bmp)， 圖示 (*.ico)和 Windows 中繼檔(*.wmf)。

修正這個錯誤

  • 確定您要載入的圖形檔是合法的圖形格式。

請參閱

LoadPicture 函數


不正確的字元集範圍 (VBScript)

Visual Basic Scripting Edition

不正確的字元集範圍

您嘗試用無效字元來建立通用運算式。通用運算式是由字母數字和中繼字元所組成。

修正這個錯誤

  • 只使用正確的通用運算式字元來撰寫通用運算式。

請參閱

通用運算式(RegExp) 物件


'Me' 關鍵字的用法不正確

您嘗試使用Set 來指定數值到Me 識別項。Me 是保留識別項，而且不可以被設定。

修正這個錯誤

  • 重新用Me 之外的名稱命名變數。


Null 的使用不正確

您嘗試取得值為 Null 的 Variant 變數。您只能取得內含有效值的 Variant 變數。 Null 是 Variant 的子型態，用來表示一個資料項目中不含有有效資料。

修正這個錯誤

  • 確定變數值正確。

請參閱

IsNull 函數


有 'loop'，但沒有 'do'

Visual Basic Scripting Edition

有'loop'，但沒有'do'

您建立一個 Do 迴圈，但是建立的方式不正確。Do 迴圈以一個相關的Do 陳述式開始。以下示範Do 迴圈的正確結構。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或是，您可以使用這個語法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

修正這個錯誤

  • 您可能已嘗試在未移除Loop 陳述式的情況下，刪除一個Do 控制結構。
  • 確定 Do 迴圈包含所有必要的部分。

請參閱

Do...Loop陳述式 | Exit 陳述式 | For...Next陳述式 | While...Wend陳述式


必須定義於物件類別中

您建立一個Property 程序 (Property Let， Property Set或是 Property Get)，但是在Class 定義外定義它。您只能在類別內建立Property 程序。

修正這個錯誤

  • 確定所有 Property Let，Property Set和 Property Get 都是在Class 定義中定義的。

請參閱

Property Let 陳述式 | Property Set 陳述式 | Property Get 陳述式


必須是此行的第一個陳述式

您的多項陳述式程式碼含有一個 If...Then...Else 陳述式，但是 If...Then...Else 陳述式並不是這一行的第一個陳述式。 If...Then...Else陳述式必須在這一行的開頭。

修正這個錯誤

  • 把If 或是 Else 陳述式移到新的一行。

請參閱

If...Then...Else 陳述式


找不到指名引數（Named Argument）

您呼叫一個程序，指定一特定引數，但是此程序並無法接受引數名稱的定義。除非一個引數出現在程序定義中，否則引數名稱不能使用在程序呼叫中。

修正這個錯誤

  • 檢查這個引數名稱的拼字是否正確，並重新呼叫程序。

請參閱

VBScript 程式撰寫規格


名稱重複定義

您宣告一個識別項的名稱，而您已經在Script的某處用過這個名稱。

修正這個錯誤

  • 重新命名識別項，使其名稱在您的script 全域中是唯一名稱。


引數的個數必須在各個屬性規格中一致

您所指定的引數數目太少。當使用Property Let 或是 Property Set，參數的數目必須比對應的Property Get 所傳回的數目大1。

修正這個錯誤

  • 確定 Property Let 和 Property Set 的引數至少比Property Get傳回的引數多一個。

請參閱

Property Let 陳述式 | Property Set 陳述式 | Property Get 陳述式


物件不支援目前的地區設定

您嘗試存取一個不支援目前地區設定的物件。地區設定是一組有關於指定語言和國家/地區的資訊。地區設定會影響預設程式的專有名詞和地區設定的語言。地區設定的資訊有兩點很重要：

  • 程式碼地區影響了語言的專有名詞像是關鍵字，和定義特定地區的設定，像是十進位和清單分隔字元，日期格式，和字元分類的順序。
  • 系統地區影響地區功能的行為。例如，當您顯示數字或把字串轉換成日期，就會使用作業系統所提供的控制台工具來設定地區。

修正這個錯誤

  • 檢查物件支援哪個地區設定。

請參閱

CDate 函數


物件不支援此動作

您嘗試要引用物件不支援的方法或屬性。並非所有的物件都支援這項作業。

修正這個錯誤

  • 請檢查屬性和方法以確認沒有拼字方面的錯誤。
  • 請參閱這個物件的文件以得到更多相關資訊。

請參閱

將VBScript 用於物件 | CreateObject 函數 | GetObject 函數


物件不支援此屬性或方法

您指定一個並非為automation 物件存在的屬性或方法。並非所有物件支援所有屬性和方法。

修正這個錯誤

  • 檢查屬性和方法以確保沒有拼字錯誤。
  • 請參閱這個物件的文件以得到更多相關資訊。


此物件並非集合物件

您嘗試執行對非Collection物件執行只能用在Collection 物件的動作。某些屬性，方法和執行只能應用在Collection 物件。Collection 物件是一個包含一組相關方法的物件。當集合物件有變動發生時，集合物件中的物件位置也會改變; 所以，Collection 物件中任何一個物件的位置都可能會改變。

修正這個錯誤

  • 檢查物件或屬性名稱的拼字是否正確。
  • 確認物件是否為Collection 物件。
  • 查看用來加入物件到集合物件的Add 方法， 確定語法和識別項的拼字正確。


物件無法安全地建立

您嘗試使用一個未標示成可安全建立的物件，主機（host）可以決定物件集是否能安全建立。 一般而言，允許危險指令碼作有害動作(像是存取硬碟) 的物件就是不安全的物件。

例如，在客戶端上使用Microsoft Internet Explorer來執行FileScriptingObject並不安全， 但是您可在本機上透過Windows Script host來使用這個物件。

修正這個錯誤

  • 請確定您使用的物件安全。
  • 聯絡物件的開發者， 以了解是否有安全的版本。
  • 您可以閱讀物件的文件以了解物件是否安全。


物件無法安全地初始化

您嘗試使用一個未標示成可安全起始的物件。主機（host）可以決定物件集是否能安全起始。一般而言，允許危險指令碼作有害動作(像是存取硬碟) 的物件就是不安全的物件。

例如，在客戶端上使用Microsoft Internet Explorer來執行FileScriptingObject並不安全， 但是您可在本機上透過Windows Script host來使用這個物件。

修正這個錯誤

  • 請確定您使用的物件安全。
  • 聯絡物件的開發者， 以了解是否有安全的版本。
  • 您可以閱讀物件的文件以了解物件是否安全。

請參閱

Initialize 事件


物件無法安全地於 Script 中使用

您嘗試使用一個未標示成可安全使用在撰寫 Script 的物件。主機 (host) 可以決定物件集是否能安全使用於Script。一般而言，允許危險指令碼作有害動作 (像是存取硬碟) 的物件就是不安全的物件。

例如，在客戶端上使用 Microsoft Internet Explorer 來執行 FileScriptingObject 並不安全， 但是您可在本機上透過 Windows Script host 來使用這個物件。

修正這個錯誤

  • 請確定您使用的物件安全。
  • 聯絡物件的開發者， 以了解是否有安全的版本。
  • 您可以閱讀物件的文件以了解物件是否安全。


此處需要物件

您所提供的物件並不正確( 或不被認定為一個物件)。引用屬性及方法通常需要一個明確的物件限定詞。

修正這個錯誤

  • 提供一個物件限定詞。
  • 檢查物件限定詞的拼字是否正確。


沒有設定物件變數或 With 區塊變數

您嘗試在沒有有效物件的情況下使用一個物件屬性。如果您遺漏了 Set 陳述式，引用物件時會有錯誤產生。

修正這個錯誤

  • 為這個物件變數指定一個引用。

請參閱

Property Set 陳述式


記憶體不足

您在電腦上配置所有可用的記憶體。這樣可能會造成動態配置的陣列變得很巨大，或是執行很大數量的物件。

修正這個錯誤

  • 使用Erase 陳述式重新配置動態陣列的儲存空間。
  • 使用 ReDim 陳述式重新配置儲存空間。
  • 結束任何不需要的應用程式，文件或是已開啟的來源檔案。

請參閱

Erase 陳述式 | Dim 陳述式 | Nothing | ReDim 陳述式 | CreateObject 函數


堆疊空間不足

您有太多深層巢狀程序。每回您的程式碼跳到一個程序時，它的區域變數會被推到堆疊。堆疊是一個記憶體工作區域，會依您的Script 執行自動地變大或縮小。

修正這個錯誤

  • 檢查程序沒有太深層巢狀化。
  • 確定遞迴(下內凹) 的程序沒有經常呼叫它們本身。
  • 確定遞迴程序正常地結束。


字串空間不足

您嘗試建立一個字串物件，但是因為系統記憶體已經用完而不能夠執行。這樣可能會造成動態配置的陣列變得很巨大，或是執行很大數量的物件。

修正這個錯誤

  • 使用Erase 陳述式重新配置動態陣列的儲存空間。
  • 使用 ReDim 陳述式重新配置儲存空間。
  • 結束任何不需要的應用程式，文件或是已開啟的來源檔案。

請參閱

Erase 陳述式 | Dim 陳述式 | Nothing | ReDim 陳述式 | CreateObject 函數


溢位

您想要指定給一個變數的值太大。當下面任一情形發生時，會產生這項錯誤：

  • 指定、計算或是轉換資料型態的結果大於此型態變數值所能表現的範圍。
  • 指定到屬性的值已超過其屬性可接受的最大值。
  • 您想要在一個計算中使用一個數字，並且此數字強制轉換為一個整數，但運算結果卻大於這個整數。

修正這個錯誤

  • 指定一個數值給可包含較大的數值範圍的變數類別。
  • 確認您所指定的數值在屬性的範圍之中。

請參閱

VBScript 變數 | Err


程序呼叫或引數不正確

您傳入程序的其中一個引數超過了可接受的數值範圍。或者您可能嘗試呼叫一個在目前平台上無效的程序。

修正這個錯誤

  • 請檢查程序中引數值的範圍。
  • 請檢查特定平台中有關此程序的資訊。

請參閱

VBScript 變數 | Function 陳述式 | Sub 陳述式 | Call 陳述式


Property Set 或 Property Let 至少要有一個引數

您為一個類別指定一個沒有引數的屬性存取子到控制Let 的代碼Set。

修正這個錯誤

  • 加入一個引數到屬性存取子。

請參閱

Property Let 陳述式 | Property Set 陳述式 | Property Get 陳述式 | Class 陳述式


Sub 或 function 未定義

您嘗試呼叫一個不存在的程序。

修正這個錯誤

  • 檢查程序的拼字並且確定它已正確地輸入。

請參閱

Sub 陳述式 | Function 陳述式


陣列索引超出範圍

您嘗試存取少於您預期大小的陣列。 例如，您嘗試存取陣列的第十一個元素，但事實上陣列的維度只有十個元素。

修正這個錯誤

  • 請確認您的程式碼含有檢查邊界的程式碼，以確認超過陣列大小的元素不被引用。
  • 重設陣列的維度大小以符合您的需要。

請參閱

UBound 函數 | LBound 函數 | Dim 陳述式 | ReDim 陳述式


語法錯誤 (VBScript)

Visual Basic Scripting Edition

語法錯誤

您建立的陳述式違反了一項或多項 VBScript 的文法規則。

修正這個錯誤

  • 再一次檢查組成運算式元素的個數。
  • 查看方向錯誤的括號。

請參閱

VBScript 資料型態 | VBScript 變數 | VBScript 常數 | VBScript 運算子 | 使用條件陳述式 | 程式碼的迴圈 | VBScript 程序 | VBScript 程式撰寫規格


在通用運算式（Regular Expression）中有語法錯誤 (VBScript)

Visual Basic Scripting Edition

在通用運算式（Regular Expression）中有語法錯誤

您的搜尋字串結構違反了 VBScript 通用運算式中的一個或多個文法規則。

修正這個錯誤

  • 請確保您的通用運算式搜尋字串符合 Perl 通用運算式語法。

請參閱

通用運算式 (RegExp) 物件


型態不符合

您嘗試比較不同資料型態的數值。例如，比較字串和數值。

修正這個錯誤

  • 當執行比較時，請確認資料型態相符。
  • 轉換其中一個資料值到另一個值的資料型態時，再試著比較一次。

請參閱

VBScript 變數


不應有 'Next'

您建立一個 For...Next 或是 For Each...Next 結構，但是未包含 For 陳述式。例如，您已嘗試移除 For...Next結構，但並未移除Next 陳述式。以下示範 For...Next 結構的正確使用方式。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

修正這個錯誤

  • 加入 For 陳述式 (loop 控制陳述式)。
  • 移除多餘的 Next 陳述式。

請參閱

For...Next 陳述式 | For Each...Next 陳述式 | 程式碼的迴圈 | Exit 陳述式


未預期的次數符號 (VBScript)

Visual Basic Scripting Edition

未預期的次數符號

當您製作通用運算式的搜尋模式時，並沒有明確地指定比對字串。

修正這個錯誤

  • 確認您已明確地建立搜尋模式。

請參閱

通用運算式(RegExp) 物件


無法判定字串常數的結尾 (VBScript)

Visual Basic Scripting Edition

無法判定字串常數的結尾

您未以右引號結束字串常數。字串常數必須括在一對引號中。

修正這個錯誤

  • 將右引號加到字串結尾。

請參閱

VBScript 常數


沒有定義變數

您在Script 的開頭使用Option Explicit 陳述式，但是之後嘗試使用一個還未宣告的變數名稱。 當您使用Option Explicit 陳述式，您必須明確地使用Dim， Private， Public或是 ReDim陳述式宣告所有變數。

修正這個錯誤

  • 當使用Option Explicit陳述式時，確定您使用Dim， Private， Public或是 ReDim陳述式宣告所有變數。

請參閱

Option Explicit 陳述式 | VBScript 變數


此變數使用了 VBScript 不支援的 Automation 型態

您嘗試使用一個VBScript不支援的資料型態（來自一個型態或是物件程式庫）。您不可以在所有的程式語言中使用所有出現在型態或是物件程式庫的變數。

修正這個錯誤

  • 只使用VBScript 認識的變數型態。

請參閱

VBScript 變數 | VarType 常數


引數的個數錯誤或指定了不正確的屬性

您呼叫一個程序，但是使用了錯誤的程序名稱或是或是錯誤的引數型態 (對此程序而言是數目錯誤的引數)。

傳入到程序的參數數目必須符合此程序定義時的參數數量。

修正這個錯誤

  • 檢查您所傳入此程序的引數清單是否符合此程序宣告或定義時的參數數量。

請參閱

Function 陳述式 | Sub 陳述式 | Call 陳述式


指定運算子

= 運算子


程序呼叫或引數不正確

您傳入一個非法參數到程序呼叫中。 這有可能是因為參數超出範圍或是含有不正確的資料。另外，您可能已經在不適當的時機呼叫了一個程序。

修正這個錯誤

  • 確認傳入程序的參數是否合法。
  • 確認您在適當的時間呼叫這個函數。


遠端伺服器不存在或無法使用

您使用函數CreateObject 在遠端機器上建立一個物件，但是這個呼叫失敗。這有可能是無法到達遠端伺服器或是遠端伺服器並不含指定的類別。

修正這個錯誤

  • 確認遠端伺服器名稱是正確的。
  • 確認遠端伺服器已啟動DCOM。
  • 使用應用程式dcomcnfg， 確認安全性許可（security permission）允許物件建立。


未知的執行階段錯誤

某個無法辨識的錯誤發生。

修正這個錯誤

  • 沒有方法可讓您修正此錯誤。


Copyright

Microsoft® Windows Script Components®

本文件的資訊，包括URL及其他網際網路的相關引用，若有變更，恕不另行通知。除非另有註明，否則本文件所提及之公司名稱、組織、產品、人名和事件皆屬虛構，並非特定意指任何真實的公司、組織、產品、人物或事件。遵守所有應適用之著作權法規定為軟體使用者之責任。由於版權所有的限制，未經 Microsoft Corporation 書面許可，貴用戶不得為任何目的而使用任何形式或方式 (電子式、機械式、影印、錄製或其他) 複製、儲存或引進至檢索系統，或傳送本文件的任何部份。

對於本文件所涵蓋之主要內容，Microsoft 可能擁有專利權、專利優先權、商標權、著作權或其他智慧財產權。除非另由 Microsoft Corporatrion 提供書面授權，否則本文件之提供並非即授予貴用戶上述之專利權、商標權、著作權或其他智慧財產。

© 1991-2000 微軟公司。所有權利保留。

Microsoft、 MS、 MS-DOS、 ActiveX、 JScript、 Microsoft Press、 MSDN、Visual Basic、Windows、Windows NT、Win32、和Win32s 係於美國及/或其他國家之商標或註冊商標。

本文所提及之產品及公司的真正名稱可能為各該所有者之商標。


簡單的確認

請輸入 1 到 10 中的任一值：


第一個簡單的網頁


物件範例

Object Sample

此頁需要安裝 Label 控制項。