一、VBS 简介

  • VBScript 是一种动态 脚本语言,是微软的编程语言Visual Basic 的轻量级版本。
  • VBScript 是 ASP(Active Server Pages) 默认使用的脚本语言。
  • Internet Explorer 支持 VBScript. 所以可以在 IE浏览器 中执行 VBScrip 。?

当VBScript 被插入一个 HTML 文档后,因特网浏览器会读取这个文档,并对 VBScript 进行解释。VBScript 可能会立即执行,也可能在之后的事件发生时执行。
VBScript 不应该被用作客户端脚本语言!

  • VBS 语言中 不区分大小写

  • VBS 语句以 换行 结束。

  • VBS 中的中文字符,文件以 UTF-8无BOM 格式保存,运行会出现错误(编译器错误: 未结束的字符串常量),改以 ANSI 保存就没有这个问题。(可以直接使用记事本保存为 ANSI 编码格式)

  • VBS 是一种变量无关、 解释性执行 的脚本,读取一行运行一行,如代码有错,运行至错误代码处才会报错停止。

  • VBS 编辑工具:可以直接使用电脑自带的记事本。编辑完成后将文件后缀名改为.vbs,保存后,直接双击文件即可运行。

  • 注释:使用 rem英文的单引号(') 放在一行开始位置,注释一行 VBS 代码。

  • VBS 常量定义:
    在VBScript中使用使用 Const 指令可以创建字符串型或数值型常量,并赋值。(注意,VBScript 中,变量的声明与赋值必须分开!)

      Const NAME = "Ethon" 
      Const AGE = 29
      '一般说来,常量名全部使用大写.
      '并且常量复制后,不可以对常量重新赋值,否则会报错(非法赋值)
  • 运算符:

    • 算术运算符:

      运算 整除 取余(%) 字符串连接
      符号 + - * / \ mod ^ &
    • 比较运算符:

      运算 等于 不等于 小于 大于 小于等于 大于等于 对象引用比较
      符号 = <> < > <= >= is
    • 逻辑运算符:

      运算 异或 等价 隐含
      符号 not and or xor eqv imp

二、VBS 变量

在 VBScript 中,只有一个基本数据数据类型 Variant,Variant中包含integer等子类型,可存储不同类型的数据。

  1. VBScript 变量名称的规则:

    • 必须以字母开头;
    • 不能包含点号(.);
    • 不能超过255个字符。
  2. 声明(创建)VBScript 变量:
    在 VBScript 创建变量通常指"声明"变量。声明多个变量时,用逗号分隔。

    1. 通过 Dim、 Public 或 Private 语句声明 VBScript 变量:
      Dim d
      Public pu
      Private pr
    2. 在脚本中直接使用一个新的名称来声明变量:
      nv = "nv is a new variable."
    3. 通常,不推荐使用方法二直接声明新变量,因为当我们把变量 "name" 错拼为 "nime" 时,脚本会自动创建一个名为 "nime" 的新变量,产生奇怪的错误,且不易排查。
      为防止脚本产生这种错误,可以将 Option Explicit 语句放置于脚本的 顶端 ,这样就必须使用 dim、 public 或 private 语句来声明所有的变量:
       option explicit
       private pr
       pr="private"
  3. 为变量赋值:
    注意, VBScript 中 变量声明赋值 必须分开 。不允许变量在声明的同时进行赋值。
    变量名是在表达式的左侧,需要赋给变量的值在表达式的右侧:

     '声明变量的同时进行赋值是错误的(报错:语句未结束)
     'dim i=5
    
     '变量的声明与赋值分开是正确的
     dim d
     d = 10
  4. 变量的生存期:
    变量的生存期指的是它可以存在的时长。

    • 当变量在一个子程序中被声明,变量只能在此程序内进行访问。当退出此程序时,变量也会失效。这样的变量称为 本地变量 。可以在不同的子程序中使用名称相同的本地变量,因为每个变量只能在声明它的程序内得到识别。
    • 如果在子程序以外声明了一个变量,在页面上的所有子程序都可以访问它。这类变量的生存期始于它们被声明,止于页面被关闭。
  5. VBScript 数组变量:
    数组变量用于在一个单一的变量中存储多个值。
    数组变量的声明使用变量名后跟一个括号()。

    • 一维数组 声明及赋值:

      Dim names(2)
      '括号内显示的数字是 2。数组的下标以 0 开始,因此该数组包含 3 个元素。这是容量固定的数组。
      
      '通过使用特定数组元素的下标号,为数组赋值
      names(0)="Tove"
      names(1)="Jani"
      names(2)="Stale"
      
      '通过使用特定数组元素的下标号,取出特定元素的值
      mother=names(0)
    • ***数组:

      '在括号中用逗号来分隔数字声明***数组。
      
      Dim table(4,6)
      '这里声明的是一个包含 5 行 7 列的 2 维数组'
      
      '在一个数组中可以使用多达 60 个维数。

三、VBS 程序

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

  • 子程序

    • 被封装在 Sub 和 End Sub 语句内的一系列的语句;

    • 可执行某些操作,但 不会返回值

    • 可带有参数。

      '一、无参的子程序
      Sub mysub()
        'some statements
      End Sub
      
      '二、带参的子程序
      Sub mysub(argument1,argument2)
        'some statements
      End Sub
  • 函数程序

    • 被封装在 Function 和 End Function 语句内的一系列的语句;

    • 可执行某些操作,并会返回值;

    • 可带有通过程序调用来向其传递的参数;

    • 通过向函数程序名赋值的方式,可使其返回值。(但并不阻止该函数程序继续运行)

      '无参的函数程序
      Function myfunction()
        'some statements
        myfunction=some value
      End Function
      
      '带参的函数程序
      Function myfunction(argument1,argument2)
        'some statements
        myfunction=some value
      End Function
  • 如何调用子程序或函数程序:

      Function myFunction()
          'some statements
          'msgbox "test"
          myFunction = "some value"
      End Function
    
      '1、取出函数的返回值
      name = myFunction()
    
      '2、使用函数的返回值
      msgbox "Your name is " & myFunction()
    
      Function func(num1, num2)
          func = num1+num2
      End Function
    
      '3、Call 语句
      Call func(11, 22)
    
      '4、省略 Call 语句
      func 11,12
      '注意,使用 Call 时函数名后需要加括号; 隐藏 Call 时,函数名后面不能加括号

四、VBS 条件语句

使用 “IF 判断条件” 开始条件语句,使用 “End If” 结束条件语句。
判断条件可以结合逻辑运算符(and、or等)使用,最终产生一个 布尔值 用于判断。
VBScript 中可以使用四种条件语句:

  • If...Then 语句
    在条件为 true 时执行一系列的代码。
    在执行的代码中只有一条语句时,可以把代码写为一行,并省略 End If 。

      Dim i
      i = 10
    
      '在条件为 true 时只执行一行语句,可以把代码写为一行
      If i=10 Then msgbox "Hello"
    
      '在条件为 true 时执行不止一条语句,则必须在一行写一条语句,然后使用关键词 "End If" 来结束这个语句
      If i=10 Then
          msgbox "Hello"
          i = i+1
      End If
  • If...Then...Else 语句
    在条件为 true 时执行某条语句,并当条件不为 true 时执行另一条语句。

      Dim i
      i = 10
    
      if i=10 then
         msgbox "Hello"
      else
         msgbox "Goodbye"
      end If
  • If...Then...ElseIf 语句
    选择多套代码之一来执行。

      if payment="Cash" then
         msgbox "You are going to pay cash!"
       elseif payment="Visa" then
         msgbox "You are going to pay with visa."
       elseif payment="AmEx" then
         msgbox "You are going to pay with American Express."
       else
         msgbox "Unknown method of payment."
      end If
  • Select Case 语句
    选择多套代码之一来执行。(使用 “Select” 开始,使用 “End Select” 结束。)

      select case payment
      case "Cash"
          msgbox "You are going to pay cash"
      case "Visa"
          msgbox "You are going to pay with visa"
      case "AmEx"
          msgbox "You are going to pay with American Express"
      '使用 case else 表示未与上述任何情况匹配时,执行的代码。
      case Else
          msgbox "Unknown method of payment"
      end select

易错点整理:

Dim a, b, c, d

'通过 inputbox() 方法输入的内容 a、b、c,都是字符串类型。
a=inputbox("please input the value of a")
b=inputbox("please input the value of b")
c=inputbox("please input the value of c")

'通过 a*1, b*1 的运算,变成数值类型
d=a*1+b*1

'通过 int() 方法,将 c 转换成数值类型再与 d 进行比较,不然数值型与字符串相比的结果永远是 False 。
'c=int(c)
if c=d then
    msgbox "Right"
else
    msgbox "Error"
end if

五、VBS 循环语句

循环语句用于运行相同的代码块指定的次数。
在 VBScript 中,我们可以使用四种循环语句:

  • For...Next 语句

    • 如果需要重复执行代码的 _次数已经确定_,那么可以使用 For...Next 语句来运行这段代码。

      'For 语句规定计数变量以及它的开始值和结束值。(这里开始值 1 ,结束值 10)
      For i=1 to 10
        msgbox i
        'some code
      Next
      'Next 语句会以 1 作为步进值来递增变量 i 。
    • Step 关键词:
      通过使用 Step 关键词,可以规定计数变量递增或递减的步进值。

      '这里通过 Step 关键词,设置计数变量 i 每次循环的递增步进值为 2 。
      For i=2 To 10 Step 2
        msgbox i
        'some code
      Next
      
      '如果要递减计数变量,就必须使用负的步进值。并且需要规定小于开始值的结束值。
      For i=10 To 2 Step -2
        msgbox i
        'some code
      Next
    • 退出 For...Next 循环:
      使用 Exit For ,可以退出 For...Next 语句。

      For i=1 To 10
        msgbox i
        If i=5 Then Exit For
        'some code
      Next
  • For Each...Next 语句
    针对集合中的每个项目或者数组中的每个元素来运行某段语句。

      Dim cars(2)
      cars(0)="Volvo"
      cars(1)="Saab"
      cars(2)="BMW"
    
      For Each x In cars
          msgbox x
      Next
  • Do...Loop 语句
    不知道重复多少次时,可以使用 Do...Loop 语句。
    当条件为 True时,Do...Loop 语句重复执行某段代码。

    • 使用 While 关键字来检查 Do...Loop 语句的条件。
      当 While 后的条件为 True 时,进入循环;为假时,退出循环。

        Dim i
        i=12
      
        '这里,当 i>10 为 True 时,进入循环;i=10 时,i>10 为 False,退出循环。
        Do While i>10
            msgbox i
            i=i-1
            'some code
        Loop
      
        msgbox "Loop1 is end, Loop2 will begin."
        i=12
        Do
            msgbox i
            i=i-1
            'some code
        Loop While i>10
        '将 While 放在最后可以保证 Loop 中的代码至少会运行一次
    • 使用 Until 关键字来检查 Do...Loop 语句的条件。(与 While 相反)
      运行 Do...Loop 语句中的代码,直到 Until 后的条件为 True 时,退出循环。

        Do Until i=10
            'some code
        Loop
      
        Do
            'some code
        Loop Until i=10
        '将 Until 放在最后可以保证 Loop 中的代码至少会运行一次
    • 退出 Do...Loop
      通过 Exit Do ,可以退出 Do...Loop 语句。

        Dim i
        i=5
        'Until 表明:当 i=10 时,退出循环
        Do Until i=10
            msgbox i
            'If语句表明:当 i<10 时,退出循环
            If i<10 Then Exit Do
            'some code
        Loop
        '综合来看,需要 i>10 时,才能运行循环中 If 语句之后的代码
  • While...Wend 语句
    不要使用这个语句,请使用 Do...Loop 语句代替它。

六、VBS 函数

  • inputbox(msg,"title","wow~")
    第一参数 msg 为显示语句,最大长度为1024;
    第二参数 title 为框体名称;
    第三参数 wow 为默认输入内容。
  • msgbox(prompt,buttons,title,helpfile,context)
    第一个参数 prompt 是要显示的字符串,最大为1024字符,如果换行用回车换行符组合 chr(13)&chr(10)
    第二个参数 buttons 是显示按钮值的参数,默认值为0;
    第三个参数 title 是标题(即窗口名称);
    第四个参数 helpfile 是字符串表达式,用于标识为对话框提供上下文相关帮助文件,如果提供了 helpfile ,则必须提供 context ;
    第五个参数 context 是数值表达式,用于标识某个帮助文件的编号,必须与 helpfile 一起使用。
  • asc(s) 返回s内第一个字母对应的ASCII码
  • chr(51) 将数字返回对应的字符
  • cbool() 返回表达式的boolean值
  • cByte() 将表达式转换为byte子类型的variant
  • cCur() 将表达式转换为currency
  • cdate() 将表达式转换为date
  • cdble() 将表达式转换为double类型
  • cint() 转换为integer
  • cLng() 转换为long
  • csng() 转换为single
  • cstr() 转换为string
  • isArray() 判断是否为数组,返回bool值;
  • isDate() 判断是否为日期,返回bool值;
  • isEmpty() 判断是否已初始化,返回bool值;
  • isNumeric()判断是否为数字,返回bool值;
  • isNull() 判断是否不包含有效数据,返回bool值;
  • isObject() 判断是否引用了有效对象,返回bool值;
  • len(() 返回字符串内的字符数或存储一变量所需要的字节数;
  • left(string,length)    返回从字符串左边算起的指定数目的字符;
  • mid(string,start,length) 从字符串中返回指定数目的字符;
  • right(string,length) 从字符串中返回字符,从右边开始
  • InStr(start,str1,str2) 返回str2在str1中第一次出现的位置,start表示开始搜索位置,为可选;
  • Lcase(str)   返回字符串的小写形式;
  • UCase(str)   返回字符串的大写形式;
  • split(separator) 分割字符串;
  • Date    返回当前日期;
  • Time    返回当前时间;
  • Now    返回日期和时间;
  • day(date)    返回日;
  • month(date)   返回月;
  • year(date)   返回年;
  • hour(time)   返回小时;
  • minute(time) 返回分钟;
  • second(time) 返回秒;
  • formatDateTime(date[,namedFormat]) 返回已格式化的时间
    namedformat可选参数有:
    vbGeneralDate (0)
    vbLongDate    (1)
    vbShortDate   (2)
    vbLongTime    (3)
    vbShortTime   (4)

VBScript 函数

isarray()
lbound()
ubound()

七、VBS 关键字

https://www.runoob.com/vbscript/vbscript-ref-keywords.html

八、常用代码示例

打开指定的可执行文件:

set ws=wscript.createobject("wscript.shell")
'ws.run "notepad.exe"
'当路径中存在空格时,使用一对 连续的三个""" 可以使路径有效