1 - 2

来源:互联网 发布:sql学生信息表 编辑:程序博客网 时间:2024/06/11 23:16
1 vbscript Prolog
语法概要
        1.1 程序示例
        1.2 变量,常量,数据类型
        1.3 流程控制
        1.4 函数和过程
        1.5 多文件工程
   2. 开发工具
   3. 开发库和获取帮助
这篇文章对VBScript作一简要介绍,这类文章很多,本篇的切入点是,从C/C++语言开发者的角度来学习VBScript,对基本概念不详细介绍,主要从比较异同的角度,能够给读者一个快速入门和帮助。
Microsoft Visual Basic Scripting Edition 是程序开发语言 Visual Basic 家族的最新成员。使用VBScript编写的脚本可以运行在Web客户机脚本,服务器脚本上,以及通过Windows Script Host运行在本地,以便进行日常的Windows管理。
因此,要编写,调试和运行一个VBScript脚本,你可以:
将脚本嵌入到HTML文件中。只要将VBScript 代码写在HTML文件中成对的<SCRIPT> 标记之间即可,请看下例:
          <HTML>
          <HEAD>
         </HEAD>
<BODY>
<SCRIPT LANGUAGE="VBScript">
<!–
MsgBox "Hello World!"
–>
</SCRIPT>
</BODY>
</HTML>
将代码片段以html文件保存并双击打开它,你就可以看到一个"hello world!"的对话框 。
安装windows script host,双击后缀为.vbs的文件运行,或者在命令行下,以cscript命令运行。 
前面展示了一个HTML文件中嵌套VBScript的例子。这里展示一个通过Windows Script Host执行的本地vbs文件的例子。
Function GetIP()
  Dim ws : Set ws = CreateObject("WScript.Shell")
  Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
  Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
  Dim ThisLine, IP
  If ws.Environment("SYSTEM")("OS") = "" Then
    ws.run "winipcfg /batch " & TmpFile, 0, True
  Else
    ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
  End If
  With fso.GetFile(TmpFile).OpenAsTextStream
    Do While NOT .AtEndOfStream
      ThisLine = .ReadLine
      If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2)
    Loop
    .Close
  End With
  'WinXP (NT? 2K?) leaves a carriage return at the end of line
  If IP <> "" Then
    If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, Len(IP) - 1)
  End If
  GetIP = IP
  fso.GetFile(TmpFile).Delete 
  Set fso = Nothing
  Set ws = Nothing
End Function
这个例子演示了如何利用vbscript获取本机当前IP地址。这个例子演示了如何定义变量,创建和读取文件,调用操作系统命令,使用组件对象。它的运行过程如下:    
将上述文件保存为后缀为*.vbs的文档,当你在资源管理器中双击该文档时,资源管理器通过查找注册表,发现该文件类型已与windows scripting Host 关联,因此调用WHS,并将文件名传入。WHS从文件开头执行,忽略掉注释文本。对这个例子来说,是从WSCript.Echo GetIP() 处执行。这样就引发了对函数GetIP的调用。WSH在当前脚本内找到该函数,执行,并将结果作为参数传给WSCript.Echo,显示后结束。Echo是对象WSCript的一个方法,当脚本以这种方式执行时,它以Messagebox的方式输出文本。当脚本在命令行方式下,以CScript.exe命令执行时,输出到控制台。    
注意:运行上述脚本前,确保已经安装Windows Scripting Host 5.6版本。
 
2 Datatype and variables in VBScript
  • 语句

VBScript的语句可以是一个声明或者一个表达式,或者是注释语句。语句自然结束(换行符),没有特殊的终结符。如果一条语句中包含有单引号('),则该单引号后面的内容被看作是注释。

  • 变量,常量和数据类型

VBScript只支持一种变量数据类型,即Variant。按照变量间的互操作性可进一步分为以下几种子类型:

子类型 描述 Empty 未初始化的 Variant。对于数值变量,值为 0;对于字符串变量,值为零长度字符串 ("")。 Null 不包含任何有效数据的 Variant。 Boolean 包含 TrueFalse。 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 包含错误号。

VBScript允许通过Class关键字定义用户数据类型。语法是:

Class name
    
statements
End Class
 

如我们可以定义一个CPoint类:

Class CPoint    
     public x   
     public y   
     Sub Dump()   
          MsgBox("x=" & x)   
          MsgBox("y=" & y)   
     End Sub
End Class
 

类似于C++,VBScript中的类也支持构造和析构,这是通过声明

Private Sub Class_Initialize()
    语句
End Sub

Private Sub Class_Terminate()
    >语句
End Sub

来实现的。下面的例子演示了对象创建和析构时的调用。不过,没有办法给这两个方法传入参数,从而限制了这两个方法的应用。默认地,与C++不同,类的方法和成员都是公用的。当然,VBScript并不支持声明与定义分离,这使得类过程定义必须全部写在类声明之中,从而使用类声明很冗长,不方便阅读。
使用 Dim 语句、Public 语句或Private 语句在脚本中显式声明变量。例如:

Dim DegreesFahrenheit          
Dim Top, Bottom, Left, Right      '声明多个变量
Public MyArray(9)                     '声明一个有9个元素的一维数组,且此数组对本应用中所有脚本所有过程可见
Private thisScript
                     '声明一个仅对本脚本可见的变量

前面的例子已经给出了如何声明一个固定元素个数的一维数组。下面是一组声明动态数组和多维数组的例子:

Dim MyArray()
Dim MyTable(5, 10)

这里有几点注意:
1. 默认数组下标从0开始,因些MyTable是一个有6行和11列二维数组。
2. 动态数组在声明前必须分配空间后才能使用,即在使用前,必须使用ReDim 语句确定空间大小。如:
     ReDim MyArray(25)
     ReDim 的调用类似于函数调用,因此这里的25可以用已经确定取值的变量来替换。

使用const来声明一个常量。如:

Const MyString = "这是一个字符串。"
Const MyAge = 49

  • 变量的赋值和初始化

DegreesFahrenheit = 110
MyArray(0) = 0      '对数组元素赋值
MyArray(1) = 1

MyArray(9) = 9

对子类型是对象的变量的赋值必须使用Set语句,除前面在谈论类声明时给出的例子外,这里再给出一个例子:

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")

这样的赋值是错误的:

这样的赋值是错误的:

 

fs = CreateObject("Scripting.FileSystemObject")

这里可以看出,VBSCript尽管是无类型的语言,但数据间的可互操作性决定了变量必然从属于某个子类型,从而变量的赋值,运算和转换也要服从某些规定,否则要么无法通过语法检查,要么更恶劣地,造成逻辑错误。
VBScript不存在C/C++语法意义上的初始化。变量的初始化在第一次赋值时完成,也不存在静态变量。好在我们还有全局(publi)变量来临时代替静态变量的使用。对自定义类型(class),尽管存在Initialize和Terminate事件在分别对象创建和销毁时被调用,由于这两个事件都不接受变量,因而也不存在对类变量真正意义上的初始化。

  • 变量的比较运算和类型运算

对象变量的比较运算在这里需要提及一下。
在语句fs = CreateObject("Scripting.FileSystemObject")中,FilseSystemObject对象有可能创建失败。在C/C++中,这种情况下常常返回null值以示失败。在VBScript中,可以用IsNull(obj)来判断对象obj是否为null值 。永远不要用if obj = NULL或者if obj <> NULL来判断对象obj是否为有效。IsEmpty(var)是一个令人困惑的函数,它用来判断变量var是否仅仅只声明过而未初始化。函数IsObject则可以用来判断某个变量是否属于某个类型。
总之,由于VBScript的无类型性,因而在变量比较和类型运算上比较困难,这也造成程序排错与调试上的困难。下面给出了一些示例:

Dim MyVar, MyCheck
wscript.echo "MyVar is " & MyVar
i = 3 + MyVar
wscript.echo "i = " & i

If IsEmpty(MyVar) Then wscript.echo "MyVar is Empty"

MyVar = Null                  ' 赋为 Null。
If (Not IsEmpty(MyVar)) And IsNull(MyVar) Then wscript.echo "MyVar is not Empty but Null"

MyVar = Empty                 ' 赋为 Empty。
If IsEmpty(MyVar) And (Not IsNull(MyVar))  Then wscript.echo "MyVar is Empty, not Null"

输出结果为:

MyVar is
i = 3
MyVar is Empty
MyVar is not Empty but Null
MyVar is Empty, not Null

鉴于类型是如此重要,我们再看一个函数,VarType()。下面给出了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 Boolean vbVariant 12 Variant(只和变量数组一起使用) vbDataObject 13 数据访问对象 vbByte 17 字节 vbArray 8192 数组

几个例子:

Dim MyCheck
MyCheck = VarType(300)               ' 返回 2。
MyCheck = VarType(#10/19/62#)    ' 返回 7。
MyCheck = VarType("VBScript")       ' 返回 8。

通过上面的调用可以看出,在VBScript中,数据类型的确是由赋值决定的。因些在变量互操作时,要考虑根据变量的取值来确定其数据类型,进而决定两者是否可以直接参与运算。在后面函数和过程一节中,会有示例进一步演示VarType的用法。

原创粉丝点击