VBS_Basic

记录一些与 VBS 相关的东西。

什么是 VBS

VBScript 是微软出品的脚本语言,是 ASP(Active Server Pages)默认使用的脚本语言。
VBS 是一个动态脚本语言,也是 VB 的轻量版本,IE 使用 VBS 的地方比较多(好像只有 IE 支持了😂),这应该也是今后的工作内容了。

VBS 的第一个例子

Internet Explorer 支持 VBScript,所以可以在 IE 浏览器中执行 VBS 脚本。

注意由于新版 IE 也已经不再支持 VBScript 了,所以要在前端执行 VBScript 脚本就必须使用老版本的 IE(😓这技术栈也太老了吧)。
比如:

1
2
3
4
5
6
7
8
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
document.write("Hello World!")
</script>
</body>
</html>

以上面这段代码为例,编辑保存为 HTML 文件,再用 IE 打开无法直接显示,需要打开 IE 的开发者模式,将文档模式改为小于 10 才能显示...
换句话说,最新的 IE11 已经不支持 VBScript 了,IE10 及以下版本才能正常显示...
这个真的太老了吧,我怎么感觉我在给地级市、县级市的银行 ATM 机写代码...
扯远了...

如何使用 VBS

话说回来,看来用到 VBS 的场景主要就是在 IE 浏览器上就一些与用户交互的事情了?
也就是说,实际上就是往网页里面写脚本🤣,用的还不是 JavaScript 这种用的多的脚本语言,用的还是 VBS 这种...

在 HTML 中,<script>用来向 HTML 中插入 VBScript。换句话说,写好的 VBS 脚本必须写在<script></script>,并且需要使用type属性来定义脚本语言的类型为text/vbscript。另外,需要注意的是,vbscript 是不区分大小写的,是否需要大小写要按照工作要求来定。

VBS 输出

当 VBScript 被用在 Web 服务器上的 ASP 页面时,语句response.write()产生输出;当使用 IE 来测试时,语句document.write()来产生输出(这点好像与 JavaScript 是类似的)。不同类型的变量在输出时需要用到&""符号,比如:

1
2
3
Dim name
name="xxx"
document.write("My name is:"&name)

简而言之,字符串需要用""括起来,&用来连接两个不同的变量。

VBS 变量

VBScript 使用Dim关键字来声明(创建)一个变量,注意大小写,比如:

1
2
3
Dim x
Dim carname
carname="Volvo"

有时可能会写错变量的名字,如carname写成carnime,此时脚本会自动创建一个carnime的变量。为了避免不必要的错误,可以在脚本的顶端写上:Option Explicit,比如:

1
2
3
Option Explicit
Dim carname
carname=value

这样脚本就只能使用声明后的变量了。
Dim声明的变量既可以赋数字,也可以赋为字符串。

VBS 数组

用法类似 C 语言,如下:

1
2
3
4
5
Dim names(2)
names(0)="Tove"
names(1)="Jani"
names(2)="Stale"
mother=names(0)

注意与 C 语言差异的地方在于,Dim names(2)中的数字为 2,表示数组的下标从 0 开始,因此该数组包含 3 个元素。
多维数组的声明方法也是类似的,比如声明一个 5 行 7 列的多维数组:

1
Dim table(4, 6)

再看下面多维数组的实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<body>
<script type="text/vbscript">
Dim x(2,2)
x(0,0)="Volvo"
x(0,1)="BMW"
x(0,2)="Ford"
x(1,0)="Apple"
x(1,1)="Orange"
x(1,2)="Banana"
x(2,0)="Coke"
x(2,1)="Pepsi"
x(2,2)="Sprite"
for i=0 to 2
document.write("<p>")
for j=0 to 2
document.write(x(i,j) & "<br>")
next
document.write("</p>")
next
</script>
</body>
</html>

VBS 程序

VBScript 可使用两种程序:子程序和函数。

子程序

VBScript 中的子程序是一系列语句,被封装在SubEnd Sub语句内,可以执行某些操作,但是不会返回值,并且可以带有参数。比如:

1
2
3
Sub mysub()
some statements
End Sub

或者

1
2
3
Sub mysub(argument1, argument2)
some statements
End Sub

函数

VBScript 中的函数与 C/C++ 中的函数类似,执行一系列操作并返回结果,写法与子程序类似,将函数体封装在FunctionEnd Function之中就可以了。可以参考下面这个例子:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
Function myfunction(a, b)
myfunction = a + b
End Function
document.write(myfunction(5, 9))
</script>
</body>
</html>

VBS 条件

与其他程序语言类似,VBScript 使用IfThenElseElseIfSelect Case来作为条件控制语句,用法也是与其他语言类似的,直接看 3 个例子。
第一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
i = hour(time)
If i < 10 Then
document.write("Good Morning!")
Else
document.write("Have a nice day!")
End If
</script>
</body>
</html>

在上面的代码中,hour是 vbscript 自带的函数,返回一天中当前的小时数(0 - 23)。与 C/C++ 有差别的地方在于条件语句需要用End If来表示结束。
第二个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
i = hour(time)
if i = 9 then
document.write("Just started...!")
elseif i = 11 then
document.write("Hungry!")
elseif i = 12 then
document.write("Ah, lunch-time!")
elseif i = 17 then
document.write("Time to go home!")
else
document.write("Unknow")
end if
</script>
</body>
</html>

第三个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
d = weekday(Date)
document.write(d & "<br>")
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
</script>
</body>
</html>

相比 C/C++ 中的switch,这里不用写很多break是一件很不错的事情。不过说句题外话,为什么周二的数字要设置成 3 ?

VBS 循环

在 VBS 中,可以使用四种循环:For...NextFor Each...NextDo...LoopWhile...Wend

For…Next

For语句规定计数变量i以及它的初始值和结束值,Next语句会以 1 作为步进值来递增变量i。比如下面这个例子:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
for i = 0 to 5
document.write("The number is " & i & "<br>")
next
</script>
</body>
</html>

运行结果:

1
2
3
4
5
6
The number is 0
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

看来,0 to 5是从 0 到 5,得运行 6 次。如果为了在不改变边界条件的情况下,减少循环次数,可以使用Step关键字来完成,看下面这个例子:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
for i = 0 to 5 step 2
document.write("The number is " & i & "<br>")
next
</script>
</body>
</html>

运行结果:

1
2
3
The number is 0
The number is 2
The number is 4

对应的,当Step后的数字为复数时,就可以使循环变量递减了。
如果有时候要在循环运行到一定程度的时候退出循环呢?此时可以使用Exit For关键字,比如:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
for i = 1 to 10
document.write("The number is " & i & "<br>")
if i = 5 then exit for
next
</script>
</body>
</html>

运行结果:

1
2
3
4
5
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

For Each…Next

For Each...Next针对集合中的每个项目或者数组中的每个元素来重复运行某段代码,直接看下面这个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
dim cars(2)
cars(0) = "Volvo"
cars(1) = "Saab"
cars(2) = "BMW"
for each x in cars
document.write(x & "<br>")
next
</script>
</body>
</html>

Do…Loop

类似 C 语言的do-while,直接看例子:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<body>
<script type="text/vbscript">
i = 0
do while i < 10
document.write(i & "<br>")
i = i + 1
loop
</script>
</body>
</html>

运行结果:

1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9

总结

到这里为止,与 VBScript 相关的基础内容学习就算是完成了。接下来要做的事情,是做一些 VBS 实例,学习一下 VBS 的内建函数(可能就是以后的生产力工具)。


Buy me a coffee ? :)
0%