1.变量常量
变量的定义
可以通过 Dim、Public 或Private语句声明 VBScript 变量:
Dim opera,operb,result
用 Option Explicit(显示声明,强制所有变量必须先申明才能使用) 语句。如果您使用这个语句,就必须使用 dim、public 或 private 语句来声明所有的变量。
Option Explicit
Dim carname
carname=some value
常量的定义
Const vbPI = 3.14
应用
Dim opera,operb,result1
opera = InputBox("Please input a's value")
operb = InputBox("Please input b's value")
result1 = Int(opera) + Int(operb)
result2 = Int(opera) - Int(operb)
MsgBox opera & "+" & operb & "=" & result1
MsgBox opera & "-" & operb & "=" & result2
其中,输入语句 InputBox()
输出语句 MsgBox()
opera&"+"&operb&"="&result,&为连接符(+也是连接符), 作用是链接字符串或变量
2.字符串相关函数
Lcase和Ucase
大小写转换:Lcase和Ucase
'转换成小写
X = LCase("aBc") 'abc
'转换成大写
X = UCase("aBc") 'ABC
StrComp
比较,用来比较两个字符串,若是相等则返回0。
x = StrComp("abc","abc") '返回0
x = StrComp("abc","aBc") '返回非0
StrReverse
翻转字符串
'返回 yhW
x = StrReverse("Why")
Len
返回字符串长度
'返回3
x = Len("abc")
Left
返回一个字符串左边指定数目的字符、
'返回"This is"
x = Left("This is a test",7)
Right
返回一个字符串右边指定数目的字符
'返回"test"
x = Right("This is a test",4)
Mid
Mid 函数从字符串中返回指定数量的字符。如果没有指定数目,则返回从中间到最后的字符。
语法:Mid(string,start[,length])
参数 | 描述 |
---|---|
string | 必需。从其中返回字符的字符串表达式。 |
start | 必需。规定起始位置。如果设置为大于字符串中的字符数量,则返回空字符串("")。 |
length | 可选。要返回的字符数量。 |
InStr
函数返回一个字符串在另一个字符串中首次出现的位置。
语法:InStr([start,]string1,string2[,compare])
参数 | 描述 |
---|---|
start | 可选。规定每次搜索的起始位置。默认的搜索起始位置是第一个字符(1)。如果已规定 compare 参数,则必须有此参数。 |
string1 | 必需。需要被搜索的字符串。 |
string2 | 必需。需要搜索的字符串表达式。 |
compare | 可选。规定要使用的字符串比较类型。默认是 0。 可采用下列的值:
|
InStr 函数返回下面的值:
- 如果 string1 为 "" - InStr 返回 0
- 如果 string1 为 Null - InStr 返回 Null
- 如果 string2 为 "" - InStr 返回 start
- 如果 string2 为 Null - InStr 返回 Null
- 如果 string2 没有找到 - InStr 返回 0
- 如果在 string1 中找到 string2 - InStr 返回找到匹配字符串的位置
- 如果 start > Len(string1) - InStr 返回 0
例子:
txt="This is a beautiful day!"
MsgBox InStr(1,txt,"i") 'result:3
MsgBox InStr(7,txt,"i") 'result:16
InStrRev
InStrRev 函数返回字符串在另一字符串中首次出现的位置。搜索从字符串的末端开始,但是返回的位置是从字符串的起点开始计数的。
InStrRev(string1,string2[,start[,compare]])
参数 | 描述 |
---|---|
string1 | 必需。需要被搜索的字符串。 |
string2 | 必需。需要搜索的字符串表达式。 |
start | 可选。规定每次搜索的起始位置。默认的搜索起始位置是最后一个字符(-1)。 |
compare | 可选。规定要使用的字符串比较类型。默认是 0。 可采用下列的值:
|
- 如果 string1 为 "" - InStrRev 返回 0
- 如果 string1 为 Null - InStrRev 返回 Null
- 如果 string2 为 "" - InStrRev 返回 start
- 如果 string2 为 Null - InStrRev 返回 Null
- 如果 string2 没有找到 - InStrRev 返回 0
- 如果在 string1 中找到 string2 - InStrRev 返回找到匹配字符串的位置
- 如果 start > Len(string1) - InStrRev 返回 0
LTrim,RTrim,Trim
去除字符串左边、右边或者两边的空格。
LTrim(string)
参数 | 描述 |
---|---|
string | 必需。字符串表达式。 |
RTrim(string)
参数 | 描述 |
---|---|
string | 必需。字符串表达式。 |
Trim(string)
参数 | 描述 |
---|---|
string | 必需。字符串表达式。 |
Replace
Replace 函数使用另一个字符串替换字符串的指定部分指定的次数。
Replace(string,find,replacewith[,start[,count[,compare]]])
参数 | 描述 |
---|---|
string | 必需。被搜索的字符串。 |
find | 必需。将被替换的字符串部分。 |
replacewith | 必需。用于替换的子字符串。 |
start | 可选。指定的开始位置。默认值是 1。起始位置之前的所有字符将被删除。 |
count | 可选。规定要执行的替换的次数。 默认值是 -1,表示进行所有可能的替换。 |
compare | 可选。规定要使用的字符串比较类型。默认是 0。 可采用下列的值:
|
Space
生成指定数目的空格。
Space(number)
参数 | 描述 |
---|---|
number | 必需。字符串中的空格数量。 |
String
String 函数返回包含指定长度的重复字符的一个字符串。
String(number,character)
参数 | 描述 |
---|---|
number | 必需。被返回字符串的长度。 |
character | 必需。被重复的字符。 |
Array
Array 函数返回一个包含数组的变量。
注意:数组中的第一个元素索引是零。
Array(arglist)
参数 | 描述 |
---|---|
arglist | 必需。数组中元素值的列表(由逗号分割)。 |
a=Array(5,10,15,20)
MsgBox a(3) '20
UBound和LBound
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 |
Filter
Filter 函数返回一个基于 0 的数组,此数组包含以特定过滤条件为基础的字符串数组的子集。
注意:如果找不到与 value 参数相匹配的值,Filter 函数会返回一个空数组。
注意:如果参数 inputstrings 为 Null 或者不是一维数组,则会发生错误。
Filter(inputstrings,value[,include[,compare]])
参数 | 描述 |
---|---|
inputstrings | 必需。要检索的一维字符串数组。 |
value | 必需。要搜索的字符串。 |
include | 可选。Boolean 值,指定返回的子字符串是否包含 Value。如果 Include 为 True,Filter 将返回包含子字符串 Value 的数组子集。如果 Include 为 False,Filter 将返回不包含子字符串 Value 的数组子集。默认值为 True。 |
compare | 可选。规定要使用的字符串比较类型。 可采用下列的值:
|
a=Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
b=Filter(a,"S")
for each x in b
MsgBox x
Next
'结果:Sunday,Saturday
Split
Split(expression[,delimiter[,count[,compare]]])
参数 | 描述 |
---|---|
expression | 必需的。包含子字符串和分隔符的字符串表达式。 |
delimiter | 可选的。用于识别子字符串界限的字符。默认是空格字符。 |
count | 可选的。需被返回的子字符串的数目。-1 指示返回所有的子字符串。 |
compare | 可选的。规定要使用的字符串比较类型。 可采用下列的值:
|
例子1:
Dim testpath,testpaths
testpath = "C:\oabookat\testscript"
testpaths = Split(testpath,"testscript")
MsgBox testpaths(0)
结果:
Join
oin 函数返回一个由数组中若干子字符串组成的字符串。
Join(list[,delimiter])
参数 | 描述 |
---|---|
list | 必需。一维数组,其中包含需被连接的子字符串。 |
delimiter | 可选。用于在返回的字符串中分割子字符串的字符。默认是空格字符。 |
str = "-"
seq = Array("a", "b", "c")
MsgBox Join(seq,"-") 'a-b-c
3.转换函数
CBool
CBool():将表达式转换为Boolean型:
语法:CBool(expression)
该函数将参数expression转换为 Boolean型 。
参数可以是任何有效的表达式。
注解:如果 expression 的结果为 0 ,则返回 False;否则将返回 True。如果 expression 无法被计算成数值,将会产生执行阶段错误。
CByte
CByte():将表达式转换为Byte型。
语法:CByte(expression)
该函数返回一个转换为 Byte 型的表达式。
参数 expression 可以是任何有效的表达式。
注解:使用 CByte 来强制执行 Byte 运算,不管它是单精数、倍精数、或是整数,都可以正常执行。使用 CByte 函数可以在任何语言的版本中,让任何一种数据转换至 Byte型。例如,不同的小数点分隔符号,会依据您系统的国别设定来做适当的确认。而千分位分隔符号也一样。若 expression 超出 Byte 资料型态允许的范围,则将会显示错误。
CCur
CCur():将表达式转换为Currency()货币类型。
语法:CCur(expression)
该函数返回一个转换为 Currency 的表达式。
参数 expression 可以是任何有效的表达式。
注解:
可以使用 CCur 来强制执行 Currency 运算,以免被当作整数运算。
可以使用 CCur 函数以在任何语言的版本中,让任何一种数据换至 Currency 型。例如,当使用 CCur,不同的小数点分隔符号、千分位分隔符号,和不同的货币选项,会依据您系统的国别设定来做适当的确认。
CDate
CDate():
语法:CDate(date)
返回一个转换为 Date 型的表达式。
参数 date 是任何有效的日期表达式。
注解:
可以使用 IsDate 函数来检查 date 是否可以被转换成日期或时间。而 CDate 接受日期文字和时间文字以及日期/时间有效范围内的适当数值。当转换一个数字成为日期时,是将整数部分转换成日期;任何数字中的小数部分,将转换为从午夜起算的时间。
CDate 是依据您系统上的国别设定来决定日期的格式。若提供的格式为不可辨识的日期设定,则无法判断日、月、年的顺序。另外,它若包含有星期的字符串,对于这样的完整日期格式也无法辨识。
CDbl()
语法CDbl(expression)
返回一个转换为 Double 态的表达式。
参数 expression 可以是任何有效的表达式,比如string,数字
注解:
可以使用 CDbl 或 CSng 来强制执行双精度或单精度运算以防止被当作货币或整数运算。
结果:两个输出值都是1
CInt
CInt():函数将一个表达式转化为数字类型.
表达式 CInt(expression)
允许数据类型: 任何有效的字符均可,比如字符串、数字
实例:
f = "234"
response.write cint(f) + 2
返回结果: 236
转化字符"234"为数字"234",如果字符串为空,则返回0值
a = "12,890.12000"
b = "12,890.120"
If CInt(Replace(a,",","")) = CInt(Replace(b,",","")) Then
MsgBox 1
Else
MsgBox 0
End If
If CInt(a) = CInt(b) Then
MsgBox 1
Else
MsgBox 0
End IF
结果:两个输出值都是1
CLng
语法
CLng(expression)
该函数返回一个转换为 Long 型的表达式。
参数 expression 可以是任何有效的表达式。
注解:
可以使用 CInt 或 CLng 来强制执行整数运算,以免被当作货整币、单精度、或双精度运算。
如果 expression 超出 Long型允许的范围,则会发生错误。
附注:
CLng 函数与 Fix 及 Int 函数不同,Fix 和 Int 函数会将小数部分去除,然后返回整数值。当小数部分恰好为 0.5 时, CLng 函数会将它转换成最接近的偶数值。例如,0.5 转换成 0,1.5 转换成 2。
CSng
语法
CSng(expression)
该返回一个转换为 Single 资料型态的表达式。
参数 expression 可以是任何有效的表达式。
注解:
使用 CDbl 或 CSng 来强制执行双精度或单精度运算,以防止被当作货币或整数运算。
如果 expression 超出 Single 型允许的范围,则会发生错误。
CStr
CStr():函数转化一个表达式为字符串.
表达式 Cstr(expression)
允许数据类型: expression 是任何有效的表达式。
实例:
s = 3 + 2
response.write "the 返回结果 is: " & cstr(s)
返回结果: 转化数字“5”为字符“5”。
Hex()
Hex(number)
参数 | 描述 |
---|---|
number | 必需。任何有效的表达式。 如果数字是:
|
注解:
如果 number 不是一个整数,那么在执行前会先被四舍五入成最接近的整数。
可以将十六进位数字直接以&H开头来表示。例如,&H10代表十进位的 16。
Oct()
Oct(number)
参数 | 描述 |
---|---|
number | 必需。任何有效的表达式。 如果数字是:
|
可以将八进位数字直接以&O 开头来表示。例如,&O10代表十进位的 8。
Asc
Asc 函数把字符串中的第一个字母转换为对应的 ANSI 代码,并返回结果。
Asc(string)
参数 | 描述 |
---|---|
string | 必需。字符串表达式。不能为空字符串! |
MsgBox Asc("A") '65
Chr
Chr 函数把指定的 ANSI 字符代码转换为字符。
注意:从 0 到 31 之间的数字表示不可打印的 ASCII 代码,例如 Chr(10) 将返回一个换行符。
Chr(charcode)
参数 | 描述 |
---|---|
charcode | 必需。标识某个字符的数字。 |
MsgBox Chr(65) 'A
4.日期和时间函数
Date
返回当前系统日期
Dim MyDate
MyDate = Date
MsgBox MyDate '结果2022/4/27
Time
返回当前系统时间
Dim MyTime
MyTime = Time
MsgBox MyTime '结果 15:06:19
Now
返回当前系统日期和时间
MsgBox Now '结果 2022/4/27 15:08:21
Day/Month/Year
Day
Day函数返回介于 1 到 31 之间的一个代表月的天数的数字。
Day(date)
参数 | 描述 |
---|---|
date | 必需。表示日期的任何表达式。 |
Msgbox Now() '2022/4/27 15:24:40
Msgbox Day(Now()) '27
Month
Month 函数返回表示年的月份的数字,介于 1 到 12 之间。
Month(date)
参数 | 描述 |
---|---|
date | 必需。任何表示日期的表达式。 |
Msgbox Now() '2022/4/27 15:34:36
Msgbox Month(Now()) '4
Year
Year 函数返回表示年份的一个数字。
Year(date)
参数 | 描述 |
---|---|
date | 必需。任何可表示日期的表达式。 |
Msgbox Now() '2022/4/27 15:34:36
Msgbox Year(Now()) '2022
Hour/Minute/Seconds
Hour 函数返回一个 0 到 23 之间的代表天的小时数的数字。
Hour(time)
参数 | 描述 |
---|---|
time | 必需。任何可表示时间的表达式。 |
Minute 函数返回表示小时的分钟数的数字,介于 0 到 59 之间。
Minute(time)
参数 | 描述 |
---|---|
time | 必需。表示时间的表达式。 |
Second 函数返回表示分钟的秒数的数字,介于 0 到 59 之间。
Second(time)
参数 | 描述 |
---|---|
time | 必需的。任何表示时间的表达式。 |
Msgbox Hour(Time) '15
Msgbox Hour(Now) '15
Msgbox Minute(Time) '38
Msgbox Minute(Now) '38
Msgbox Second(Time) '47
Msgbox Second(Now) '47
Weekday
Weekday 函数返回表示一周的天数的数字,介于 1 到 7 之间。
Weekday(date[,firstdayofweek])
参数 | 描述 |
---|---|
date | 必需。要计算的日期表达式。 |
firstdayofweek | 可选。规定一周的第一天。 可采用下面的值:
|
'Now: 2022/4/27 15:41:10 星期三
Msgbox Weekday(Now) '4
Msgbox Weekday(Now,2) '3
DateDiff
DateDiff 函数返回两个日期之间的时间间隔数。
DateDiff(interval,date1,date2[,firstdayofweek[,firstweekofyear]])
参数 | 描述 |
---|---|
interval | 必需。计算 date1 和 date2 之间的时间间隔的单位。 可采用下面的值:
|
date1,date2 | 必需。日期表达式。在计算中需要使用的两个日期。 |
firstdayofweek | 可选。规定一周的日数,即当周的第几天。 可采用下面的值:
|
firstweekofyear | 可选。规定一年中的第一周。 可采用下面的值:
|
Msgbox DateDiff ("d",2022/4/25,2022/4/27) '-2
Msgbox DateDiff ("d",2022/4/27,2022/4/25) '2
5.其他函数
TypeName
TypeName 函数返回指定变量的子类型。
TypeName 函数返回下面的值:
- Byte - 表示一个字节值
- Integer - 表示一个整型值
- Long - 表示一个长整型值
- Single - 表示一个单精度浮点值
- Double - 表示一个双精度浮点值
- Currency - 表示一个货币值
- Decimal - 表示一个十进制值
- Date - 表示一个日期或时间值
- String - 表示一个字符串值
- Boolean - 表示一个布尔值,True 或 False
- Empty - 表示一个未初始化变量
- Null - 表示无有效数据
- <object type> - 表示实际对象类型名
- Object - 表示一般对象
- Unknown - 表示未知对象类型
- Nothing - 表示还未引用对象实例的对象变量
- Error - 表示一个错误
TypeName(varname)
参数 | 描述 |
---|---|
varname | 必需。变量的名称。 |
x="Hello World!"
MsgBox TypeName(x) 'String
VarType
VarType 函数返回指示指定变量的子类型的值。
VarType 函数返回下面的值:
- 0 = vbEmpty - 表示空(未初始化)
- 1 = vbNull - 表示 Null(无有效数据)
- 2 = vbInteger - 表示一个整数
- 3 = vbLong - 表示一个长整数
- 4 = vbSingle - 表示一个单精度浮点数
- 5 = vbDouble - 表示一个双精度浮点数
- 6 = vbCurrency - 表示货币
- 7 = vbDate - 表示日期
- 8 = vbString - 表示一个字符串
- 9 = vbObject - 表示一个 automation 对象
- 10 = vbError - 表示一个错误
- 11 = vbBoolean - 表示一个布尔值
- 12 = vbVariant - 表示 Variant(仅用于变量数组)
- 13 = vbDataObject - 表示一个数据访问对象
- 17 = vbByte - 表示一个字节
- 8192 = vbArray - 表示一个数组
注意:假如变量是数组,则 VarType() 会返回 8192 + VarType(array_element)。举例:整数数组的 VarType() 会返回 8192 + 2 = 8194。
VarType(varname)
参数 | 描述 |
---|---|
varname | 必需。变量的名称。 |
x="Hello World!"
MsgBox VarType(x) '8
GetRef
CreatObject
CreateObject 函数创建一个指定类型的对象。
CreateObject(servername.typename[,location])
参数 | 描述 |
---|---|
servername | 必需。提供此对象的应用程序名称。 |
typename | 必需。对象的类型或类(type/class)。 |
location | 可选。在何处创建对象。 |
'声明变量
Dim ExcelSheet
'为Excel.Application创建一个DOM对象
Set ExcelSheet = CreateObject("Excel.Application")
aRemoteSever = "127.1.1.1"
'在远程服务器上为Excel.Application创建一个COM对象
Set ExcelSheet = CreateObject("Excel.Application",sRemoteSever)
CreateObject,这条命令可以访问windows系统内安装的所有COM对象,并且可以调用这些部件中存放的命令。
COM对象(COM:The Component Object Model 组件对象模型)是遵循COM规范编写以Win32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行二进制代码,能够满足对组件架构的所有需求。简单的说,COM就是别人写好的模块,我们要做的仅仅是调用它,而不必关心它的内部实现,这也是COM技术的一个初衷。ProgID可以认为是开发人员为COM对象起的一个名字,我们把COM对象的名字传递给CreateObject函数,告诉它我们想创建这个对象,CreateObject函数就会返回这个对象的指针给你。
WSH 是“Windows Scripting Host”的缩略形式,其通用的中文译名为“Windows脚本宿主”。对于这个较为抽象的名词,我们可以先作这样一个笼统的理解:它是内嵌于 Windows 操作系统中的脚本语言工作环境。WSH的工作流程,实际上就是脚本文件被解析并执行的过程。WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于充分挖掘了脚本语言的潜力。脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,写完后,你只需将它保存为 WSH 所支持的文件名就行了(如 ..js 文件、.vbs 文件),WSH也就是用来解析VBS语言的宿主,本身包含了几个个常用对象:
- Scripting.FileSystemObject>提供一整套文件系统操作函数,它允许我们在代码内操作文本文件、文件夹及驱动器。
- Scripting.Dictionary>用来返回存放键值对的字典对象
- Wscript.Shell一>提供一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS 环境变量,读取链接中的设置
- Wscript.NetWork>提供网络连接和远程打印机管理的函数。(其中,所有Scripting对象都存在SCRRUNDLL文件中,所有的Wscript对象都存放在WSHOMocx文件中。)
GetObject
GetObject 函数返回对文件或已经打开应用 automation 对象的引用。
语法:GetObject([pathname][,class])
参数 | 描述 |
---|---|
pathname | 可选。包含 automation 对象的文件的完整路径和名称。如果此参数被忽略,就必须有 class 参数。 |
class | 可选。automation 对象的类。此参数使用此语法:appname.objectype。 |
Set objSWbemServices = GetObject("winmgmts:")
参考:Microsoft Windows 2000 Scripting Guide - The "WinMgmts:" Prefix | Microsoft Docs
WMI中相关的操作说明execquery 或者是instancesof_weixin_33756418的博客-CSDN博客
WMI 名字对象可以由三部分组成:一个强制组件和两个可选组件。强制性组件是“winmgmts:”前缀。所有 WMI 名称都必须以“winmgmts:”开头。
指定仅包含“winmgmts:”前缀的名字对象是您可以使用的 WMI 名字对象的最基本形式。结果始终是对 SWbemServices 对象的引用,该对象表示与本地计算机上的 Windows Management Instrumentation 服务的连接。
Set objSWbemServices = GetObject("winmgmts:")
Set colSWbemObjectSet = objSWbemServices.InstancesOf("Win32_LogicalDisk")
或写成:
Set colSWbemObjectSet = GetObject("winmgmts:").InstancesOf("Win32_LogicalDisk")
6.循环语句
6.1 For...Next 语句
运行一段代码指定的次数(用的较多)
For 语句规定计数变量(i)以及它的初始值和结束值。Next 语句会以 1 作为步进值来递增变量(i)。
通过 Step 关键词,您可以规定计数变量递增或递减的步进值。
退出 For...Next
您可以通过 Exit For 关键词退出 For...Next 语句。
For i=1 To 10
If i=5 Then Exit For
some code
Next
6.2 For Each...Next 语句
针对集合中的每个项目或者数组中的每个元素来运行某段代码。
Dim cars(2)
cars(0)="Volvo"
cars(1)="Saab"
cars(2)="BMW"
For Each x In cars
Msgbox(x)
Next
结果: Volve Saab BMW
For i In 和 For Each i In 对比
1.浏览器的兼容性区别
2.for each遍历的是每一项value,for in 遍历的是每一项的key值
6.3 Do...Loop 语句
运行循环,当条件为 true 或者直到条件为 true 时
您可以使用 While 关键字来检查 Do... Loop 语句的条件。
Do While i>10
some code
Loop
如果 i 等于 9,上述循环内的代码将终止执行。
Do
some code
Loop While i>10
重复执行代码直到条件变成 true
您可以使用 Until 关键字来检查 Do...Loop 语句的条件。
Do Until i=10
some code
Loop
如果 i 等于 10,上述循环内的代码将终止执行。
Do
some code
Loop Until i=10
这个循环内的代码将被执行至少一次,即使 i 等于 10。
退出 Do...Loop
您可以通过 Exit Do 关键词退出 Do...Loop 语句。
Do Until i=10
i=i-1
If i<10 Then Exit Do
Loop
7.条件语句
7.1If 语句
假如您希望在条件为 true 时执行一系列的代码,可以使用这个语句
if true
do something
7.2 If...Then...Else 语句
i=hour(time)
If i < 10 Then
document.write("Good morning!")
Else
document.write("Have a nice day!")
End If
7.3 If...Then...ElseIf 语句
i=hour(time)
If i = 10 Then
document.write("Just started...!")
ElseIf i = 11 Then
document.write("Hungry!")
ElseIf i = 12 Then
document.write("Ah, lunch-time!")
ElseIf i = 16 Then
document.write("Time to go home!")
Else
document.write("Unknown")
End If
7.4 Select Case 语句
d=weekday(date)
Select Case d
Case 1
document.write("Sleepy Sunday")
Case 2
document.write("Monday again!")
Case 3
document.write("Just Tuesday!")
Case 4
document.write("Wednesday!")
Case 5
document.write("Thursday...")
Case 6
document.write("Finally Friday!")
Case else
document.write("Super Saturday!!!!")
End Select
8.数组
8.1定长数组
Dim username(2)
Dim arraybound,arraycount
Dim i
username(0)="zhangsan"
username(1)="lisi"
username(2)="wangwu"
arraybound=UBound(username)
arraycount=arraybound+1
For i = 0 To arraybound
MsgBox username(i)
Next
MsgBox arraybound
MsgBox arraycount
LBound() 返回数组的最小可用下标
UBound() 返回数组的最大可用下标
代码也可以改成:
For i = LBound(i) to UBound(i)
MsgBox username(i)
8.2动态数组
我们可以用ReDim重新定义动态数组的大小,但是每次这样做的话,数组中的值就会销毁。
除非我们像下面这样使用关键字“preserve”
'创建动态数组
Dim X()
'在使用数组之前,数组必须被初始化
Re Dim X(2)
X(0) = "This"
X(1) = "is a"
X(2) = "test"
'重定义数组,保留了前3个元素的值
ReDim Preserve X(5)
9.函数封装
原来的代码
tips:vbCrLf是vbs中的一个字符串常数,即“Chr(13) & Chr(10)”(回车符与换行符连接在一起),是换行的意思。
Dim opera,operb,result
MsgBox "+.加法功能"&vbCrLf&"-.减法功能"
oper = InputBox("请选择功能")
opera = InputBox("a")
operb = InputBox("b")
Select Case oper
Case "+"
result = CInt(opera) + CInt(operb)
msgbox result
Case "-"
result = CInt(opera) - CInt(operb)
msgbox result
Case Else MsgBox "输入错误"
End Select
Function和sub
Function有返回值
Sub没有返回值
Function有返回值,因为vbs没有return语句,所以Function会返回和函数名同名的变量的值
Function addtest(testa,testb) addtest = CInt(testa) + CInt(testb) End Function MsgBox addtest("1",2)
结果:
如果再加一个其他变量
Function addtest(testa,testb) test = CInt(testa) - CInt(testb) addtest = CInt(testa) + CInt(testb) End Function MsgBox addtest("8",2)
结果:
改造:
oper = InputBox("请选择功能")
opera = InputBox("a")
operb = InputBox("b")
Select Case oper
Case "+" MsgBox addtest(opera,operb)
Case "-" subtraction opera,operb
Case Else MsgBox "输入错误"
End Select
'function
Function addtest(testa,testb)
addtest = CInt(testa) + CInt(testb)
End Function
'sub
Sub subtraction(testa,testb)
result = CInt(testa) - CInt(testb)
'sub函数没有返回值
MsgBox result
End sub
call
Call 语句
将控制权传递给 Sub 或 Function 过程。
[Call] name [argumentlist]
可选项关键字。如果指定此关键字,则必须用括号把 argumentlist 括起来。例如:
Call MyFunction("Hello World")
Function MyFunction(text)
MsgBox text
End Function
Call MySub("Hello World")
Function MySub(text)
MsgBox text
End Function
10.fso(Scripting.FileSystemObject)
FileSystemObject对象
参考:VBS中FileSystemObject对象详解_花蝴蝶的专栏-CSDN博客
FileSystemObject 对象的作用:提供对计算机文件系统的访问,它允许我们在代码内操作文本文件、文件夹及驱动器。
FSO包含的常见对象有:
对象/集合 | 描述 |
Drive | 包含储存设备的信息,包括硬盘、光驱、ram盘、网络驱动器 |
Drives | 提供一个物理和逻辑驱动器的列表 |
File | 检查和处理文件 |
Files | 提供包含在文件夹内的所有文件的列表 |
Folder | 检查和处理文件夹 |
Folders | 提供在 Folder 内的所有文件夹的列表 |
TextStream | 对象,用来读写文本文件 |
FileSystemObject对象总共一个属性即Drives 描述:获得所有可用驱动器的集合。 说明:无论是否本地磁盘、插入媒体、可移动媒体驱动器都显示在 Drives 集合中。 具体示例代码如下所示:获取本计算机上所有的磁盘的盘符
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set Drivers = fso.Drives
For Each Driver in Drivers
Msgbox Driver.DriveLetter '输出计算机上所有的磁盘盘符
Next
10.1 folder
CreateFolder
FSO是FileSystemObject 或 Scripting.FileSystemObject 的缩写,为 IIS 内置组件,用于操作磁盘、文件夹或文本文件。
描述:创建一个空的文件夹 语法:object. CreateFolder(strFolder) 参数:strFolder为想要创建的文件夹路径及名称
Dim fso
'创建一个文件系统对象
Set fso = CreateObject("Scripting.FileSystemObject")
'在D:\learning\vbs下创建一个文件夹
Set f = fso.CreateFolder("D:\learning\vbs\1")
'把fso对象所占用的内存释放掉
Set fso = Nothing
结果:生成文件夹:1
改造使其更通用 :
其中:FolderExist 描述:判断指定文件夹是否存在 语法:object. FolderExists (strFolder) 参数:strFolder为指定的文件夹
Sub createfolder(folderpath,foldname)
Dim fso
'创建一个文件系统对象
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(folderpath&foldname)Then
MsgBox ("文件夹已存在")
Else
MsgBox "文件夹不存在,现在开始创建"
'在D:\learning\vbs下创建一个文件夹
Set f = fso.CreateFolder(folderpath&foldname)
End If
'把fso对象所占用的内存释放掉
Set fso = Nothing
End Sub
'调用
createfolder "D:\learning\vbs\","2"
DeleteFolder
删除一个文件夹
语法:object. DeleteFolder(strFolder,force)
参数:strFolder为想要删除的文件夹名称。组成部分中可用通配符。
force如果要删除只读文件夹,则该值为 True;否则为 False(默认)
示例:删除文件夹: c:\test
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用DeleteFile删除指定文件
Fso.DeleteFolder("c:\test")
'强制删除只读的文件
Fso.DeleteFolder "c:\test",True
CopyFolder
描述:将文件夹从某位置复制到另一位置
语法:object. CopyFolder "source", "destination"[, overwrite]
参数:source必选项。表示指定文件夹的路径。组成部分中可用通配符。
destination必选项。表示目标位置的路径
overwrite可选项。Boolean 值表明是否覆盖现有文件夹。如果是 True,则覆盖文件夹;如果是 False,则不覆盖现有文件夹。默认值是 True
示例:将 c:\test文件夹复制到D:\下
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用CopyFile复制文件到另一个位置,默认为True覆盖已存在文件
Fso.CopyFolder "c:\test","D:\"
'False不覆盖已存在文件
Fso.CopyFolder "c:\test","D:\",False
MoveFolder
描述:将一个或多个文件夹从某位置移动到另一位置
语法:object.MoveFolder source, destination
参数:source必选项。要移动的文件夹的路径。组成部分中可用通配符。
destination必选项。指定路径,表示要将文件夹移动到该目标位置。
示例:
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用MoveFolder移动文件夹到另一个位置
Fso.MoveFolder "c:\test","D:\"
GetParentFolderName
描述:获取文件当前所在的文件夹
语法:object.GetParentFolderName Path
参数:Path必选项。文件路径名。
示例:获取”c:\test.txt”文件所在的文件夹
Dim Fso
Dim GetParentFolderName
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用GetParentFolderName获取文件当前所在的文件夹
GetParentFolderName = Fso.GetParentFolderName("c:\test\test.txt")
MsgBox GetParentFolderName '输出c:\test
GetBaseName 方法
返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。
语法:object.GetBaseName(path)
参数
object:必选项,应为 FileSystemObject 的名称。
path:必选项。指定文件或文件夹的路径,要返回其组成部分的基本名。
如果路径中没有任何文件或文件夹与指定的 path 参数匹配,则 GetBaseName 方法返回零长度字符串 ("")。
Function GetTheBase(filespec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
GetTheBase = fso.GetBaseName(filespec)
MsgBox GetTheBase
End Function
GetTheBase("D:\learning\vbs\oabookat\testcase")
结果:
10.2 file
关于 TextStream 对象
TextStream对象是用于访问文本文件的对象,它是FileSystemObject一个独立的附属对象,但在使用TextStream对象时,我们仍要借助FileSystemObject 对象或其附属对象来创一个TextStream 对象并访问磁盘文件的内容。可以通过FileSystemObject 对象的CreateTextFile()及OpenTextFile(),来获取TextStream的对象句柄。
TextStream对象的方法:
方法 | 说明 |
Close() | 关闭一个打开的文件 |
Read(numchars) | 从文件中读出 numchars 个字符 |
ReadAll() | 作为单个字符串读出整个文件 |
ReadLine() | 作为一个字符串从文件中读出一行(直到回车符和换行) |
Skip(numchars) | 当从文件读出时忽略 numchars 个字符 |
SkipLine() | 当从文件读出时忽略下一行 |
Write(string) | 向文件写入字符串 string |
WriteLine(string) | 向文件写入字符串 string(可选)和换行符 |
WriteBlankLines(n) | 向文件写入 n 个换行符 |
TextStream对象的属性:
属性 | 说明 |
AtEndOfLine | 如果文件位置指针在文件中一行的末尾则返回 True |
AtEndOfStream | 如果文件位置指针在文件的末尾则返回 True |
Column | 从 1 开始返回文件中当前字符的列号 |
Line | 从 1 开始返回文件中当前行的行号” |
CreateFile
用指定的文件名 filename 在磁盘上创建一个新的文本文件,并返回与其对应的 TextStream 对象
语法:object. CreateTextFile(filename,blnOverWrite,unicode)
参数 | 描述 |
filename | 文件名称 |
blnOverWrite | 可选项,Ture强制覆盖,为False不覆盖 |
unicode | 可选项,如果以 Unicode 文件格式创建文件,则该值为 True;如果以 ASCII 文件格式创建文件,则该值为 False。如果省略此部分,则假定创建 ASCII 文件。 |
Option Explicit
Dim fso,f
'Create file
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile("D:\learning\vbs\1\testfile.txt", True)
OpenTextFile
OpenTextFile(filename[, iomode[, create[, format]]])
打开一个指定的文件并返回一个 TextStream 对象,该对象可用于对文件进行读、写、追加操作。
CreateTextFile 和OpenTextFile属于同一等级的函数,不要以为应该是先CreateTextFile以后就应该调用OpenTextFile,并不是这样的,完全可以通过OpenTextFile中的第三个属性(true)来新建一个文件并写入。
参数 | 描述 |
filename | 文件名称 |
iomode | iForReading 1 打开一个只读文件,不能对此文件进行写操作。 ForWriting 2 打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容。 ForAppending 8 打开一个文件并写到文件的尾部。 |
create | 可选,它表示如果指定的 filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False。 |
Format | TristateUseDefault –2 使用系统缺省打开文件。 TristateTrue –1 以 Unicode 格式打开文件。 TristateFalse 0 以 ASCII 格式打开文件。 |
Option Explicit
Dim fso,f
'创建常量
Const ForReading = 1,ForWritting = 2,ForAppending = 8
'Create file
Set fso = CreateObject("Scripting.FileSystemObject")
'Set f = fso.CreateTextFile("D:\learning\vbs\1\testfile.txt", True)
'Open file
Set f = fso.OpenTextFile("D:\learning\vbs\1\testfile.txt",ForAppending,False)
f.WriteLine("Hello")
f.Close
Set fso = nothing
封装函数使其更通用:
Option Explicit
Sub writelog(filepath,logstr)
Dim fso,f
'创建常量
Const ForReading = 1,ForWritting = 2,ForAppending = 8
'Create file
Set fso = CreateObject("Scripting.FileSystemObject")
'Set f = fso.CreateTextFile(filepath, True)
'Open file
Set f = fso.OpenTextFile(filepath,ForAppending,False)
f.WriteLine logstr
f.Close
Set fso = Nothing
End Sub
'Now() 返回当前的日期和时间
writelog "D:\learning\vbs\1\testfile.txt",Now() &"---执行自动化测试"
结果:
DeleteFile
描述:删除一个文件
语法:object. DeleteFile (strFile,force)
参数:strFile为想要删除的文件。组成部分中可用通配符。
force如果要删除只读文件,则该值为 True;否则为 False(默认)
示例:删除文件: c:\test.txt
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用DeleteFile删除指定文件
Fso.DeleteFile("c:\test.txt")
'强制删除只读的文件
Fso.DeleteFile "c:\test.txt",True
CopyFile
描述:将一个或多个文件从某位置复制到另一位置
语法:object.CopyFile "source", "destination"[, overwrite]
参数:source必选项。表示指定文件的路径。组成部分中可用通配符。
destination必选项。表示目标位置路径
overwrite可选项。Boolean 值表明是否覆盖现有文件。如果是 True,则覆盖文件;如果是 False,则不覆盖现有文件。默认值是 True
示例:将 c:\test.txt文件复制到D:\下
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用CopyFile复制文件到另一个位置,False不覆盖已存在文件
Fso.CopyFile "c:\test.txt","D:\",False
'True覆盖已存在文件
Fso.CopyFile "c:\test.txt","D:\",True
示例:将 c:\下所有的txt文件复制到D:\下
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用*.txt,可以同时将多个文件复制到另一个位置,False不覆盖已存在文件
Fso.CopyFile "c:\*.txt","D:\",False
'True表示覆盖已存在文件
Fso.CopyFile "c:\*.txt","D:\",True
MoveFile
描述:将一个或多个文件从某位置移动到另一位置
语法:object.MoveFile source, destination
参数:source必选项。要移动的文件的路径。组成部分中可用通配符。
destination必选项。指定路径,表示要将文件移动到该目标位置。
destination 参数不能包含通配符。
示例:将 c:\test文件夹移动到D:\下
Dim Fso
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用MoveFile移动文件到另一个位置
Fso.MoveFile "c:\test.txt","D:\"
GetBaseName
描述:获取文件当前所在文件夹
语法:object.GetBaseName Path
参数:Path必选项。文件路径名。
示例:获取”c:\test.txt”文件名称
Dim Fso
Dim GetBaseName
'创建FileSystemObject对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'使用GetBaseName获取文件的文件名称
GetBaseName = Fso.GetBaseName("c:\test\test.txt")
MsgBox GetBaseName '输出test
11.excel新建
像多数office产品一样,Excel通过其COM接口提供自动化操作方法。
Excel对象模型:
11.1新建、保存、退出Excel工作表:
Dim exlapp,exlworkbook,exlworksheet
'创建Excel对象实例
Set exlapp = CreateObject("Excel.application")
'新增一个工作簿,Add方法返回对它的引用,可以用来操作工作簿
Set exlworkbook = exlapp.Workbooks.Add
'新增一个工作表,Add方法返回对新增工作表的对象引用
Set exlworksheet = exlworkbook.Worksheets.Add
'更新A1单元格的内容
exlworksheet.Cells(1,1) = "Hello,Test"'也可写成 exlworksheet.Cells(1,"A") = "Hello,Test"
'保存新建工作表,这里使用SaveAs方法,因为此工作簿从未被保存过;如果原来存在,则使用Save方法
exlworkbook.SaveAs "D:\learning\vbs\1\testexcel.xls"
'关闭工作簿
exlworkbook.Close
'关闭之前打开的Excel实例,结束进程
exlapp.Quit
'最后销毁所有对象引用
Set exlapp = Nothing
Set exlworkbook = Nothing
Set exlworksheet = Nothing
结果:
11.2 excel与fso对象判断Excel是否存在
创建前判断Excel是否存在,需要用到FileSystemObject对象来查看文件是否存在
Dim exlapp,exlworkbook,exlworksheet
Dim fso,exlexist,sSourceFile
'源文件
sSourceFile = "D:\learning\vbs\1\test1.xls"
Set fso = CreateObject("Scripting.FileSystemObject")
Set exlapp = CreateObject("Excel.application")
'判断文件是否存在
exlexist = fso.FileExists(sSourceFile)
If exlexist Then
'如果文件存在,则打开此文件
Set exlworkbook = exlapp.Workbooks.Open(sSourceFile)
Else
'如果文件不存在,则新建
Set exlworkbook = exlapp.Workbooks.Add
End If
'新增一个工作表,Add方法返回对新增工作表的对象引用
Set exlworksheet = exlworkbook.Worksheets.Add
'更新A1单元格的内容
exlworksheet.Cells(1,1) = "Hello,Test"'也可写成 exlworksheet.Cells(1,"A") = "Hello,Test"
If exlexist Then
'保存新建工作表,如果原来存在,则使用Save方法
exlworkbook.Save
'保存新建工作表,如果从未被保存过,则使用SaveAs方法
Else
exlworkbook.SaveAs sSourceFile
End If
'关闭工作簿
exlworkbook.Close
'关闭之前打开的Excel实例,结束进程
exlapp.Quit
'最后销毁所有对象引用
Set exlapp = Nothing
Set exlworkbook = Nothing
Set exlworksheet = Nothing
结果:
11.3使用EXCEL作为UFT的输出数据表
CompareMode 属性 - VBScript 用户指南 - 文江博客 (wenjiangs.com)
object.CompareMode[ = compare]
参数:
object:必选项。Dictionary 对象的名称;
compare:可选项。如果提供此参数,compare 参数为数值,表示由函数如 StrComp 使用的比较模式。
compare 参数设置如下:
Constant | Value | Description |
---|---|---|
vbBinaryCompare | 0 | 执行二进制比较. |
vbTextCompare | 1 | 执行文本比较. |
12.UFT对象导入导出
UFT中,有时候会出现多个模块 存在一样的对象情况,这时候就可以将对象导出到本地,作为公共对象以供调用,这样做的好处就是可以节约资源。步骤如下:
对象导出:
1、从Object Repository ->选择“文件夹”->“导出本地对象”,并删掉该对象库中的所有对象->将 被导出的“对象文件”保存到本地;
对象导入:
2、在UFT脚本编辑器中,使用repositoriescollection.RemoveAll 语句删掉所有残余对象;
3、在UFT脚本编辑器中,使用repositoriescollection.Add"公共对象文件路径",如 repositoriescollection.Add"c:\testtsr.tsr",特地说明,对象库文件是以tsr为后缀名的。
13.UFT自动化对象模型
AOM(Automation Object Model )
目的:用编程的方法控制测试用例的执行。
UFT与VbsEdit怎么联系到一起?
在VbsEdit里面打开Tools-Reference,点击Add,选择TypeLib,找到UFT安装目录下的bin-QTObjectModel.dll文件打开;
选择Prog ID,输入选择Quick Test.Application
举例:在Vbs.Edit里面编程使用AOM的方式来控制执行QTP/UFT脚本
Dim qtapp
'创建qtp对象
Set qtapp = CreateObject("quicktest.application")
qtapp.lunch '启动QTP
qtapp.Visuable = True '使UFT应用可见
'打开QTP/UFT脚本所在的路径
qtapp.open "C:\GUITest1"
qtapp.Test.Run '运行脚本
qtapp.Test.Close '关闭脚本
qtapp.quit '退出qtapp对象
Set qtapp = Nothing '释放资源
14.其他
Execute
用来动态执行任何定义在字符串内的内容。
Execute [statement] 在局部范围执行
Dim x
Execute "x=2"
MsgBox x
结果:2
ExecuteGlobal 在全局范围执行
在VBScript中,可以用ExecuteGlobal语句来在一个脚本文件中加载另外一个脚本的函数,例如,假设需要加载的是脚本Test.vbs:
Function Test1
Msgbox "Test1"
End Function
那么可以在脚本ExecuteGlobal.vbs中按下面的方式加载并调用Test1函数:
Set fso = CreateObject("Scripting.FilesyStemObject")
Str = fso.OpenTextFile("Test.vbs", 1).ReadAll
ExecuteGlobal Str
Set fso = Nothing
UFT:
Eval
Eval函数用来判断一个语句
Exit
Exit 语句的语法有以下几种形式:
语句 | 描述 |
---|---|
Exit Do | 提供一种退出 Do...Loop 语句的方法。只能在 Do...Loop 语句中使用。Exit Do 将控制权转移到 Loop 语句之后的语句。在嵌套的 Do...Loop 语句中使用时,Exit Do 将控制权转移到循环所在位置的上一层嵌套循环。 |
Exit For | 提供一种退出 For 循环的方法。只能在 For...Next 或 For Each...Next 循环中使用。Exit For 将控制权转移到 Next 之后的语句。在嵌套的 For 循环中使用时,Exit For 将控制权转移到循环所在位置的上一层嵌套循环。 |
Exit Function | 立即从出现的位置退出 Function 过程。继续执行调用 Function 的语句后面的语句。 |
Exit Property | 立即从所在的 Property 过程中退出。继续执行下面调用 Property 过程的语句。 |
Exit Sub | 立即从出现的位置退出 Sub 过程,继续执行调用 Sub 的语句后面的语句。 |