【windows 脚本系列】1. 第1章 Windows Script Host简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 第1章 Windows Script Host简介
在Windows 98之前的Microsoft Windows版本几乎不提供自动化的协助,例如备份文件或执行例行的系统管理工作。
您当然可以在M S-DOS模式窗口中使用旧的MS-DOS批处理文件(BAT)来完成某些工作,例如复制档案。
但是批处理文件只能够执行一连串简单的MS-DOS指令(其缺点包括了只有简单的条件分支和没有实际的循环功能等),并且也不支持对话盒和讯息盒。
在Windows 3.1里面,您可以透过Macro Recorder来记录并执行简单的击键和鼠标点按的动作,但他无法用来撰写程序。
使用者为了寻求较有效率的方式来处理这些自动化的工作而找上了第三方所提供的解决方案,例如PowerBatch或者像是Delphi、Microsoft Visual Basis和Visual C++这类的程序开发环境。
但是许多Windows的使用者很快地发现这些解决方案不合己意,因为他们既不简单易用也不是免费的。
因为Microsoft Office提供VBA(Visual Basic for Applications),以及因为网站的作者们都知道像是VBScript(Microsoft Visual Basic的描述语言版本)和网景的JavaScript这类的描述语言(Scripting Language),所以在Microsoft为Windows操作系统提供Script程序设计工具之前,这只不过是个时间早晚的问题罢了。
而这个工具正是Microsoft的Windows Script Host(WSH),属于Microsoft Windows Script技术的分支。
WSH是一种能够让您直接在操作系统层级执行Script档案的独立主机(Host)。
举例来说,您可以从命令行接口叫用Script或者在档案总管中双击Script。
WSH对于许多需要很少或者根本不需要接口的管理工作来说是相当便利的。
他远比旧的MS-DOS批处理文件好用,因为JScript和VBScript都是功能十分强大的描述语言,他们对于WSH对象和任何其他有效的自动化对象(Automation Object)都有完整的存取功能。
说明
在第2版之前,「Windows Script Host」称为「Windows Scripting Host」。
在本书中,将使用WSH来泛指这两个版本。
您能够用WSH Script来做什么
您可以在许多方面使用Script来自定义您的Windows系统。
这里有一些您能够使用Script来自动化的工作:
∙备份或复原您系统中的档案。
(如果您只是需要从您的机器上储存一些档案到网络服务器中的话,这种能力就显得特别方便。
)
∙藉由鼠标点按来关机或重新启动Windows。
您也可以使用Script来新增特别的关机或开机工作,例如在关闭应用程序后备份某些档案或是在开机完毕后记录用户的名称。
(在Windows 95和Windows 98中这种透过Script来记录信息的能力尤其有用;而在Windows NT和Windows 2000中,许多这
类的功能都是内建的。
)
∙整合应用程序与其数据。
举例来说,Script可以启动Office应用程序、加载并处理文件、打印、以及关闭应用程序。
以这种方式使用Script,您可以用任何您所选择的应用程序来「链接」文件。
∙管理系统所管理的工作,比如说在Windows NT和Windows 2000中新增、更新或移除使用者的账号。
您可藉由使用利用到Windows NT和Windows 2000中所提供的主动式目录服务接口(Active Directory Service Interface,ADSI)的WSH Script来自动化这些工作。
∙透过适当的对象直接存取Windows的Shell以建立快捷方式(Shortcut)或者映像(Map)如磁盘驱动器和打印机之类的网络装置。
∙读取环境变量(Environment Variable)或是取得有关Windows的信息。
∙启动程序并且控制自动化对象。
∙显示通知用户关于程序的状态或者读取用户输入的对话盒。
∙存取Windows的Shell和Windows的应用程序编程接口(Application Programming Interface,API)来控制Windows和其他应用程序。
有关VBScript和JScript的补充说明
与Windows 98和Windows 2000一起发布(以及供Windows 95和Windows NT 4使用的可下载版本)的WSH,都有内附VBScript和JScript这两种程序语言。
VBScript使用和Visual Basic一样的语法,他实际上就是Visual Basic的一个子集合。
而JScript则是Microsoft根据ECMAScript标准(ECMA为「欧洲计算机制造商协会」的缩写)实作的一种建构在JavaScript基础之上且与开发厂商无关(Vendor-Independent)的程序语言。
这两种程序语言都是您进入Script程序设计世界中的必备品。
但是,Microsoft为WSH设计了一个开放的接口以便第三方能够整合他们自己的语言引擎(Language Engine)来支持其他的语言,例如Perl、Tcl(Tool Control Language)、Rexx等。
升级到WSH 2
WSH 1首先是跟着Windows NT 4 Option Pack一起发布的。
WSH同时也是Windows 98的一部份,但是他并不会主动安装到您的机器上,您必须将其当作是附加的Windows组件来安装他。
而
WSH 2已整合到Windows 2000系统上,所以如果您使用的是Windows 2000的话,您将不需要再去安装他。
要检查您的系统中是否已经安装好WSH,您可以简单地浏览一下包含.js、 .vbs和.wsf档案的文件夹(例如使用档案总管)。
如果显示这些档案的图标(icon)与图1-1相同的话,即表示WSH 2已经安装好。
如果说.wsf的图标显示的是「未知的文件」类型,则表示WSH 1已经安装过了。
如果全部的图标都是显示为「未注册的档案」类型的话,就表示WSH尚未安装。
图1-1 Script档案的图示与扩展名
VBScritp vs. Visual Basic/VBA与JScript vs. JavaScript
如果您曾经用Visual Basic或VBA写过程序,或者曾经以VBScript或JScript在HTML文件中撰写Script,那么用VBScript或JScript写作WSH对您而言就应该不是什么大问题了,但是您必须记住下列几点:
∙Visual Basic的程序可以编译成EXE执行档,但是WSH却无此功能。
在WSH中,您所有的Script 都必须为扩展名是.vbs、.js或.wsf的纯文本档。
WSH会直接使用Windows指令引擎(Script
Engine)来直译Script的内容,所以您可以使用纯文本档的编辑器(如记事本)来撰写您的Script 程序。
∙与WSH一同发布的VBScript和JScript并不包含某些程序的结构,比如说在Visual Basic和VBA中允许存取外部函数和程序的Declare宣告叙述(Statement)。
还有VBScript并未包含处理延伸的执行时期错误(Run-Time Error)的例程(Routine),例如「On Error GoTo标记」的叙述。
同时VBScript和JScript都不支持明确的(Explicit)数据类型宣告,相反地,他们将所有的变量视为
Variant(一种能包含不同种类数据的特殊数据型态)。
∙WSH提供的对象模块(Object Model)与Internet Explorer提供的不同。
举例来说,WSH中的windows.document对象并不支持用户的输出。
∙因为WSH的环境不提供延伸的用户接口(类似Intenet Explorer中所提供的那样),所以WSH的对象模型没有开放任何用户接口的事件(Event),例如HTML Script中的onClick事件。
但是,
WSH支持事件处理(Event Handling)功能,关于这部分您将在后面的章节中看到。
要将Windows 95、Windows 98或Windows NT 4更新至WSH 2,您必须手动安装WSH。
随书光盘中包含每种操作系统的WSH 2版本。
您也可以
从h ttp:///taiwan/products/develop/scripting/default.htm网站免费下载最新版的WSH 档案。
说明
至于Windows NT 4的使用者,您还必须先安装Service Pack 3。
想要在Windows 95或Windows NT 4中使用WSH,您应该安装好Internet Explorer 4或以上的版本。
而要在Windows 95中以Internet Explorer 3来执行WSH 2,您还必须安装DCOM(Distributed Component Object Model,分布式组件对象模型)。
详细信息请参考台湾微软的网站:h ttp://e-
/relaunch/XML/%20/taiwan/products/develop/scripting/default.htm %20。
WSH与语言引擎的版本
您必须知道自己安装的是哪一种版本的WSH,以及用来执行这些Script的语言引擎的版本。
Microsoft从3.1版(与WSH 1一起发布)的升级开始便发表了好几种语言引擎。
3.1a版修正了几只臭虫(Bug)。
Visual Basic 6与第4版的语言引擎一同发布。
Internet Explorer 5包含第5版的语言引擎,其中修正了不少臭虫并且扩充语言的功能。
Microsoft还提供可下载的语言引擎第5版当作另一种升级的方式(网址是h ttp:///taiwan/products/develop/scripting/default.htm)。
WSH 2是Windows Script 5.1的一部份,该版本还包括了5.1版的VBScript和JScript的语言引擎。
而5.1版的语言引擎可以和Internet Explorer 4、5以及IIS(Internet Information Server)3、4等版本搭配使用。
建立并且使用Script
您已经准备好要建立并且使用您的第一支Script了吗?一开始,我们将以建立显示「Hello, world」讯息之对话盒的简单程序来让您看见Script程序设计的基本功能以及如何执行Script。
用VBScript建立您的第一支Script
建立如图1-2所示的简单对话盒,您只需要用VBScript打上一行:
WScript.Echo "Hello, world"
图1-2 简单的对话盒
那么您要如何建立Script档案呢?以这个简单的Script为例,您需要的只是记事本软件而已。
示范步骤如下:
1. 启动记事本并输入如图1-3所示的程序代码。
其中WScript.Echo叙述是这个程序中最重要的部分,
其主要功能是建立一对话盒。
图1-3 您的第一支VBScript程序
2.将编辑窗口中的内容储存为文本文件。
您可以使用任何的檔名(例如Hello),但是扩展名一定要
是.vbs。
说明
在此建议您使用.vbs做为VBScript档案的扩展名。
这个文件类型已经自动注册给WSH使用了。
如果您的Script档案使用的是其他的扩展名,那么将没有任何版本的WSH可以识别出他是用什么描述语言写的。
双按一个错误扩展名(比如说.vb)的Script将会启动开启档案... 的对话盒,因为没有应用程序注册给这个文件类型使用。
当您储存完这个Script之后,应该会有一个名为Hello.vbs的档案在您的硬盘中。
程序代码
如程序1-1 所示。
程序1-1 H ello.vbs
'*********************************************
' 档案:Hello.vbs (WSH sample in VBScript)
' 作者:(c) G. Born
'
' 显示简单的对话盒
'*********************************************
WScript.Echo "Hello, world"
'*** 程序结束
您或许会怀疑为什么这里使用8行程序代码而非之前所说的只需要1行指令就能叫用对话盒了呢?您只用1行程序代码就可以建立简单的Script档案是没错,但我鼓励您增加一些额外的信息做为批注,比如说您的姓名(程序的作者)和程序的目的等。
这些批注对于您和其他人来说都是很有帮助的。
(还是说您总是能够记住Script的目的和内容连续好几个礼拜呢?)其实指令引擎在执行时会略过所有的批注。
现在让我们回到程序代码。
因为我们是以VBScript当作程序语言,因此所有的叙述都必须遵守VBScript的语法。
在VBScript里面,批注是以单引号(')标示在行首的,例如:
' 这是单行批注
WSH中所使用的VBScript语言引擎会忽略一行之中跟随在单引号后面的任何部分。
这表示您可以批注一整行或者只是后半行。
举例来说,下面这个叙述显示一个包含「Hello, world」文字的对话盒。
而后半行的批注将会被忽略。
WScript.Echo "Hello, world" ' 显示讯息
说明
范例档案Hello.vbs以及本章所有其他会用到的范例档案都放在随书光盘的
\WSHDevGuide\Chapter01文件夹中。
您也可以在这个文件夹中发现样板(Template)档案VBScript.vbs和JScript.js。
您可利用这些档案当作样板来建立新的Script档案。
只要加载样板到您的编辑器中(藉由右击该档案的图示并从快捷菜单中选择编辑)、加入新的指令,然后把内容另存新档即可。
以JScript建立相同的Script
如果您比较喜欢用JScript来撰写您的Script程序,则您可以使用我们刚刚讨论过的相同步骤。
但是您必须将所有的叙述以JScript语法来输入。
程序1-2 显示从程序1-1 而来的程序代码在JScript 中的模样。
程序1-2 H ello.js
//*******************************************
// 档案:Hello.js (WSH sample in JScript)
// 作者:(c) G. Born
//
// 显示简单的对话盒
//*******************************************
WScript.Echo("Hello, world");
//*** 程序结束
在JScript中,单行的批注是由两个斜线(//)开始的,而多行的批注则是以「/*...*/」做为开始及结束。
程序1-2 包含了批注的头(前六行)和尾(最后一行)部分。
在此还是用WScript对象(Object)的Echo方法(Method)来显示讯息盒。
(您将在第3章中看到有关对象和方法的介绍。
)
建立包含「Hello, world」文字以及确定钮的简单对话盒的叙述在JScript中看起来有些不太一样:
WScript.Echo("Hello, world");
您看出哪里不同了吗?在JScript中,所有的叙述(除了少数例外)都以分号(;)结尾,这是一种很好的程序设计练习,而且Echo方法需要使用小刮号( ) 来围住「Hello, world」字符串。
执行WSH Script
如果您有以.vbs或.js扩展名储存的WSH Script,则您可透过在Windows中双击该Script的图示,或是用执行对话盒来执行,甚至您也能从命令提示字符窗口中执行他们。
在Windows中执行Script
在Windows中您只要双击Script的图示就能执行该Script。
Windows使用WScript.exe做为默认的指令主机(Script Host)来执行Script(因为在安装WSH的期间,文件类型已经注册给WSH)。
说明
有两个档案是专门用来实作WSH的。
WScript.exe是一个以Windows为基础的指令主机,可用来透过对话盒与使用者互动。
而CScript.exe则是一个Windows Console(控制台)应用程序。
(他是在命令提示字符窗口中执行的,并且会将输出传送给标准输出STDOUT,就像原始的MS-DOS 和Windows NT下的命令般。
)CScript.exe主要是用于非交互式的工作中。
在Windows 98中,WScript.exe是位在\Windows文件夹中,而CScript.exe则是位于\Windows\Command文件夹底下。
在Windows 2000里面,这两个指令主机都是放在\WINNT\System32文件夹中。
译注
指令引擎与指令主机
那么到底Script是如何运作的呢?这牵涉到两个重要的部分,首先是指令主机,他是一个由数种不同指令引擎所组合而成的应用程序。
而指令引擎则是每种不同语言的个别直译器。
举例来说,当我们执行一个Script程序时,我们可能是直接在该Script档案的图示上双击(此时使用的即是默认的指令主机WScript.exe),或是在执行对话盒中以「WScript.exe路径\Script文件名」或「CScript.exe路径\Script文件名」的方式执行(则此时使用的指令主机分别是WScript.exe或CScript.exe),然后指令主机再(根据扩展名)指定适合的指令引擎(例如VBScript的指令主机是vbscript.dll,而JScript的指令主机则是jscript.dll)来执行该Script。
我们来试试看这个。
首先在\WSHDevGuide\Chapter01中找到Hello.vbs,然后双击Hello.vbs来启动范例程序。
这个Script的结果就是前面图1-2显示的对话盒。
如果您双击的是Hello.js,那么执行结果的对话盒应该和图1-2显示的一模一样。
您可以按下他们的确定钮来结束对话盒。
您也可以在执行对话盒中以WScript.exe或CScript.exe来执行该Script。
(当您必须传送参数给Script时,这个方法就显得方便多了。
)示范步骤如下:
1. 从开始菜单中选择执行。
2. 在开启文本框中输入可执行的指令(例如「WScript.exe C:\Test\Hello.vbs」)。
3. 按下确定钮关闭对话盒并且执行该Script。
使用命令提示字符窗口来执行Script
您也可以使用命令提示字符窗口来执行Script。
CScript.exe和WScript.exe都支持这种方式。
要执行Script程序,您必须在命令提示字符窗口中输入下列的命令:
CScript.exe路径\Script文件名 [指令主机的选项] [Script的参数]
WScript.exe路径\Script文件名 [指令主机的选项] [Script的参数] 「Script檔名」部分是Script文件名的占位符,包括该Script的磁盘驱动器和路径名称。
您可以在命令行中附加额外的选项给指令主机并且/或者参数给Script。
「指令主机的选项」(用来开启或关闭WSH的功能)的前面总是跟着两个斜线(//)。
表1-1是所有指令主机选项的说明。
表1-1 CScript.exe和WScript.exe的指令主机选项
图1-4显示了示范在命令行中以几个选项呼叫Hello.vbs Script的窗口。
图1-4 几行呼叫CScript.exe和WScript.exe的命令
您可以使用「CScript.exe //?」命令以叫用指令主机显示所有指令主机选项的列表。
图1-5显示的是WScript.exe的选项。
(从开始菜单中选择执行,并输入「WScript.exe //?」,然后按下确定钮关闭对话盒。
)
图1-5 WScript.exe指令主机的选项
设定Script的属性
稍早曾提过,您可以在WScript.exe或CScript.exe中设定几个执行Script的指令主机选项。
在命令提示字符窗口中,您可在命令行输入选项。
如果您喜欢在Windows中执行Script的话,那么您可以使用执行对话盒来设定Script的指令主机选项。
使用者一般都比较喜欢以双击(Script档案本身或快捷方式档案)的方式来启动Script。
在这种情况之下,您可以在Windows中藉由右击该Script档案(从快捷菜单中选择内容,然后
在S cript 页次中选取您想要的选项)来定义额外的属性,如图1-6所示。
图1-6Script 页次的内容
您可以勾选在指定秒数之后,停止Script 复选框并且设定相关的逾时值。
如果当逾时时间已到而Script还在继续执行,那么Windows就会终止这个Script。
而当Script在命令提示执行时显示标志复选框则是会强制CScript.exe在命令提示字符窗口中显示「Microsoft (R) Windows Script Host...」的讯息。
当您按下确定钮关闭内容窗口后,Windows会建立一个相同档名但是扩展名为.wsh的新档案。
双击这个档案会强制Windows以Script页次中设定的选项来执行该Script。
扩展名为.wsh的档案是一种类似.ini档案的纯文本档。
您可以用任何一种文本编辑器(例如记事本)来开启.wsh档案。
.wsh档案的内容如下:
[ScriptFile]
Path=C:\WSHDevGuide\Chapter01\Hello.vbs
[Options]
Timeout=10
DisplayLogo=1
在 [ScriptFile] 区段中的「Path(路径)」叙述指到要执行的Script档案。
而 [Options] 区段中的关键词则是用来决定执行期间的属性。
「Timeout(逾时)」用来设定用户在S cript 页次中指定的时间(秒)。
而「DisplayLogo=1」则会强制在命令提示字符窗口中显示标志。
(请参考表1-1中
的//logo和//nologo选项的介绍)
说明
您可以修改.wsh档案中的「Path」叙述来使用相对的或通用命名约定(Universal Naming Convention,UNC)的路径。
使用相对的或者UNC的路径会使您的.wsh档案与其目标变得更具可移植性,因为这么做会将他从绝对路径(Absolute Path)的相依性中解放出来。
举例来说,范例档案Args.wsh使用「Path=.\Args.vbs」叙述来将Args.vbs档案参考到当前目录。
您可以把Args.wsh和Args.vbs搬移到新的磁盘驱动器上,而只要这两个档案放在同一个目录下,那么Args.wsh就会找到Args.vbs。
传送参数给Script
前面的范例都不需要任何的参数(Argument)。
然而在某些情况下,使用者会传送一或多个参数(例如某个档案的名称)给Script。
程序1-3中的VBScript程序代码会显示出所有传送给Script 的参数。
程序1-3 A rgs.vbs
'********************************************
' 档案:Args.vbs (WSH sample in VBScript)
' 作者:(c) G. Born
'
' 在对话盒中显示传送给Script的所有参数
'********************************************
text = "参数:" & vbCrLf & vbCrLf
Set objArgs = WScript.Arguments ' 建立对象
For i = 0 to objArgs.Count - 1 ' 用来通过所有参数的循环
text = text & objArgs(i) & vbCrLf ' 取得参数
Next
WScript.Echo text ' 使用Echo来显示参数
'*** 程序结束
传递参数的潜在问题
在我们继续深入探讨之前,在此指出一些参数传递的问题。
让我们假设您想要传递「Hello, world」参数给您的Script。
您不能够使用下面的命令,因为WSH会直译「Hello,」和「world」为分开的参数:
WScript.exe C:\WSHDevGuide\Chapter01\Args.vbs Hello, world
要传送包含空格符的字符串当作一个参数,您必须在参数的前后加上用双引号("),例如:WScript.exe C:\WSHDevGuide\Chapter01\Args.vbs "Hello, world"
当您传递参数给Script时还有另外一个问题可能会发生。
如果您的Script档案使用的是长文件名,您必须在此路径名称前后加上双引号。
举例来说,如果您使用下列的命令来执行档名为「Args Test.vbs」的Script,则奇怪的事情将会发生:
WScript.exe C:\WSHDevGuide\Chapter01\Args Test.vbs "Hello, world"
在Windows2000里面,您会得到一个「在"C:\WSHDevGuide\ Chapter01\Args"中,没有档案扩展名。
」的讯息。
而在Windows 95和Windows 98中,Script会执行,但是回报的是错误的参数。
这个动作起因于Windows如何处理命令行。
您可以藉由使用双引号围住包含空格符的长文件名来避免这种结果。
这行命令必须改写成下面这样:
WScript.exe "C:\WSHDevGuide\Chapter01\Args Test.vbs" "Hello, world"
以上这几行命令您也可以改用CScript.exe来试试看。
程序1-3中的Script取得WScript对象的Arguments集合(Collection),并且在对话盒中显示包含在这个集合中的所有参数,如图1-7所示:
图1-7 显示传送的参数
假设您有个Script档案,并且您想要传递一些参数给这个Script。
双击该Script是不够的,因为这样只会执行该Script而已。
要传递参数给Script,您应该从开始菜单中选择执行来显示执行对话盒(如图1-8所示)。
接着依序在开启文本框中输入指令主机名(CScript.exe或WScript.exe)、磁盘驱动器、路径名称、以及Script的檔名等。
最后参数被附加在命令行的后面,而且必须以空格符分隔开来。
图1-8 使用执行对话盒来传递参数给Script
若您觉得使用执行对话盒来传递参数很不习惯,您可以建立该Script的快捷方式并且将参数设定为此快捷方式的内容(只要参数不改变的话)。
示范步骤如下:
1. 右击该Script档案的图示,并从快捷菜单中选择建立快捷方式。
2. 右击该快捷方式档案,并从快捷菜单中选择内容。
3. 在快捷方式页次的目标文字字段中指定命令和参数(如图1-9所示)。
图1-9 Script档案之快捷方式页次的内容
当您按下确定钮关闭内容窗口时,Windows会储存这些参数。
当下次使用者双击该快捷方式档案时,这些参数便会自动传递给Script。
在命令提示字符窗口中传递参数
您的Script需要参数(例如档案的名称)吗?您是用命令提示字符窗口来执行您的Script(使用CScript.exe或WScript.exe)吗?除了指定指令主机选项(以两个斜线为首)之外,您还可以传送某些参数(比如说额外的Script选项)给Script。
您只要将Script的参数以空格键(Space)隔开放在命令行的后面即可。
您可以在命令提示字符窗口中像下面这样呼叫我们的Args.vbs范例,例如:
CScript.exe C:\WSHDevGuide\Chapter01\Args.vbs //S "Hello, world" 1 2 3 WScript.exe C:\WSHDevGuide\Chapter01\Args.vbs //S "Hello, world" 1 2 3 图1-10显示一些命令在命令提示字符窗口中使用CScript.exe执行的状况。
图1-10 在命令提示字符窗口中执行Script并且传递参数
说明
因为个别的参数都是非必要的,所以您起码得在命令行中指定Script的檔名。
您不需要将参数用斜线(在WSH的文件中是建议使用的)标示起来。
同时您可以将「//选项」与传递给Script的参数混用,例如图1-10中的第二行命令。
在图1-10中所使用的是显示在程序1-4中的JScript范例。
这个Script用Echo方法来显示传送的参数。
若您是用CScript.exe当作指令主机,那么Echo方法会把所有输出(都是一些Windows控制台程序的标准动作)传送到命令提示字符窗口中。
提示
您可以使用输出/输入重导(I/O Redirection)搭配Echo这个方法来将您的Script结果输出到档案中。
「CScript.exe D:\Test.vbs "Hello" 1 > D:\Test.tmp」命令会建立Test.tmp档案,并将Script所有的输出导向这个档案。
说明
另一个常用的导管(Pipe)技巧将留到第14章再做介绍。
程序1-4 A rgs.js
//******************************************
// 档案:Args.js (WSH sample in JScript)
// 作者:(c) G. Born
//
// 在对话盒中显示Script的参数
//******************************************
var objArgs;
var text = "参数:\n\n";
var objArgs = WScript.Arguments; // 建立对象
for (var i = 0; i < objArgs.length; i++) // 给所有参数用的循环
text = text + objArgs(i) + '\n'; // 取得参数
WScript.Echo(text); // 使用Echo方法来显示参数
//*** 程序结束
新的.wsf文件格式
虽然您可以在WSH 2中使用.vbs和.js Script档案,但是Microsoft定义了一种使用.wsf(意思是Windows Script File)为扩展名的新文件格式。
.wsf的档案跟.vbs和.js的档案一样都是文本文件,但是他包含了可扩充式标示语言(Extensible Markup Language,XML)程序代码。
.wsf的基本架构如下:
<job id="T1">
<script language="VBScript">
WScript.Echo "Hello, world"
</script>
</job>
这些标签(Tag)描述了XML的构成元素,而「<script>...</script>」部分则包含了普通的Script 程序代码。
说明
因为.wsf档案是XML文件,所以您可以使用任何支持XML的编辑器来编辑他。
如果您没有这样的编辑器,则您可以使用任何其他的文本编辑器(例如记事本)。
一些.wsf档案使用的XML延伸功能
之前的范例程序只包含了建立能够执行的.wsf档案所需要的最基本XML元素(Element)。
为了考虑与XML文件规格兼容性的缘故,建议您在.wsf档案中使用一些延伸的结构,例如:
<?xml version="1.0" encoding="ISO-8859-1"?>
<job id="T1">
<script language="VBScript">
<![CDATA[
text = "world"
WScript.Echo "Hello, " & text
]]>
</script>
</job>
<script>元素的内容被封进「<![CDATA[ ... ]]>」(用来告知XML文件阅读工具这些内容─即此处的Script程序代码─不应该被以XML的功能来解析)指令中。
而「encoding="ISO-8859-1"」属性则允许您的Script包含某些特殊西欧字母的字符,比如说德文中的日耳曼元音(例如「Ä」和「Ö」)以及法文的重音(例如「é」和「à」)。
说明
显示在辅助文件中的.wsf范例并没有使用「<?xml...?>」元素。
但建议您在本小节中使用这个指令,以便您的.wsf档案能够与XML工具以及WSH的后续版本兼容。
含入外部档案
如果您有之前WSH项目的.js和.vbs档案,那么您可以使用.wsf档案的结构在新的WSH Script 中含入(Include)这些档案。
您可以在开头的 <script> 卷标中使用src属性来参考到外部的.vbs或.js 档案。
下面的范例示范了在新的WSH Script档案Test.wsf中含入Hello.js档案:
<?xml version="1.0" encoding="ISO-8859-1"?>
<job id="T1">
<script language="JScript" src="Hello.js"/>
<script language="VBScript">
<![CDATA[
WScript.Echo "Hello, world number 2"
]]>
</script>
</job>
执行该Script时会导致WSH先去加载并处理Hello.js档案。
直到控制权回到.wsf档案后,包含WScript.Echo叙述的第二个 <script> 元素才会被执行。
而您也可以使用src属性来定义参考到只包含一个函数的Script档案。
然后您就能够从.wsf档案中呼叫在该Script中的函数了。
说明
如同您在之前的范例中所看到的,.wsf档案可让您组合不同语言的Script程序代码。
使用类型链接库
.wsf档案中的 <reference> 元素让您可以使用定义在Script之类型链接库(Type Library)中的常数。
下面的 <reference> 元素会从FileSystemObject对象的类型链接库中取得参考:
<reference guid='{420B2830-E718-11CF-893D-00A0C9054228}'/>
在定义了这样的参考之后,Script可以使用从类型链接库中汇出的已经命名过的常数。
下面的.wsf档案范例显示FileSystemObject对象中定义的磁盘驱动器类型常数:
<?xml version="1.0" encoding="ISO-8859-1"?>
<job id="TypeLibExample">
<reference guid='{420B2830-E718-11CF-893D-00A0C9054228}'/>
<script language="VBScript">。