精华内容
下载资源
问答
  • 1.概述  Windows Script Host...除此之外,还可以实现一些DOS没有的命令功能,通过CScript xxx.wsf /?来查看帮助文档,帮助文档由WSF声明并由解释器动态生成完整的文档。再联合使用WshEnvironment对象,即可对DO...

    1.概述

      Windows Script Host除了提供一个对象模型之外,还提供了一种脚本框架,这就是WSF脚本。通过WSF约定的标记元素,可以将多种脚本语言写的代码块组合起来,完成任务。除此之外,还可以实现一些DOS没有的命令功能,通过CScript xxx.wsf /?来查看帮助文档,帮助文档由WSF声明并由解释器动态生成完整的文档。再联合使用WshEnvironment对象,即可对DOS命令,随心所欲的提供增量功能实现了。

    2.WSF标记

    元素 语法 属性 备注
    <?job?>
    <?job error="flag" debug="flag" ?>
    error=>布尔值;默认值false;当error="true"时,就允许 Windows脚本(.wsf)文件中存在语法错误或运行时错误。
    Debug=>布尔值;默认值false;当debug="true"时,就启用调试,出错时,将启动脚本调试程序。
    父元素<job>
    <?XML?>
    <?XML version="version" [standalone="DTDflag"] ?> 
    version=>n.n形式,指定文件的XML级别。默认值1.0。
    DTDflag=>可选,布尔值;指明 XML 文件中是否包括对外部文档类型定义 (DTD) 的引用。脚本组件 XML 文件不包括这样的引用,因此该属性值始终是 "yes"。 
    可选,须放于第一行。通过不用,否则,脚本中的大于号和小于号,将被错误处理
    <description> <description>text</description> text=>文本【可多行】,用于描述脚本用途,即用法文档的第一行 父元素<runtime>
    <example> <example>text</example> text=>文本,用于提供简单的脚本调用示例 父元素<runtime>
    <job> <job [id=JobID]>code</job>  JobID=>作业id,须是合法标识符,且在当前程序中惟一 只有一作业的wsf脚本,无需父元素<package>,可以很多个
    <named> <named name = namedname helpstring = helpstring
      type = "string|boolean|simple"   required = boolean/>
    name=>字符串;参数名,将传入Wscript.Arguments.Named中
    helpstring=>文本;此参数的说明文档。WSH运行时使用ShowUsage()或 /? 来获取这里定义的参数文档。
    type=>可选。限定参数的类型,参数的类型定义如何从命令行分析参数。默认值为simple;string即字符串,boolean用+/-表示true/false;simple时,没有value,如"dir /b"这个"b"命名参数,就是无值的
    required=>可选,布尔值;指明某个参数是否必需的。
    父元素<runtime>,可以很多个
    <object>
    <object id="objID" [classid="clsid:GUID" | progid="progID"] />
    objID=>合法惟一的标识符。用于引用脚本中该对象的名称。
    GUID=>可选。对象的类 ID (GUID)。
    progID=>可选。对象的程序 ID,可指定它来替换类 ID。
    父元素<job>,如<obect id="fso" progid="Scripting.FileSystemObject"/>,脚本中就可直接使用fso,而不用再声明此对象;可以是很多个
    <package> <package>jobs</package>  jobs=>一个或多个<job>元素 当有多个作业(Job)时,必须使用
    <reference>
    <reference [progid="progID"|guid="typelibGUID"] [version="version"] />
    progID=>
    可以派生出类型库的程序ID。它可以包含一个版本号(例如,ADO.Recordset.2.0),即类型库的显式程序 ID,也可以包含与类型库合并的可执行文件(如 .DLL)的程序 ID。如果使用对象属性,就无需指定版本属性,因为可从程序 ID 中推断版本。如果指定了对象属性,就不能同时指定 GUID 属性。
    typelibGUID=>要引用的类型库的 GUID。如果指定了 GUID 属性,就不能指定对象属性。
    version=>可选。要使用的类型库的版本号。它的形式必须为 <主要版本>[.<次要版本>]。如果未指定版本,则默认版本为 1.0。如果对象属性用于指定类型库,且未指定版本,则版本会从指定程序 ID 的注册表项中派生。如果未找到任何信息,则默认版本为 1.0。 
    父元素<job>,可以有很多个,一个job的引用,在另一个job的代码中不可见
    <resource> <resource id="resourceID">textornumber</resource> resourceID=>脚本中资源的唯一标识符,内容是文本或数字 可以有很多个,父元素<job>,一个job的资源,在另一个job的代码中不可见
    <runtime> <runtime>
       <description>text<description>
       <named attributes etc. />
       <unnamed attributes etc. />
       <example>text</example>
    </runtime>
      ShowUsage()使用由 <runtime> 元素括起来的信息,以便显示脚本的运行时参数。父元素<job>
    <script> <script language="language" [src="strFile"]>code</script>  language=>声明用于脚本块中的脚本语言名称,如 VBScript 或 JavaScript。
    strFile=>要包括在脚本块中的脚本文件名,如c:\\a.js
    父元素<job>,可以有很多个,语言不必相同
    <unnamed> <unnamed name = unnamedname
    helpstring = helpstring
     many = boolean required = boolean/ integer/>
    name=>用于在用法中表示该参数的字符串。该值不用在别处。
    Helpstring=>此参数的说明文档。WSH运行时使用ShowUsage()或 /? 获取参数文档
    many=>可选,布尔值。如果为true,则该参数重复的次数可以比由required属性指定的次数多;否则,required属性正好表示要使用所需参数的次数。
    Required=>可选。指明该参数在命令行中出现次数的整数值。 
    当设置“必需”属性时,布尔值将被转换成整数;"true" 变成 1,而 "false" 变成 0。可以有很多个。比如<unnamed name="filename" helpstring="..." many="false" required="true" />生成文档example.wsf filename;比如<unnamed name="filename" helpstring="..." many="false" required="3" />生成文档example.wsf filename1 filename2 filename3
    <usage> <usage>text</usage> text=>用于替代WSH根据<runtime>元素中其它元素动态生成的文档 父元素<runtime>

    3.自定义命令行工具示例

     1 <package>
     2     <job id="js">
     3         <resource id="dbpath">C:\Users\nutix\Desktop\Persons.xml</resource>
     4         <object id="fso" progid="Scripting.FileSystemObject" />
     5         <object id="xml" progid="MSXML2.DomDocument" />
     6         <object id="ws" progid="WScript.Shell" />
     7         <runtime>
     8             <description>Write the base information of a person to the database</description>
     9             <named name="name" helpstring="name of person." type="string" required="true" />
    10             <named name="sex" helpstring="sex of person." type="string" required="true" />
    11             <named name="age" helpstring="age of person." type="string" required="true" />
    12             <unnamed name="note" helpstring="note of person" many="false" required="false" />
    13             <example>Test.wsf /name:"John Smith" /sex:Male /age:32 "Got some trouble!"</example>
    14         </runtime>
    15         <script language="JScript">
    16             var argsNamed = WScript.Arguments.Named;
    17             var argsUnnamed = WScript.Arguments.Unnamed;
    18             WScript.Echo("There are " + argsNamed.length + " named arguments:");
    19             for(var e=new Enumerator(argsNamed);!e.atEnd();e.moveNext()){
    20                 var name=e.item();
    21                 WScript.Echo("['"+name+"']="+argsNamed.Item(name));
    22             }
    23             WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments:");
    24             for(var i=0;i<argsUnnamed.length;i++){
    25                 WScript.Echo('['+i.toString()+']:'+argsUnnamed.Item(i));
    26             }
    27             WScript.Echo("There are " + WScript.Arguments.length + " arguments in total:");
    28             for(var e=new Enumerator(WScript.Arguments);!e.atEnd();e.moveNext()){
    29                 WScript.Echo(e.item());
    30             }
    31             WScript.Arguments.ShowUsage();
    32             //==============================================================
    33             var argsNeeded=new Array('name','sex','age');
    34             for(var i=0;i<argsNeeded.length;i++)
    35                 if(!argsNamed.Exists(argsNeeded[i])){
    36                     WScript.Echo('Error: Full information is needed, like name, sex, age.');
    37                     WScript.Quit();
    38                 }   
    39             dbpath=getResource('dbpath');
    40             if(!fso.FileExists(dbpath)){
    41                 xml.loadXML('<?xml version="1.0" encoding="utf-8"?><Persons />');
    42                 xml.save(dbpath);
    43             }
    44             //--------------------------------------------------------------
    45             xml.load(dbpath);
    46             var doc=xml.documentElement
    47             var person=xml.createElement('Person');
    48             var nameAttr=xml.createAttribute('name');
    49             nameAttr.text=argsNamed.Item('name');
    50             person.setAttributeNode(nameAttr);
    51             var sexAttr=xml.createAttribute('sex');
    52             sexAttr.text=argsNamed.Item('sex');
    53             person.setAttributeNode(sexAttr);
    54             var ageAttr=xml.createAttribute('age');
    55             ageAttr.text=argsNamed.Item('age');
    56             person.setAttributeNode(ageAttr);
    57             if(argsUnnamed.length!=0&&argsUnnamed.Item(0)!='')
    58                 person.text=argsUnnamed.Item(0);
    59             doc.appendChild(person);
    60             xml.save(dbpath);
    61             //--------------------------------------------------------------
    62             ws.Run('Notepad.exe "'+dbpath+'"');
    63         </script>
    64     </job>
    65     <job id="vbs">
    66         <script language="VBScript">
    67             WScript.Echo getResource("dbpath")
    68         </script>
    69     </job>
    70 </package>

    执行“Test.wsf /?”的结果如下:

     1 Write the base information of a person to the database
     2 用法: Test.wsf /name:value /sex:value /age:value [note]
     3 
     4 选项:
     5 
     6 name : name of person.
     7 sex  : sex of person.
     8 age  : age of person.
     9 note : note of person
    10 Test.wsf /name:"John Smith" /sex:Male /age:32 "Got some trouble!"

    第1行,最前一行直接显示<description>的内容

    第2行,由WScript.exe或CScript.exe根据<runtime>元素的各个子元素提供的信息,动态生成的调用方式

    第6-9行,是由WScript.exe或CScript.exe根据<runtime>元素的各个<named>/<unnamed>元素提供的信息,生成的参数说明,即<参数名>:<description>

    第10行,最后一行直接显示的是<example>元素的内容。

    因为note参数required="false",所以它不是必须的,所以上面的文档中显示的是"[note]"而不是"note"

    在命令窗口中执行以下的命令:

    cscript //nologo Test.wsf /name:"John Smith" /sex:Male /age:32 "Got some trouble!"

     

    输出:

     1 There are 3 named arguments:
     2 ['name']=John smith
     3 ['sex']=Male
     4 ['age']=32
     5 There are 1 unnamed arguments:
     6 [0]:Got some trouble!
     7 There are 4 arguments in total:
     8 /name:John smith
     9 /sex:Male
    10 /age:32
    11 Got some trouble!
    12 Write the base information of a person to the database
    13 用法: Test.wsf /name:value /sex:value /age:value [note]
    14 
    15 选项:
    16 
    17 name : name of person.
    18 sex  : sex of person.
    19 age  : age of person.
    20 note : note of person
    21 Test.wsf /name:"John Smith" /sex:Male /age:32 "Got some trouble!"

    第12-21行,是WScript.ShowUsage()方法的结果。

    可见,如果一个WSF脚本中包含多个<job>,而在调用时没有指定调用哪个job,就默认会执行第一个job的所有<script>块的代码。如果想调用第二个job,可以执行cscript //nologo //job:vbs Test.wsf,其结果如下:

    1 C:\Users\nutix\Desktop\test.wsf(68, 14) Microsoft VBScript 运行时错误: 无效的过程调用或参 数: 'getResource'

    显然这里无法访问//Job:js中的resource.

    4.组合不同语言的代码

    【1】通过<script>块的src引用外部代码

     1 <package>
     2 <job id="IncludeExample">
     3     <script language="JScript" src="GetFreeSpace.JS"/>
     4     <script language="VBScript">
     5         '获得驱动器 C 的可用空间。
     6         s = GetFreeSpace("c:")
     7         WScript.Echo s
     8     </script>
     9 </job>
    10 </package>

    GetFreeSpace.js的代码:

    1 function GetFreeSpace(drvPath) {
    2    var fs, d, s;
    3    fs = new ActiveXObject("Scripting.FileSystemObject");
    4    d = fs.GetDrive(fs.GetDriveName(drvPath));
    5    s = "Drive " + drvPath + " - " ;
    6    s += d.VolumeName;
    7    s += " Free Space: " + d.FreeSpace/1024 + " Kbytes";
    8    return s;
    9 } 

    【2】直接将不同语言的代码写进同一个WSF脚本文件中,这只需要使用多种语言的<script>块就行了。

    5.WSH文件,这是一种简单的配置文件,它的作用和脚本文件右键》属性》脚本选项卡的内容一样,可设置项很少很简单,下面是一个例子:

    1 [ScriptFile]
    2 Path=C:\Users\nutix\Desktop\a.js
    3 [Options]
    4 Timeout=0
    5 DisplayLogo=1
    6 BatchMode=0

    注意:Path指定的脚本文件必须存在,且可以被WScript或CScript解释执行。其它设置项:Timeout:设置超时时间,超时时自动终止执行,DisplayLogo:是否显示徽标,BatchMode:是否以批处理模式执行

     6.使用WSF替代VBS/JS的理由:

    【1】可联合使用VBS/JS的标准库

    【2】可更友好的支持命令行:可提供充足详实的命令行文档及调用控制

    【3】可方便地导入现有的代码模块

    【4】可更方便地对功能进行集成:借助<Job>元素

    【5】支持直接向网页的移植

    【6】更便利的跨语言的全局对象,只要不同语言的<Script>块处于同一个<Job>块中,这个块中的全局变量是跨语言公用的

    转载于:https://www.cnblogs.com/vitrox/p/5137441.html

    展开全文
  • 第4章 子程序设计和DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器...
  • 调用dos1_loop,它执行对角化以计算拉曼相关函数。 dos1_loop使用histwv_loop(自制的矢量化代码)来计算加权直方图。 输出I是对应于DOS和拉曼光谱的直方图单元。 它们也由函数绘制(请参见代码中I的
  • 第4章 子程序设计和DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器...
  • 8086/8088汇编语言程序设计教程

    热门讨论 2008-10-22 22:52:54
    第4章 子程序设计和DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器...
  • 现代操作系统第三版高清

    千次下载 热门讨论 2015-06-16 22:20:01
     11.1.2 20世纪90年代:基于ms-dos的windows 460  11.1.3 21世纪:基于nt的windows 460  11.1.4 windows vista 462  11.2 windows vista编程462  11.2.1 内部nt应用编程接口463  11.2.2 win32应用编程接口465 ...
  • 操作系统概念第六版翻译版

    热门讨论 2012-08-05 13:11:37
    第四部分I/O系统对I/O进行了深入的讨论,包括I/O系统设计、接口、内部结构与功能等。第五部分分布式系统介绍了分布式系统的一般结构以及连接它们的网络,讨论了分布存取策略、分布式文件系统及分布式系统中同步、...
  • 第四部分I/O系统对I/O进行了深入的讨论,包括I/O系统设计、接口、内部结构与功能等。第五部分分布式系统介绍了分布式系统的一般结构以及连接它们的网络,讨论了分布存取策略、分布式文件系统及分布式系统中同步、...
  • AkelPad-4.8.5-setup

    2014-01-12 10:04:46
    调用见 Scripts-Chs.txt),和实现更多功能…… ◎Scroll.dll: 拆分窗格或MDI窗口的水平/垂直的同步滚动、自动滚动操作; ◎Sessions.dll: 保存和恢复程序 MDI 会话; ◎SmartSel.dll: 选定文本时排除行尾标记,...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么?voidmain正确吗? 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件...
  • 01 网络基础和dos命令 02 为何学习linux 03 课程内容介绍 04 操作系统内核与系统调用 05 操作系统安装原理 06 linux操作系统安装 07 初识linux命令 08 linux操作系统目录结构 09 目录及文件操作 第4章 01 上节课...
  • 本书共分23章,内容涵盖了Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动...
  • 动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动程序 、虚拟串口驱动程序、摄像头驱动程序、SDIO驱动程序进行了详细的介绍,本书最大的特色在于每一节 的例子都是经过...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    Windows NT中的审核(Audit)事件简介 规划并实现审核策略 打开文件、文件夹及打印机的审核功能 使用事件查看器检查审核事件 安全性日志(Securty Log)的归档 使用服务器管理器查看正在使用的资源 断开用户与服务器的...
  • 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确定义是什么?void main正确吗? 15 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 15 ...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确定义是什么?void main正确吗? 15 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 15 ...
  • 在 Kohana中进行远程调用 ■使用Atom和 RSS Feeds 使用文件 使用数字 使用偏转器 国际化 设置和文件结构 如何设置默认语言 设置和检索语言字符中 翻译消息 多语言网站实例 使用ORM对象建模 ■OM实例 ③oRM概述(经由 ...
  • o 2.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。 o 2.9 main() 的正确定义是什么? void main() 正确吗? o 2.10 对于没有初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为 ``...
  • 《操作系统原理与设计》全本

    热门讨论 2012-02-14 15:54:16
    1.3.1 DOS操作系统 9 1.3.2 Windows操作系统 9 1.3.3 OS/2操作系统 10 1.3.4 Unix操作系统 11 1.3.5 Macintosh操作系统 11 1.3.6 MINIX操作系统 12 1.3.7 Linux操作系统 12 1.3.8 MACH操作系统 12 1.4 操作系统的...
  • OpenGL教程

    2012-05-25 19:29:48
     许多计算机公司已经把OpenGL集成到各种窗口和操作系统中,其中操作系统包括UNIX、Windows NT、DOS等,窗口系统有X窗口、Windows等。为了实现一个完整功能的图形处理系统,设计一个与OpenGL相关的系统结构为:其最...
  • 9 功能迁移  1. 10 计算环境  1. 10. 1 传统计算  1. 10. 2 基于Web的计算  1. 10. 3 嵌入式计算  1. 11 小结  习题一  推荐读物  第二章 计算机系统结构  2. 1 计算机系统操作  2. 2 I/O结构  2. 2. 1 ...
  • 2.3.1 MS-DOS头部 32 2.3.2 IMAGE_NT_HEADER头部 33 2.3.3 IMAGE_SECTION_HEADER头部 36 2.4 如何获取PE文件中的OEP 36 2.4.1 通过文件读取OEP值 37 2.4.2 通过内存映射读取OEP值 38 2.4.3 读取OEP值方法的...
  • ajax实战配套源代码

    2008-10-24 11:17:58
    07/7.4.3.html 给定时器调用传递参数范例 07/7.5.3.html 使用throw语句抛出异常范例 第8章 08/8.2.7.html 使用responseText获得返回的文本范例 08/8.2.8.html 使用responseXML属性获取范例 08/8.2.9....
  • 07/7.4.3.html 给定时器调用传递参数范例 07/7.5.3.html 使用throw语句抛出异常范例 第8章 08/8.2.7.html 使用responseText获得返回的文本范例 08/8.2.8.html 使用responseXML属性获取范例 08/8.2.9....
  • 07/7.4.3.html 给定时器调用传递参数范例 07/7.5.3.html 使用throw语句抛出异常范例 第8章 08/8.2.7.html 使用responseText获得返回的文本范例 08/8.2.8.html 使用responseXML属性获取范例 08/8.2.9....

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

dos功能调用模型