日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

WSF脚本详解:JS和VBS互调用

發布時間:2023/12/29 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 WSF脚本详解:JS和VBS互调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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
utixDesktopPersons.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
utixDesktop	est.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
utixDesktopa.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>塊中,這個塊中的全局變量是跨語言公用的

總結

以上是生活随笔為你收集整理的WSF脚本详解:JS和VBS互调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色三级片毛片 | 一级黄色影院 | 欧美日韩综合视频 | 伊人久久大香线蕉 | 五月的婷婷 | 91av视频网 | 中文无码熟妇人妻av在线 | av噜噜色 | 国产黄大片在线观看画质优化 | 男人的天堂视频在线观看 | 日韩av一区在线 | 国产叼嘿视频在线观看 | 九九久视频 | 高潮流白浆在线观看 | 神马久久影院 | 青青在线免费观看 | 久久久久久国产精品三区 | 狠狠躁天天躁综合网 | 欧美xxxx69| 亚洲xxx视频 | 亚洲综合精品国产 | 欧美精品在线播放 | 免费一区二区三区视频在线 | 亚色在线 | 懂色av一区二区三区免费观看 | 丁香婷婷综合激情 | 丰满人妻一区二区三区免费 | 免费日皮视频 | 中文字幕免费高清视频 | 日韩久久免费视频 | 毛片毛片毛片毛片毛片毛片 | 男人添女人囗交视频 | 麻豆传媒在线观看视频 | 四虎永久免费地址 | 噜噜狠狠狠狠综合久久 | 致单身男女免费观看完整版 | 欧美群交射精内射颜射潮喷 | 日本色妞 | 欧美中文字幕视频 | 亚洲精品五月天 | 高h免费视频| 青草视屏 | 自拍偷拍精品 | 男人的天堂97 | 国产情侣一区二区三区 | 91精品成人 | 国产无码精品合集 | 国产免费一区二区三区在线观看 | 日韩美女在线视频 | 男人视频网站 | 三级av免费看 | 色欧美在线| 午夜视频在线免费看 | 怡红院男人天堂 | 激情啪啪网 | 精品资源成人 | 九一亚色 | 农村老熟妇乱子伦视频 | 制服丝袜成人动漫 | 夜夜草网站 | 久久久久久国产精品免费 | 日产精品久久久 | 综合视频一区 | 日本一级片免费看 | 日韩在线免费观看视频 | 国产av天堂无码一区二区三区 | 婷婷午夜精品久久久久久性色av | 伊人一区| 农民人伦一区二区三区 | 欧美视频一二三 | 国产一区二区三区在线观看视频 | 少妇熟女一区 | 亚洲人吸女人奶水 | 亚洲精品一区二区三区四区五区 | 麻豆传媒在线视频 | 久久久男女 | 黄色激情毛片 | av中文字幕不卡 | 丁香花国语版普通话 | www.成人av.com | 91丨porny丨九色 | 欧美黄色a视频 | 天堂色区 | 加勒比精品 | 视频免费在线观看 | 警察高h荡肉呻吟男男 | 国产偷人| 茄子爱啪啪 | 日本深夜福利 | 青春草在线视频观看 | 丁香久久综合 | 黄色激情网站 | 不卡的av电影 | 热逼视频 | av三级| 中文精品久久久久人妻不卡 | 美国爱爱视频 | 亚洲精品.www | 国产精品伦一区二区三级古装电影 |