Skip to content

2. VBSCRIPT的运行环境

2.1. 简介

vbscript程序并非直接在Windows系统下运行,而是运行在一个为其提供运行环境及若干专属对象的容器中。此外,该VBScript程序还可以使用Windows系统提供的对象,这些对象被称为ActiveX对象。

在本文中,我们将使用两个容器:通常称为 WSH 的 Windows Scripting Host,以及下文有时称为 IE 的 Internet Explorer 浏览器。此外还有许多其他容器。 例如,MS-Office 应用程序就是 VB 的一个衍生容器,称为 VBA(Visual Basic for Applications)。 此外,还有许多 Windows 应用程序允许用户突破其限制,通过开发在应用程序内部运行并使用该应用程序特有对象的程序来实现。

VBScript程序运行的容器起着至关重要的作用:

  • 容器向 VBScript 程序提供的对象因容器而异。例如,WSH 为 VBS 程序提供了一个名为 WScript 的对象,该对象可访问主机上的网络共享和打印机。 而 IE 则向 VBS 程序提供了一个名为 document 的对象,该对象代表正在查看的整个 HTML 文档。 VBS脚本程序随后即可对该文档进行操作。Excel 则向 VBA 程序提供了一系列对象,这些对象分别代表工作簿、工作表、图表等……实际上涵盖了 Excel 所处理的所有对象。
  • 虽然容器中的对象赋予了 VBScript 程序强大的功能,但有时也会限制其某些操作范围。例如,出于安全考虑,在 IE 浏览器中运行的 VBScript 程序无法访问主机磁盘。

因此,在讨论 VBScript 编程时,必须明确程序在哪个容器中运行。

在 Windows 系统中,VBScript 并非 WSH 或 IE 容器中唯一可用的语言。 例如,可以使用 JScript(=JavaScript)、PerlScript(=Perl)、Python 等。乍看之下,这些语言似乎都优于 VBScript。但 VBScript 却拥有显著优势:

  • VB及其变体VBSCRIPT和VBA在Windows系统中非常普遍。掌握这种语言似乎必不可少。
  • 程序的强大之处,更多在于其可用的对象,而非所使用的语言本身。而其中许多对象是由运行环境(容器)提供的,而非语言本身。

VBSCRIPT的一个缺点是,它无法移植到Windows以外的系统上,例如Unix。而其竞争对手JavaScript、Perl、Python则具备这一特性。如果需要在异构系统上工作,在不同系统上使用相同的语言可能很有价值,甚至不可或缺。

2.2. WSH 容器

WSH(Windows Scripting Host)容器允许在Windows环境中执行用多种语言编写的程序,包括vbscript、javascript、perlscript、python等。若要在WSH中使用某种语言,必须符合相关标准。 任何符合该标准的语言均可作为在 WSH 中执行的候选语言。可以预见,此前列出的可在 WSH 中执行的语言列表可能会进一步扩展。 容器为所执行的程序提供了赋予其真正强大功能的对象。这往往会消除语言之间的差异,因为它们都使用同一组对象。因此,选择使用某种语言而非另一种,可能仅仅是个人偏好问题,而非性能问题。

在 WSH 中,程序的执行依赖于两个可执行文件:wscript.execscript.exe。 wscript.exe通常位于Windows安装目录中,该目录通常名为%windir%


C:\ >echo %windir%
C:\WINDOWS

C:\>dir c:\windows\wscript.exe
WSCRIPT  EXE       123 280  19/09/01  11:54 wscript.exe

L'exécutable cscript.exe se trouve lui sous %windir%\command :

C:\>dir c:\windows\cscript.* /s

Répertoire de C:\WINDOWS\COMMAND
CSCRIPT  EXE       102 450  26/06/01  17:49 cscript.exe

wscript 中的 w 表示 windows,而 cscript 中的 c 表示 console。 脚本既可以通过 wscript 也可以通过 cscript 执行。两者的区别在于屏幕上消息的显示方式:

  • wscript 会在一个窗口中显示
  • cscript 将其显示在屏幕上

以下是一个名为 coucou.vbs 的脚本,它会在屏幕上显示 coucou

Image

打开一个名为 DOS 的窗口,并依次与 wscriptcscript 一起执行:


DOS>wscript coucou.vbs

Image

DOS>cscript coucou.vbs

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

coucou

从上文可以清楚地看到这两种模式之间的区别。在本文档中,我们将几乎完全使用控制台模式 cscript。该模式适用于所谓的“批处理”应用程序,即无需用户通过键盘进行交互的应用程序。在上述结果中,有两点值得注意:

  1. 我们假设可执行文件 wscript.exe 和 cscript.exe 均位于该机器的“PATH”目录下,因此只需输入其名称即可运行。若非如此,则需在此处输入:
DOS>c:\windows\wscript coucou.vbs
DOS>c:\windows\command\cscript coucou.vbs
  1. 请注意,本示例及本文后续内容中使用的 wsh 版本为 5.6。
  1. 脚本源文件的后缀为 .vbs。该后缀代表 vbscript 脚本,而 javascript 脚本则由后缀 .js 标识。

程序 cscript 具有多种启动选项,可通过不带参数地运行 cscript 来获取:

DOS>cscript

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

Utilisation : CScript scriptname.extension [option...] [arguments...]

Options:
//B          批处理:隐藏脚本提示和错误信息
//D          启用调试
//E:engine   使用引擎执行脚本
//H:CScript 将默认脚本运行环境替换为 CScript.exe
//H:WScript 将默认脚本运行环境替换为 WScript.exe (默认)
//I          交互模式(默认,与选项 //B 相反) 
//作业:xxxx     执行任务 WSF
//Logo       显示徽标(默认)
//Nologo     禁止显示徽标:在运行期间不显示任何横幅
//S          为该用户保存当前的命令行选项
//T:nn       运行时长(秒):脚本执行的最大允许时间 
//X          在调试器中运行脚本

参数 //nologo 可隐藏 wsh 标题栏:

C:\>cscript //nologo coucou.vbs
coucou

2.3. WSH 脚本的格式

我们刚刚看到第一个脚本:coucou.vbs

Image

我们提到该文件的后缀 .vbs 代表脚本 vbscript。但这并非强制要求。我们本可以将脚本放入后缀为 .wsf 的文件中,采用如下更复杂的形式:

Image

执行该脚本后,结果如下:

C:\>cscript //nologo coucou2.wsf
coucou

一个名为 WSH 的脚本可以混合使用多种语言:

Image

执行此脚本后,结果如下:

1
2
3
4
C:\>cscript //nologo coucou3.wsf
coucou (vbscript)
coucou (javascript)
coucou (perlscript)

我们需注意以下几点:

  1. 容器 WSH 未与任何语言相关联。WSH 脚本可以在后缀为 .wsf 的文件中混合使用多种语言
  2. 此时脚本由 <job id="..."> ... </job> 标签包围
  3. 在应用程序(即 job)内部,不同代码段所使用的语言通过 <script language="...."> .... </script> 标签进行标记
  4. 这种标记语言有一个名称:XML,即eXtended标记语言。XML并未定义任何标签,而是定义了标签的布局规则。 因此,这里应说明WSH脚本中使用的标记语言遵循XML标准。

此后,我们在 .vbs 文件中将仅使用 vbscript。

2.4. WSCRIPT 对象

容器 WSH 为其执行的脚本提供了一个名为 wscript 的对象。一个对象具有属性和方法

一个 Obj 对象具有 Pi 属性,这些属性确定了它的状态。因此,一个 thermomètre 对象可能具有一个 température 属性。该属性是温度计状态的一个方面。 另一个属性可能是它所能承受的最高温度 Tmax

对象 Obj 可能具有方法 Mj,这些方法允许外部代理:

  • 获取其状态
  • 更改其状态

因此,如果我们的温度计是电子的,它可能有一个方法 allumer 用于启动它,另一个 éteindre 用于关闭它,还有另一个 afficher 用于在达到平衡温度时显示该温度。 在编程术语中,方法是一种可以接受参数并返回结果的函数。

在 VBScript 中,对象 Obj 的属性 Pi 表示为 Obj.Pi,方法 Mj 表示为 Obj.Mj。 WSH 中的 wscript 对象是一个重要的对象,因为它为脚本提供了多种方法。例如,其 echo 方法可用于显示一条消息。该方法的语法如下:

wscript.echo arg1, arg2, ..., argn

argi 参数的值随后将显示在窗口中(通过 wscript 执行)或屏幕上(通过 DOS 下的 cscript 执行)。

2.5. Internet Explorer 容器

上文提到 Internet Explorer 可以作为 VBScript 的运行环境。下面通过一个简单示例来演示。以下是一个名为 coucou2.htm 的 HTML(HyperText 标记语言)页面,该页面不包含 VBScript。

21

Image

通过 Internet Explorer 直接加载该页面(Fichier/Ouvrir)会得到以下结果:

coucou2.htm文件的内容表明,HTML是一种标记语言。 了解 HTML 语言,就是了解这些标签。这些标签的主要目的是指示浏览器如何显示文档。HTML 虽未完全遵循 XML 标准,但与之非常接近。

coucou2.htm 中,有两项标记为 1 和 2 的信息需要呈现。我们在生成的显示效果中也相应地呈现了这些信息。 正是 <title>...</title> 标签将信息 1 放置在浏览器的标题栏中,而 <body>..</body> 标签则将信息 2 放置在浏览器的文档区域中。

我们不再深入探讨HTML语言。现在,让我们修改文件coucou2.htm,在其中引入一个VBScript脚本,并将该文件重命名为coucou1.htm

Image

该 VBScript 脚本被放置在 <head>...</head> 标签中。它本可以放置在其他位置。页面初次加载时,它会显示“coucou”。此处浏览器必须是 Internet Explorer,因为只有该浏览器默认支持 VBScript 脚本。最终显示效果如下:

Image

随后是页面的正常显示:

Image

执行的脚本如下:

Image

虽然容器 WSH 向脚本提供了一个名为 wscript 的对象,该对象可通过其方法 echo 进行显示, 而在此处,IE 向脚本提供了一个名为 window 的对象,该对象可通过 alert 方法进行显示。 因此,要显示“coucou”,需在 WSH 中写入 wscript.echo “coucou”,并在 IE 中写入 window.alert “coucou”。 这里还可以说明,实际上可以在容器 IE 中使用多种语言。我们再次使用之前在 WSH 中展示的示例,将其嵌入到页面 coucou3.htm 中:

Image

当 IE 加载此页面时,首先会显示三个信息窗口:

随后显示最终页面:

Image

2.6. WSH的帮助

WSH 附带的帮助系统通常位于“C:\Program Files\Microsoft Windows Script\ScriptDocs”文件夹中。 对于 WSH 的 5.6 版本,帮助文件名为“SCRIPT56.CHM”。只需双击该文件即可访问帮助。在桌面上创建一个快捷方式会比较方便。

启动后,界面如下所示:

Image

其中不仅包含WSH容器的帮助文档,还包含VBScript和JavaScript语言的帮助文档。无论是初学者还是资深程序员,这都是不可或缺的工具。使用该帮助文档有多种方式:

  • 如果不太清楚要查找什么,只想浏览现有内容,可以使用上方的 Sommaire 标签页。例如,可以查看 VBScript 的相关内容:

Image

在 VBscript 的帮助文档中,您将发现许多本文档未提及的信息。

  • 如果您想查找具体内容,例如如何使用 VBscript 中的 msgbox 函数,请使用 Rechercher 选项卡:

Image

帮助系统将显示所有与搜索词相关的条目。通常,最相关的条目会优先显示。本例中,第一个显示的条目正是您要找的。只需双击该条目,即可查看其详细信息:

Image