Windows下vbs脚本开发笔记

一、VBS 脚本概述

1.1 VBS 简介

VBS(VBScript)是 Microsoft Visual Basic Scripting Edition 程序开发语言 Visual Basic 家族的最新成员,它将灵活的脚本应用于更广泛的领域,包括 Microsoft Internet Explorer 中的 Web 客户机脚本和 Microsoft Internet Information Service 中的 Web 服务器脚本。

参考文档:https://www.jb51.net/shouce/vbs/vtoriVBScript.htm

1.2 VBS脚本解释器

VBS脚本 是由 C:\Windows\System32\wscript.exe 查询解释执行的,如果点击 VBS 脚本时提示找不到 执行查询 或 本机 C:\Windows\System32\wscript.exe 可从其它 Windows 系统机器上 copy 该程序到 C:\Windows\System32\ 目录下。

二、VSB脚本示例

2.1 常见用法

1
2
3
4
5
' 弹出消息提示框 显示消息
world="world!"
WScript.Echo "Hello " & world   ' & 连接符

MsgBox "Hello world!"

2.2 VBS 示例程序

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Dim curdate, dateStr, fso, file, strLine, searchString, logFile, finFlagFile, preDay

' 获取当前日期: Y/m/d  2024/1/2
curdate = date()
preDay = day(curdate)
dateStr = year(curdate) & "-" & right("00" & month(curdate), 2) & "-" & Right("00" & day(curdate), 2)     ' Y-mm-dd  2024-01-02

logFile = "E:\test1\test" & dateStr & ".log"    ' log 文件
finFlagFile = "D:\test1\test" & dateStr & ".log"    ' 成功(新创建的)标志文件

' WScript.Echo "logFile: " & logFile
' WScript.Echo "finFlagFile: " & finFlagFile

searchString = "state:finished progess:100%" ' 要搜索的字符串

Set fso = CreateObject("Scripting.FileSystemObject")
Do Until fso.FileExists(finFlagFile) Or (day(curdate) <> preDay)
    If fso.FileExists(logFile) Then
        Set file = fso.OpenTextFile(logFile, 1) ' 1 表示只读模式
        Do Until file.AtEndOfStream 
            strLine = file.ReadLine 
        Loop
        file.Close
        
        WScript.Echo "Last line: " & strLine
        If InStr(strLine, searchString) > 0 Then
            ' WScript.Echo "找到字符串: " & searchString
            ' 使用CreateTextFile方法创建一个新的文本文件
            ' 第一个参数是文件路径
            ' 第二个参素是可选参数,用于设置是否覆盖已存在的文件。True - 覆盖,False - 不覆盖
            Set file = fso.CreateTextFile(finFlagFile, True)
            file.WriteLine strLine    ' WriteLine 方法用于写入文本并在写入后添加换行符。
            ' 关闭文件
            file.Close
        Else
            WScript.Echo "Not String: " & searchString
        End If
    Else
        WScript.Echo "File not xists: " & logFile
    End If
    
    ' 暂停 1000 * 60 * 5 毫秒(即5分钟秒)
    WScript.Sleep 1000 * 5
    curdate = date()    ' 更新日期
Loop

' 清理对象以释放系统资源
Set file = Nothing
Set fso = Nothing

三、VBS 脚本设置计划任务定时执行

3.1 设置 Windows 任务计划

在 Windows 系统搜索 中 输入 任务计划程序 查找 或 在 Windows 管理工具中找到 任务计划程序 程序, 如下图

alt text alt text

点击打开 任务计划程序 管理器,如下图 alt text

点击右侧创建任务 或 创建 本地任务 按指引设置定时任务。

3.2 VBS 定时任务触发执行时弹出选择执行程序 问题

问题任务计划程序 触发脚本运行时将弹框提示下图 2 处所示提示框,提示 选择 如何打开文件。

alt text

设置好 VBS 定时任务后,单触发自动执行 或 如上图所示 1 处 点击 运行 后,弹出 2 处 所示 提示框,在电脑上 查找 C:\Windows\System32\wscript.exe 解释器 执行时,弹出 4 处所示错误提示框。

造成上述无法执行 VBS 脚本定时任务的原因是 VBS 脚本的 路径 中 存在 空格等 特殊字符,上图 5 处 的路径自动添加了 " 双引号所致。

处理方法:点击上图右侧 1 处下面的 导出… 按钮,将任务导出到 .xml 文件中,打开导出的 .xml 文件 将 <Command> </Command> 中的 脚本路径中的 " 双引号删除,如下代码所示:

1
2
3
4
5
6
  <Actions Context="Author">
    <Exec>
      <!-- <Command>"D:\test1\test script.vbs"</Command> -->
      <Command>D:\test1\test script.vbs</Command>
    </Exec>
  </Actions>

修改后保存文件,将原 任务删除后, 点击 上图右侧 1处 下面的 导人任务 按钮,选择刚才编辑的 .xml 文件 导入任务 即可成执行, 如下图: alt text