【windows 脚本系列】4. VBScript介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. VBScript介绍
本章将提供一个对于VBScript(Microsoft Visual Basic的描述语言版本)的简短介绍给那些从来没有用过这种语言或是想要知道VBScript中特定语言结构(例如程序中的条件式If叙述)的使用者。
提示
Microsoft提供了〈VBScript程序语言参考〉和〈VBScript用户指南〉这两个有关VBScript详细信息的文件。
随书光盘将他们放在\Docs\VBSDOC55文件夹中,但建议您可以从Microsoft的网站(h ttp:///taiwan/products/develop/scripting/default.htm)下载最新版的文件。
基本功能
本节将介绍VBScript的基本功能。
在本章的后半段,还会介绍更进阶的功能(包括一些第5版指令引擎所提供的功能)。
叙述、连续的行、与批注
VBScript是VBA(Microsoft Visual Basic for Application)的子集合,而VBA又是由Microsoft Office和Visual Basic所提供的。
Microsoft从VBA用了好几个语言结构来定义VBScript的语法。
如果你有过Visual Basic或Office程序设计的经验,那么VBScript程序设计对您而言应该不困难。
叙述(Statements)
您必须使用VBScript定义的语法规则来输入叙述。
下列这几行是有效的VBScript叙述:
Value1 = 10
Value1 = Value1 + 10
If Value1 > 100 Then Value1 = 100
Tax = 0.1 : Price = Net * Tax
您可以在单行中输入多个叙述,只要使用冒号(:)将他们分隔开来即可,例如上面程序代码中的最后一行所示。
无论如何,您应该谨慎地使用这种语法以增加您程序的可读性。
说明
VBScript的叙述和关键词是不区分大小写的(case insen-sitive),但是在JScript中则是相反的。
连续的行(Continued Lines)
太长的叙述会让您的Script不易阅读。
下面这行用来显示讯息盒的叙述就比目前编辑窗口的宽度还长:
WScript.Echo "您在之前窗体的文本框中输入的名字
是错误的,请重新输入!"
如果一个程序包含很多行冗长的叙述,那么您将浪费时间在调整垂直滚动轴来编辑这几行。
比较好的方法是附加一个空格符和底线符号(_)在该行结束的地方,并在下一行继续此叙述。
如下所示:
WScript.Echo "您在之前窗体的文本框 " & _
"中输入的名字是错误的," & _
"请重新输入!"
当语言引擎侦测到某一行是以底线符号结尾时,他会假设有一个连续的行并将下一行视为目前叙述的一部份。
说明
这些连续行之最末行的最后面不必加上底线符号。
同时您也不能在包含底线符号的行后面加上批注。
如果您想在连续的行中使用一个很长的字符串,请将这个字符串分为数个子字符串并分别以双引号结尾。
然后您便能够加入底线符号来分开这个叙述到好几行里面。
您可以使用「&」操作数或「+」操作数来链接这些子字符串。
在前面的叙述中曾使用了这种结构。
批注(Comments)
如同第1章曾提到过,若您想要告诉VBScript不要直译某一行或者是某个叙述的一部份,那么您只要把这个叙述标示成批注即可。
在VBScript里面,您可以用单引号(')或REM叙述来标示批注。
倘若VBScript直译器在叙述中侦测到这个字符,他将会忽略该行剩下的部分。
下面这两行都是批注:
' 这一整行都是批注
Value1 = Net * Factor '在行末批注
第二行叙述的后面有一个批注。
VBScript会执行这个叙述并且忽略批注的部分。
VBScript程序结构
一个VBScript的程序可以由批注和叙述所组成。
本书中使用的Script档案采用程序4-1的结构。
程序4-1 W SHDemo.vbs
'************************************************
' 档案:WSHDemo.vbs (WSH sample in VBScript)
' 作者:(c) G. Born
'
' 使用WSH来显示简单的对话盒
'************************************************
Option Explicit
Dim Message
' 变数初始化
Message = "快点,程序执行了!"
WScript.Echo Message
'*** 程序结束
如同前面章节所提到,在您的Script中加入批注是很好的程序设计训练。
若您从其他程序设计师那里得到一个Script,而该作者又有在文件头注明程序的目的和其他信息,那么您肯定会很感激这位作者。
说明
您还可以在HTML文件中使用VBScript程序,并以M icrosoft Internet Explorer 来执行他们。
虽然I nternet Explorer 和Microsoft WSH(Windows Script Host)使用同一个语言引擎,但他们却不是使用相同的对象(或者更明确地说,是相同的对象模型)。
举例来说,I nternet Explorer 提供的事件处理在WSH环境中就不能够使用。
因此在文件头注明他的语言、版本和用来设计Script的环境将会是很有帮助的。
常数和变数
在VBScript里,您可以使用常数和变量来储存值。
接下来的几个小节将讨论如何定义常数和变量。
常数(Contants)
您肯定会在您的Script中用到常数。
您可以在VBScript叙述中直接使用他们。
下面的程序代码定义了一个常数:
result = price + 100.0
这个方程式把变量price加上100.0,然后将结果指定给result变量。
这个数值100.0就是一个常数。
这种技巧是很普遍的,而且容易阅读。
但是他有一个很大的缺点。
我们假设您的Script有好几百行,而这个数值100.0在很多行都有出现。
如果您必须把100.0改成110.0,此时会发生什么事呢?您必须在原始码中修改用到这个常数的每一行。
您可以使用编辑器的寻找/取代为... 功能,但是这样可能会花点时间而且可能会导致错误,因为数值100.0也许有不同的用途。
为了避免这个问题,您可以在VBScript程序的开头设定一个常数或标识符。
这个用来取代数字和字符串的常数是一个有意义的名字,并且其值是不会改变的。
您必须明确地宣告常数。
在下面这几行程序代码中,我们用关键词Const来宣告常数。
他的后面跟着常数的名称与其值:
Const profit = 100.0
您可以在VBScript程序的其他叙述中使用命名过的常数。
如下所示:
Price = NetPrice * Amount + profit
命名过的常数的好处是您可以改变在宣告部分的常数值,而不必修改分布在原始码中的叙述。
您也可以指定有意义的名称给一个数值,以简化程序的维护。
说明
不注意看的话,您可能会像在使用变量般的使用命名过的常数。
但常数的值是无法由程序代码更动。
因此,您只能够在指定叙述的右边使用他的名称。
您也可以将数个常数定义在同一行里:
Const VAT = 0.16, Profit = 10
不同于Visual Basic和VBA,VBScript只支持Variant数据型态。
命名过的常数在预设情况下会被宣告为public。
也就是说在Script开头宣告的常数在整个Script中都是有效的。
如果您在程序(Procedure)中宣告了一个常数,那么他的有效范围仅限于该程序里。
您可以使用public和Private关键词(将在本章后面介绍)来覆写(Overwrite)这个预设的有效范围。
提示
数值的常数通常是以10为底(十进制数)。
然而,您也可以使用十六进制的常数,藉由使用「&Hxxx」的格式(其中xxxx指的是十六进制数值)。
举例来说,「&H0C」这个值就等于十进制数的数字12。
而文字的常数则必须以双引号围起来(例如"Hello, world")。
至于时间和日期的常数则需要用井字号(#)围起来(例如#3/17/1980#)。
内建的常数
VBScript包含了数个预先定义过的常数(也就是所谓的内建常数),例如vbOKOnly。
请看下面的叙述:
MsgBox "Hello", 0 + 64, "Test"
如果您使用命名过的常数,则这个叙述会比较具有可读性。
MsgBox "Hello", vbOKOnly + vbInformation, "Test"
如此一来,您唯一必须知道的只有这些内建常数的确切名称而已。
说明
所有的内建常数都条列于〈VBScript程序语言参考〉文件中。
变数(Variables)
变量是指到程序可以储存值的内存位置的代表名称。
与常数不同的是,变量在程序执行的期间能够改变其值。
您可以直接在程序中使用变量,如下所示:
Price = 45 ' 设定价格
Discount = 17
当变量第一次出现在程序执行时,VBScript会在内存中建立此变量并给定初值。
VBScript只对变量提供Variant数据型态。
也就是说您能够在变量中储存不同的值,他可以是数字或文字。
Variant的子型态
如同刚才所提过,VBScript只支持Variant数据型态─字符串、日期、布尔(True或False)、整数、浮点数等等。
储存在Variant中的值的格式取决于这个值本身。
如果您指定一个数字给Variant,那么他就会被储存为数字格式。
同理,日期值会被储存为日期格式、文字会被储存为字符串格式等等。
储存在Variant中的值的格式称为他的子型态(Variant Subtypes)。
VBScript中大部分的运算都需要使用特定子型态的值,然后传回特定子型态的值。
举例来说,若您相加两个拥有数字数据的变量的内容,则得到的结果也会是数字。
下面这个叙述会储存数字结果于变量Sum1中:
Sum1 = Price + 15.0
使用「+」运算符,您也可以连接两个字符串:
Message = "字符串1与" + "字符串2"
但是下面这个叙述则会造成一些问题:
Result = "结果:" + Sum1
这个式子的右边包含了字符串和数字变量Sum1。
VBScript直译器无法将字符串与数字相加,因而会产生错误讯息(如图4-1所示)。
图4-1 型态不符合所导致的错误讯息
在这种情况下,您可以使用下列的叙述来转换数字子型态:
Result = "结果:" + CStr(Sum1)
VBScript的函数CStr会转换变量Sum1中的数值为字符串格式的Variant数据型态。
因此我们便能够连接字符串与数字,并将结果指定给变量result。
说明
使用「+」运算符来连接字符串并非一个好的程序设计训练(虽然我有时候也会这么做)。
「+」运算符会相加两个操作数─而当操作数都是字符串时,则做的是「连接」的动作。
连接字符串比较好的方法是使用「&」运算符(例如"Hello," & "world")。
当使用「&」运算符来合并不同数据格式的值时,VBScript会自动进行数据型态转换,而无须使用CStr。
如果您要定义常数,您也可以把数字视为字符串。
您必须使用双引号来围住这个常数。
请看下面的叙述:
Text = "15" + "30"
这个叙述不会产生45这个结果。
取而代之的是在此叙述执行之后得到一个包含"1530"内容的Text变量。
根据前面的解释,比较具有可读性的写法是:
Text = "15" & "30"
这样的叙述会使您想要表达的意思(字符串连接)更为清楚。
您可以使用转换函数来把一个子型态转换为另一种Variant子型态。
说明
与Visual Basic和VBA不同的是,VBScript并不允许您预先定义变量的子型态。
VBScritp会自动指定子型态。
但是您可以利用诸如Asc、CBool、CByte、CCur、CDate、CDbl、Chr、CInt、CLng、CSng、CStr、Hex和Oct之类的转换函数来转换数据型态。
您也可以使用VarType函数来查询子型态。
关于所有Variant子型态的列表,请参考〈VBScript 用户指南〉文件。
Option Explicit叙述
在预设的情况下,VBScript允许使用没有预先宣告过的变量,也就是变量在被建立和第一次使用时没有先以Dim、Private、Public或ReDim叙述来宣告。
但是如果您在自己的Script中允许使用没有预先宣告过的变量,那么您的程序必须担负不可预期的错误的风险。
比方说倘若您打错了某个变量的名称,VBScript直译器会以为您使用的是一个不明确的(Implicit)的宣告,并因而建立一个新的变量。
让我们假设您在程序代码中输入的是Pris而非price,如下面这个程序片段所示:
VAT = 16.0
Price = 0
Net = 115.00
Pris = Net * (1.0 + VAT/100)
MsgBox Price, vbOKOnly, "价格"
结果并不会如您所想的那样。
在指定叙述的打字错误将造成计算后的价格被储存到新的变量Pris中,而非变量price。
讯息对话盒显示的结果将是0而非133.4。
要查出笔误的变量名称,您可以在您程序的第一行使用「Option Explicit」叙述。
这个叙述会告诉直译器只允许在您的Script中使用以Dim、Private、Public或ReDim叙述明确(Explicit)宣告过的变量。
如果您忘记事先宣告您的变量,则WSH会在错误对话盒中回报每一个未经宣告过的变量。
WSH的这个功能还可以找出打字错误的变量名称。
程序4-2包含了打字失误的变量。
程序4-2 E rrorTest2.vbs
'**************************************************
' 档案: ErrorTest2.vbs (WSH sample in VBScript)
' 作者: (c) G. Born
'
' 使用未宣告过(打字失误)的变量来
' 示范「Explicit statement」叙述
'**************************************************
Option Explicit
' 宣告变量
Dim Message
Dim Title
' 变数初始化
Message = "Hello, world"
Titel = "WSH sample " ' 这个名称没有宣告过!
' 显示讯息
MsgBox Message, vbInformation + vbOKOnly, Title
'*** 程序结束
程序4-2的程序代码中包含了一个打字失误的变量Titel。
当直译器遇到这行指定字符串给变量Titel的叙述时,将会跳出错误讯息(如图4-2所示)。
图4-2 指出没有定义变量的错误讯息
注意
如果您在Script中使用「On Error Resume Next」叙述,那么没有定义的变量名称就不会再回报,即使该Script含有「Option Explicit」这个叙述。
.wsf档案中的Option Explicit
如果您使用的是.wsf档案,请确定「Option Explicit」叙述被放在每个
「<script>...</script>」元素内。
否则,就只有包含「Option Explicit」叙述的Script会检查尚未定义的变量。
范例程序(WSHDemo2.wsf)示范了这种陷阱:
<?xml version="1.0"?>
<!--
档案: WSHDemo2.wsf (for WSH 2.0)
作者: (c) G. Born
-->
<job id="T1">
<script language="VBScript">
<![CDATA[
Option Explicit
Dim name
name = "Microsoft"
WScript.Echo name
]]>
</script>
<script language="VBScript">
<![CDATA[
Text = "Hello, world"
WScript.Echo Text
]]>
</script>
</job>
第一个Script包含了「Option Explicit」叙述。
因此,变量name必须被明确地宣告。
而第二个Script元素则没有包含这个叙述。
所以执行这个Script应该会造成错误,因为变量Text还没有被宣告,但实际上当您执行这个档案时,并没有发生错误,因为「Option Explicit」叙述只有在第一个 <script> 元素中有定义。
这个动作允许您选择性地在您的.wsf 档案中使用「Option Explicit」,但如果您在随后的 <script> 元素中忽略「Option Explicit」叙述,那么您可能会身陷麻烦之中。
Dim叙述
您可以使用关键词Dim来明确地在程序、函数或Script中定义变量,或者明确地定义数组变量。
若您使用「Option Explicit」叙述,则您必须使用关键词Dim来宣告所有的变量(在Script的开头、程序或函数中),如下所示:
Dim text
Dim x
Dim Price, Vat
说明
当您宣告变量时,其值会自动被初始化。
也就是数字变量会被归零,而字符串变量会被设定成空字符串("")。
public和Private关键词
除了Dim叙述之外,VBScript还有其他两个允许您在Script层级宣告变量的关键词:public和Private。
您可以使用public来延伸以及用Private来限制Script层级变量的有效范围(scope)。
Public Test
Private Price, Vat
Private关键词限制Script中宣告过的变量的有效范围。
如果您使用public关键词,则该变量在目前档案的所有Script和程序中都是有效的。
在.vbs档案里,Private和public有和Dim叙述完全相同的效果,所以您可能会怀疑为何您总是在使用Dim叙述。
答案应该是Privat和public用于 .wsf和.htm档案里。
VBScript 原先是用来开发HTML文件(可以在HTML程序代码的 <script> 标签中包含数个Script)的。
使用关键词public,您可以宣告在目前Script外面(在同一份文件的其他Script里)还是有效的变量。
说明
public和Private关键词在程序和函数里面是不合法的并且会造成语法错误。
然而,您可以使用public和Private当作程序或函数宣告的一部份以便明确地宣告程序或函数的有效范围。
(有关程序和函数宣告的进一步信息,请参阅本章后面的(函数与程序)一节。
)
以Dim宣告数组
VBScript支持数组,您必须以下列的顺序来宣告并存取之:
Dim value(10)
value(0) = 11
程序的第一行定义了一个拥有11个元素的数组。
(数组的索引永远从0开始。
)您可以用value(0) 来存取数组的第一个元素。
而程序的第二行则是指定数值11给数组的第一个元素。
.wsf档案中变量的有效范围
先前介绍过的变量有效范围可以套用在单一.wsf档案的数个Script中。
下面的范例程序(WSHDemo3.wsf)包含一个拥有两个Script的Job:
<?xml version="1.0"?>
<!--
档案: WSHDemo3.wsf (for WSH 2.0)
作者: (c) G. Born
-->
<job id="T1">
<script language="VBScript">
<![CDATA[
Option Explicit
Dim name
name = "Microsoft"
WScript.Echo name
]]>
</script>
<script language="VBScript">
<![CDATA[
Option Explicit
Dim text
text = "Hello, "
WScript.Echo text & name
]]>
</script>
</job>
两个Script都包含「Option Explicit」叙述,但是变量name是在第一个Script中被宣告的。
这个变量的值被使用于第二个Script中。
因此,变量name在这个.wsf档案的所有
<script> 元素中都是有效的。
Dim叙述也允许您宣告多维的数组。
下面的叙述宣告了一个二维的数组:
Dim value(10, 10)
Value(0, 0) 是第0行、第0列的第一个元素。
VBScript允许最多60维度的数组。
数组的下限永远被设为0;您只能在Dim宣告中设定数组的上限。
说明
您必须使用Dim叙述搭配空的左右小括号─例如Dim value()─来宣告动态的数组。
您可以使用ReDim叙述来重新宣告动态数组的维度。
变量名称
一个变量名称最多能拥有255个字符。
您可以选择任何变量名称只要他遵循下列这些规则:
∙变量的第一个字符需为英文字母。
(Test是一个有效的名称;而123则不是。
)
∙变量名称不能包含空白、点、逗号或某些其他的特殊字符(例如!、-和+)。
∙您不能够使用诸如Sub、If、End或Dim等关键词作为变量名称。
使用Set叙述指定对象参考
Set叙述在VBScript中有特殊的意义。
要存取对象,您必须使用Set来指定一个参考指向他,如下所示:
Set objAdr = WScript.Arguments
这个叙述指定对象参考给指向WScript对象之Arguments属性的变量objAdr。
这个变量使用的是Variant数据型态,但是子型态则被设定为对象。
在指定对象变量之后,您便能够在叙述中使用参考,例如:
MsgBox objAdr.Item(0)
这个叙述会在讯息盒中显示传递给Script的第一个参数。
说明
一般说来,当您使用Set来指定对象给变量时,并不会建立该对象的副本给那个变量。
相反地,将会建立该对象的参考(Reference)。
数个对象变量可以指向同一个对象。
因为这些变量参考到(而非复制到)的是同一个对象,所以任何对于该对象的变更都会影响到所有指向他的变量。
说明
叙述中对象、方法和属性的名称是以点分隔开来(例如objAdr.Item),其中objAdr是对象的参考,而Item是属性。
(请参阅第3章有关对象程序设计的详细说明。
)
运算符
VBScript支持好几种型态的运算符(Operators):算术运算符、逻辑运算符、比较运算符和连接运算符。
算术运算符
表4-1列出了VBScript里面所有的算术运算符(Arithmetic Operators)。
表4-1 算术运算符
说明
若您使用「+」运算符来连接的其中一个操作数,其值是Null,则得到的结果也会是Null。
详细信息请参考〈VBScript程序语言参考〉文件。
逻辑运算符
VBScript支持一些用来计算表达式的逻辑运算符(Logical Operators)。
如表4-2所列。
表4-2 逻辑运算符
If a > 100 And a < 1000 Then
两种条件(a > 100和a < 1000)都会得到成立(True)或不成立(False)的逻辑值,然后再用And将这两个值做比较。
如果两个条件都成立,则If分支中的叙述就会被执行。
您可以使用运算符Not、And、Or和Xor构成逻辑表达式,同时也可以当作字节和整数数值的位运算符。
表4-3是逻辑Not运算符的真值表(Truth Table)。
表4-3 逻辑Not运算符
如您在表4-3中所看到的,逻辑True或False的相反值。
而位Not运算符使用的真值表则如表4-4所示。
表4-4 位Not运算符
位Not0会变1,反之亦然。
这类的运算在二进制或十六进制系统中是最佳的测试方法。
十进制的3可以被表示为二进制的0011(若您使用的是4位数的表示法)。
使用位Not运算符会得到1100的结果。
这个二进制数就等于十六进制的0CH或十进制的12。
而逻辑And运算符会比较两个表达式,并在两个表达式都成立的状况下传回True的结果。
表4-5为逻辑And运算符的结果做了总结。
表4-5 逻辑And运算符
位And1,如表4-6所示。
位字段输入的值会得到And字段的结果。
表4-6 位And运算符
下面的叙述使用了位And运算符:
MsgBox (3 And 7)
结果3会显示在讯息盒中。
小括号中的叙述会以位And运算符来进行运算。
(初学者请注意:十进制的3可以被表示为二进制的0011,而十进制的7则等于二进制的0111,所以And运算符的结果是0011,也就是十进制的3。
)
逻辑Or运算符会比较两个表达式,并在其中一个表达式成立时传回True的结果。
表4-7列出了可能的输入和他们以逻辑Or运算符比较后的结果。
表4-7 逻辑Or运算符
而位Or1,那么结果也会是1。
表4-8列出了位Or运算符可能的结果。
表4-8 位Or运算符
下面这个位Or
MsgBox ( 3 Or 7)
十进制的3等于二进制的0011,而十进制的7则等于二进制的0111。
因此这个Or表达式的结果是二进制的0111,也就是十进制的7。
逻辑Xor(互斥或)运算符会比较两个表达式,并在表达式不一样时传回True的结果,但是当表达式都一样时则传回False。
逻辑Xor运算符的结果显示于表4-9中。
表4-9 逻辑Xor运算符
而位Xor1的结果,如表4-10所示。
表4-10 位Xor运算符
比较运算符
您可以使用比较表达式(可包含数字、字符串等等)。
表4-11列出了VBScript中的比较运算符(Comparison Operators)。
表4-11 比较运算符
Do While a < 10
...
Loop
If a > 100 Then
...
End If
说明
当您使用比较运算符时,请牢记一点,就是VBScript只认得Variant变量。
如果两个子型态是不同的数据型态,则VBScript会自动转换数据型态。
但是这种转换的结果,不同的值可能会被直译为相等的。
运算符的优先权
VBScript解析器使用明确的运算符优先权(Precedence)来进行数个运算符的表达式的计算。
举例来说,要计算这个表达式
1 +
2 *
3 + 4
解析器首先会计算「2 * 3」,因为乘法拥有比加法更高的优先权。
这里是算术运算符的优先权顺序:指数运算、相反(Negation)、乘法与除法、整数除法、取余数、加法与
减法,最后才是连接运算(Concatenation)。
比较运算符拥有相同的优先权,并且是以由左到右的方式为计算的顺序。
针对逻辑运算符,Not运算符拥有最高的优先权,接着是And、Or、Xor、Eqv和Imp。
如果一个表达式是由不同种类的运算符所组成,那么算术运算符会先被计算,比较运算符次之,然后才是逻辑运算符。
说明
小括号可以被用来产生较高的运算符优先权;表达式任何包含小括号的部分都会先被计算。
流程控制结构
VBScript支持下列这些控制循环与条件判断式的流程控制结构(Control Structure)。
IF...Then
您可以使用「If...Then」来实作比较运算符的条件分支。
下面的叙述会重设变量a为100,若其值大于100:
If a > 100 Then a = 100
这个结果也会将变量a与100做比较:
If a > 100 Then
a = 100
b = 20
End If
如果其值大于100,那么在「If...Then」和「End If」之间的叙述就会被执行。
但若其值小于或等于100,则程序会从「End If」这行的下面继续执行。
If...Then...Else
您可以使用「If...Then...Else」叙述来建立两个分支(Branch)。
下面的结果测试了变量a:
If a > 100 Then
a = 100
b = 20
Else
a = a + 10
End If
如果其值大于100,那么在「If...Then」和「Else」之间的叙述就会被执行,否则就是执行「Else」到「End If」之间的叙述。
If...Then...ElseIf
「If...Then...ElseIf」允许数个If叙述区块的巢状结构。
下面的结果是以不同的值来测试变量a:
If a = 1 Then
b = 100
c = 20
ElseIf a = 2 Then
b = 200
c = 40
ElseIf a = 3 Then
b = 300
c = 60
End If
如果比较运算得到的结果成立,那么在比较运算和下一个「ElseIf」或「End If」关键词之间的叙述就会被执行。
Select Case
您可以使用「Select Case」关键词以好几种条件来测试变量。
根据变量的值,您可以执行其中一个程序区块。
下面的结果测试了变量a:
Select Case a
Case 1
b = 100
c = 20
Case 2
b = 200
c = 40
Case 3
b = 300
c = 60
Case Else
c = 0
a = 1
End Select
「Case」叙述包含了用来与变量测试的值。
如果条件成立,在「Case」区块中的叙述就会被执行。
如果没有「Case」条件成立,则「Case Else」(此叙述非绝对必要)区块就会被执行。
循环
循环被用来重复某个叙述区块。
VBScript中的循环使用方式如下。
Do While
这个循环的开头包含一个必须成立的条件判断式以便执行循环中的叙述。
如果条件判断式不成立,则直译器继续会从「Loop」关键词下面的第一个叙述开始执行。
下面的程序使用了「Do While」循环:
a = 1
Do While a < 10
a = a + 1
Loop
条件判断式「a < 10」会在进入循环前先被测试过。
如果条件成立,则直译器会执行所有叙述直到遇上「Loop」关键词。
而在循环开头的条件判断式会被重复测试一直到条件变为不成立为止。
然后直译器会继续从「Loop」关键词下面的叙述开始执行。
因此,循环开头的条件判断式必须得到True或False的结果以便执行或终止该循环。
Do Until
「Do Until」叙述会建立在循环的进入点测试条件的循环。
如果条件不成立,那么循环就会被执行。
一旦条件变为成立,则循环才会终止。
范例如下:
a = 1
Do Until a > 10
a = a + 1
Loop
在这个循环中,「a > 10」条件会被测试。
如果条件不成立,则循环中的叙述就会被执行。
而一旦循环开头的条件变得成立时,程序就会从「Loop」关键词的下一行叙述继续执行。
Do...Loop While
您可以使用「Do...Loop While」叙述来建立包含在循环结尾进行条件测试的循环。
如果循环结尾的条件成立,循环就会被重复执行。
而如果条件变为不成立,则循环就会终止。
范例如下:
a = 1
Do
a = a + 1
Loop While a < 10
这个循环在结尾的部分测试「a < 10」条件。
如果条件成立,Do和Loop While之间的叙述就会一再地被处理。
如果条件变为不成立,则此循环下面的叙述会被执行。
Do...Loop Until
您可以使用「Do...Loop Until」来建立在结尾部分测试的循环。
如果条件不成立,循环中的叙述会一再地被处理。
如果条件变为成立,则循环就会被终止且此循环下面的叙述会被执行,范例如下:
a = 1
Do
a = a + 1
Loop Until a > 10
这个程序在循环的结尾测试了条件「a > 10」。
这个循环会一直执行直到条件变为成立为止。
Exit Do
您可以在Do循环中使用「Exit Do」叙述来终止循环。
如果直译器遇到这个叙述,则循环会被终止并且继续从循环下面的叙述开始执行。
For...Next
您可以使用For循环来执行预先定义好的次数。
「For...Next」中的所有叙述每次都会被执行。
范例如下:
For i = 1 To 10
a = a + 1
Next。