Windows下的“批处理”[转]

   如果你使用过UNIX上的Shell Script(命令解释器脚本),那么对Unix下的脚本编程一定深有感触。利用UNIX上的各种Shell Script,例如C-Shell、TCL/TK、Perl,UNIX管理员往往用一个脚本就可以完成你半天的编程才能完成的任务。

 

   但在微软的世界中一直没有够份量的类似东西出现,充其量我们只能写写简单的Batch File(就是DOS下的批处理命令),但它所提供的功能也太过于简单,无法处理复杂的事情。不过以前在DOS下还有Basic可以解一点燃眉之急,谁知道到了Windows 95以后连Basic都不复存在,让我们这些喜欢DIY的朋友们很不舒服。其实在Windows方便的操作界面下掩盖着更为强大的功能,你听说过WSH吗?它的全称是Windows Scripting Host,中文名字可以叫它Windows平台指令主机,就是它,让你通过威力强大的VBScript和JavaScript脚本,来实现强大的功能,再也不用羡慕UNIX平台下的各种Shell Script了……

 

   WSH的优点

 

   WSH可以在32位Windows平台上提供简单、威力强大以及具有弹性的指令环境。

 

   1.更有威力的指令系统

 

   在以前,Windows操作系统支持的唯一类似于脚本语言的是MS-DOS的批处理命令,虽然MS-DOS指令又快又小,但和VBScript及JavaScript相比,MS-DOS受到许多限制。今天,架构于ActiveX之上的WSH允许使用者利用威力强大的指令语言如VBScript与JavaScript,同时MS-DOS指令WSH仍可以支持,不过对于脚本语言来说,它只是很小的一个方面了。

 

   2. Windows脚本语言的执行环境

 

   以前的MS-DOS类的命令只可以在DOS下或者DOS窗口下使用,现在不一样了,Microsoft目前在 Windows平台上提供三种脚本语言的执行环境:

 

   WSH架构

 

   长久以来,Windows操作系统都缺乏一个真正的Shell程序功能,因此微软就针对了这个问题提出了WSH的架构,把解释程序语言的部分以及提供功能服务,像是显示信息、存取文件、或是读写注册表 (Registry) 等部分功能分开,解释的部分交给相应语言的解释引擎(Scripting Engine),而提供功能服务的部分就称为一个执行环境 (Scripting Host),WSH就是专为在Windows系统下执行这种服务程序的环境。

 

   刚才所讨论的解释与服务分开的方式就是微软的ActiveX Scripting架构,图1就说明了WSH的架构以及执行环境与解释引擎之间的关系,在这个图中,我们假设要执行Tentimes.vbs脚本,它的具体步骤是:

 

   先执行WSH(Windows 98带有字符模式的cscript.exe和图形界面的Wscript.exe),告诉它执行tentimes.vbs脚本,具体的命令行是:

 

   cscript tentimes.vbs或者wscript tentimes.vbs

 

   这是WSH会根据所要执行脚本的后缀名(VBS),到系统注册表中查询可以解释这种程序的解释引擎(Windows 98附有VBScript和JavaScript两种语言的解释引擎,你也可以自己安装其它语言的解释引擎,比如Perl)。

 

   找出解释引擎之后,WSH会将程序一行一行从脚本中读出,然后送到解释引擎,由解释引擎解释程序所要执行的动作。

 

   如果所要执行的动作必须要使用到WSH所提供的服务,例如存取文件或是注册表的内容,就向WSH提出要求,由WSH负责处理。

 

   通过这样的方式,不管你使用何种语言,只要有该语言的解释引擎,就可以在WSH下执行该种语言编写的程序,并且可以使用WSH所提供的服务。

 

   也许有的朋友要问:WSH是如何将这些服务提供给脚本语言呢?其实很简单,它其实相当于我们练习编程的那些函数(当然了,微软称它们为对象、属性和方法),通过这些接口实现脚本和操作系统的对话。好了,闲话少说,我们先来看看WSH到底有何神通……

 

   Windows 98/Me、Windowns NT+IIS和Windows 2000都已经附带有WSH(不用去找那些烦人的编程语言IDE^_^),,如果你用的是Windows 95或者你想将你的WSH更新到最新版本。没有问题,到微软的WSH站点下载一个就是http://msdn.microsoft.com/scripting/,当前的最新版本是5.5,不过你下载的时候可要看清楚语言版本,中文的一定要选择Chinese/Simplified,下载不一致的语言版本回来可是不能安装的。同时你还要选择适合自己操作系统的版本,Windows 2000和其它操作系统是不同的。另外如果你想好好看一下WSH的帮助文档(WSH的帮助文档可不是像Linux下都随软件带有,它是需要另外下载的),也可以到前边所说的网址下载一个可执行文件,安装以后在Program FilesMicrosoft Windows ScriptWSHdocs下找到一个WSH.chm的帮助文件,里面有WSH的详细说明,这个东西你可千万不能少了……

 

   WSH使用初探

 

   整个WSH中,Script语言都是以对象(Object)为基础在运作,讲到对象自然就会有所谓的方法(Method)和属性(Property)。所以要使用WSH的第一步就是建立一个对象,然后利用该对象的各种方法和属性,WSH提供以下几个对象:

 

   Script.Network:用来与网络沟通,通过它,你可以取得网络的各种信息,比如IP地址、网上邻居列表等等;

 

   WScript.Shell:与操作系统沟通,你可以通过该对象在桌面建立快捷方式、建立/删除注册表键值;

 

   Excel.Application:与Excel沟通,不但可以在Excel中显示WSH内容,而且可以用WSH存取Excel和显示图表。

 

   此外,WSH还可以显示一些窗口和捕捉鼠标的输入等等,这里就不再枚举,下边我们看看它具体是如何使用的:

 

   1.建立一个弹出窗口

 

   记得以前在所有的编程科目学习中,老师都会让我们编写一个Hello,World!的实例,这里我们先看看如何完成一个Hello,World的弹出窗口,打开记事本,输入以下代码,保存为PopUp.js,然后执行一下看看效果是否和图2一样。

 

  

 

   function showit(){

 

   var Message = "Hello, World!";

 

   var timeout = 0;

 

   var title = "Hello, World!";

 

   var buttons = 65;

 

   var rslt;

 

  

 

   var WS = WScript.CreateObject("WScript.Shell");

 

   rslt = WS.Popup(Message, timeout, title, buttons);

 

   if ( rslt == 2 ) {

 

   WScript.Quit;

 

   }

 

   }

 

   showit();

 

   2.显示网络信息(见图3)

 

   让我们看看如何显示使用者工作组、使用者姓名、和电脑名称,使用记事本建立network.vbs,内容如下:

 

   Set WSHNetwork = WScript.CreateObject("WScript.Network")

 

   '显示WSHNetwork object的properties

 

   MsgBox "使用者工作组: " & WSHNetwork.UserDomain & Chr(13) & Chr(10) & "使用者姓名: " & WSHNetwork.UserName & Chr(13) & Chr(10) & "电脑名称 : " & WSHNetwork.ComputerName, vbInformation + vbOKOnly, "WSHNetwork 内容"

 

   3.桌面快捷方式的建立

 

   'Shortcut.vbs

 

   Set WSHShell = WScript.CreateObject("WScript.Shell")

 

   '使用SpecialFolders读取桌面路径

 

   DesktopPath = WSHShell.SpecialFolders("Desktop")

 

   '于桌面上建立快捷方式

 

   Set Shortcut1 = WSHShell.CreateShortcut(DesktopPath & "记事本.lnk")

 

   '设定快捷方式的属性并保存

 

   Shortcut1.TargetPath = WSHShell.ExpandEnvironmentStrings("%windir% otepad.exe")

 

   Shortcut1.WorkingDirectory = WSHShell.ExpandEnvironmentStrings("%windir%")

 

   Shortcut1.WindowStyle = 4

 

   Shortcut1.IconLocation = WSHShell.ExpandEnvironmentStrings("%windir% otepad.exe, 0")

 

   Shortcut1.Save

 

   4.WSH与Excel沟通(见图4)

 

   让我们看看如何在Excel中显示WSH内容,使用记事本开启excel.vbs,内容如下:

 

   Set objXL = WScript.CreateObject("Excel.Application")

 

   objXL.Visible = TRUE

 

   objXL.WorkBooks.Add

 

   objXL.Columns(1).ColumnWidth = 20

 

   objXL.Columns(2).ColumnWidth = 30

 

   objXL.Columns(3).ColumnWidth = 40

 

   objXL.Cells(1, 1).Value = "属性名称"

 

   objXL.Cells(1, 2).Value = "值"

 

   objXL.Cells(1, 3).Value = "描述"

 

   objXL.Range("A1:C1").Select

 

   objXL.Selection.Font.Bold = True

 

   objXL.Selection.Interior.ColorIndex = 1

 

   objXL.Selection.Interior.Pattern = 1 'xlSolid

 

   objXL.Selection.Font.ColorIndex = 2

 

   objXL.Columns("B:B").Select

 

   objXL.Selection.HorizontalAlignment = &hFFFFEFDD ' xlLeft

 

  

 

   Dim intIndex

 

   intIndex = 2

 

   '显示WScript properties

 

   Call Show("Name", WScript.Name, "应用程序名称")

 

   Call Show("Version", WScript.Version, "应用程序版本")

 

   Call Show("FullName", WScript.FullName, "应用程序内容: 完整名称")

 

   Call Show("Path", WScript.Path, "应用程序内容: 只有路径")

 

   Call Show("Interactive", WScript.Interactive, "互动模式状态")

 

   '显示命令行参数

 

  

 

   Dim colArgs

 

   Set colArgs = WScript.Arguments

 

   Call Show("Arguments.Count", colArgs.Count, "指令列引数数目")

 

   For i = 0 to colArgs.Count - 1

 

   objXL.Cells(intIndex, 1).Value = "Arguments(" & i & ")"

 

   objXL.Cells(intIndex, 2).Value = colArgs(i)

 

   intIndex = intIndex + 1

 

   objXL.Cells(intIndex, 1).Select

 

   Next

 

  

 

posted on 2009-01-05 23:58  starspace  阅读(377)  评论(0编辑  收藏  举报

导航