分享
 
 
 

Windows下的“批处理”

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

如果你使用过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 Files\Microsoft Windows Script\WSHdocs下找到一个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%\notepad.exe")

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

Shortcut1.WindowStyle = 4

Shortcut1.IconLocation = WSHShell.ExpandEnvironmentStrings("%windir%\notepad.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

Sub Show(strName, st

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有