VBS脚本定义和使用常量

发布时间:2019-11-09编辑:脚本学堂
VBS脚本定义和使用常量

使用常量
所谓常量,即脚本运行时值不能改变。
例:将日元转换成美元,假设当前的汇率是 1:0.0088759,代码如下:
curConvertedPrice = curPriceInYen * 0.00888759

尽管这个方法可行,但是它会出现一些问题,为了防止这样的问题发生,用常量的办法来替代用数直接敲入。如果你改变了这个常量,那么你只是需要在定义常量的一个地方更改它就好了。

定义常量
在 VB 脚本中,常量的定义是用一个 const 的表达式后加上常量的名字然后和常量的赋值。当你定义常量的是时候,你必须赋值给它一个数值。你不能给一个常量赋值一个变量,或者是一个程序。例如如下代码,尝试用一个变量 NumberOfDepartments,定义一个常量,会产 生一个 Expected literal constant 的错误
NumberOfDepartments = 20
Const NUMBER_OF_DEPARTMENTS = NumberOfDepartments

而你可以将 20 赋给这个常量。
Const NUMBER_OF_DEPARTMENTS = 20

使用固有常量
在 VB的脚本中有一些固有的常量,用来生成 message box,改变输入格式,或者实现其它一些其它的功能。为了提高程序的可读性,你可能需要用这些常量,而不是它们对应等价的数字。

例如,下面的脚本例子用数字来实现 message box 的显示,然后决定在 message box 中, 哪个按钮被按下了。尽管它可以正常的工作,但是对于不熟悉 VB 脚本的人来说,这个脚本很难懂并且很不好编辑。他们必须知道260的意思是:创见一个带有 yes& no 的 message box, 并且第二个按钮是默认的按钮,数字 7 代表用户敲打 NO 那个按钮。

ConfirmDelete = MsgBox ("Are you sure you want to delete these files?",260, "Delete all files")
If ConfirmDelete = 7 then
Wscript.Quit
End If

下面这个修正的脚本用了 VBS的固有常量。(VBYesNo,VBDefaultButton2,和 VBNo)用来代替数字。这些使脚本看起来简单易懂。
ConfirmDelete = MsgBox ("Are you sure you want to delete these files?", _
VbYesNo OR VBDefaultButton2, "Delete all files")
If ConfirmDelete = VbNo then
Wscript.Quit
End If

用固有常量同样可以帮助你防止当脚本 Update 的时候使脚本实现中断。脚本的常量基本上不可能发生变化。几乎不可能将 VbYesNo 变成 VbNoYes。但是这些常量对应的值会在脚本下次更新的时候更换。用系统常量的时候也方便和其它出现的语言的脚本合并,例如,在 VB 脚本中,1 用来代表 true。在 visual basic.net,true 也等于 1。用 true 这个固有常量,比用硬编码 1 更加容易实现二者之间的转换。 大部分的时候,你会发现你经常重复的使用到如下两个固有常量:
1、VbCrLf.这个等同于按下回车键。它经常用来更改输出显示的格式。例如,如下代码用来显示一行文字,一个空的行,然后再显示一行文字
Wscript.Echo "This is the first line of text." & VbCrLF & VbCrLF & _
"This is the second line of text."

2、VbTab这个常量等同于按下 TAB 键,例如,如下代码来建立三个空格:
Wscript.Echo " 1" & VbTab & " 2" & VbTab & " 3"
Wscript.Echo "A" & VbTab & "B" & VbTab & "C"
Wscript.Echo "D" & VbTab & "E" & VbTab & "F"
当上面这个脚本运行的时候,它将显示如下:
1       2      3
A       B     C
D       E     F

这些固有常量只有在用 VB 写的时候才有用,它没有权力去用类似 WMI,ADSI或者脚本的自动控制的对象。在用 VB 脚本写的时候,你可以不用定义就使用 Vb 当中固有的常量,比如 VbCrlf,VbYesNo,但是,当你用 WMI,ADSI 当中常量的时候,你必须显式的声明这些常量。

例如,在 Script Runtime Drive 对象当中有个固有常量 fixed 用来表示 fixed disk drive,Script Runtime可以用这个 fixed 而不需要显式的声明,不用赋值给它……

因为 VB 脚本没有权力访问这个常量,所以任何试图不去定义就访问这个常量的脚本都会失败或者遇到一个错误。例如,如下的脚本可以运行,但是不能标识任何一个你计算器上的 fixed 硬盘。
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDiskDrives = objFSO.Drives
For Each objDiskDrive in colDiskDrives
If objDiskDrive.DriveType = Fixed then
Wscript.Echo objDiskDrive.DriveLetter
End if
Next

这个脚本会执行失败,因为 VB 脚本并不知道 Fixexd 这个系统常量的值是 2,取而代之的是将 这个阿常量认为是一个变量。除非你把这个常量赋值,否则它的值就是 empty.在这个例子中,VB 将寻找 DriveType property 的值等于 0 而不是去寻找等于 2,因为 VB 找不到任何这样属 性的 drives,脚本就没有返回任何的数据…… 为了使这个脚本工作,你必须创建一个你自己的常量,叫作 fixed,并且显式的赋值给它为 2, 如下面的事例:
Const Fixed = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDiskDrives = objFSO.Drives
For Each objDiskDrive in colDiskDrives
If objDiskDrive.DriveType = Fixed then
Wscript.Echo objDiskDrive.DriveLetter
End if
Next