1 - 2
来源:互联网 发布:sql学生信息表 编辑:程序博客网 时间:2024/06/11 23:16
<HTML>
<HEAD>
</HEAD>
<SCRIPT LANGUAGE="VBScript">
<!–
MsgBox "Hello World!"
–>
</SCRIPT>
</BODY>
</HTML>
前面展示了一个HTML文件中嵌套VBScript的例子。这里展示一个通过Windows Script Host执行的本地vbs文件的例子。
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的语句可以是一个声明或者一个表达式,或者是注释语句。语句自然结束(换行符),没有特殊的终结符。如果一条语句中包含有单引号('),则该单引号后面的内容被看作是注释。
- 变量,常量和数据类型
VBScript只支持一种变量数据类型,即Variant。按照变量间的互操作性可进一步分为以下几种子类型:
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 SubPrivate 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 = " & iIf 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调用可能得到的返回值。
几个例子:
Dim MyCheck
MyCheck = VarType(300) ' 返回 2。
MyCheck = VarType(#10/19/62#) ' 返回 7。
MyCheck = VarType("VBScript") ' 返回 8。
通过上面的调用可以看出,在VBScript中,数据类型的确是由赋值决定的。因些在变量互操作时,要考虑根据变量的取值来确定其数据类型,进而决定两者是否可以直接参与运算。在后面函数和过程一节中,会有示例进一步演示VarType的用法。
- 1>、2>、2>&1
- 1>&2, 2>&1, &>
- //1+2^1-1+...+2^20-1
- 2-1
- 1~2
- 1 - 2
- 2>?1
- 1-2
- 1-2
- 2>&1
- 2>&1
- 2>&1
- 1-2
- 2-1
- 2-1
- 2>&1
- 2>&1
- 2*1
- 日语动词里的未然形、连用形、终止形、连体形、假定形、命令形、推量形各代表的意思
- SQL操作全集
- oracle与sql server常用函数对比
- 存储器分类及定义
- smarty模板:section循环块与foreach循环块
- 1 - 2
- 我的博客
- 介绍嵌入式应用中存储器类型的选择技巧
- J2SDK和TOMCAT的安装及配置
- 在SQL中去掉非数字的字符,只保留数字
- 关于'a++'和'++a'和'a+5'是否能作左值的问题
- 疯狂的程序员46
- 编写DirectShow Filters—概述
- 好的网站