VBScript进阶篇

Posted 尹正杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBScript进阶篇相关的知识,希望对你有一定的参考价值。

                            VBScript进阶篇一

                                                             作者:尹正杰      

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

一.编译型与解释型的区别

其实我们通过一张图就可以大致了解一下,他们运行机制。

想要了解更多,请猛戳:http://www.cnblogs.com/yinzhengjie/p/6229931.html

 

二.WSH的介绍

  WSH是一个Windows管理工具。WSH创建了一个脚本运行的主环境,当脚本到达一台计算机时,WSH扮演主人的角色。WSH使脚本能够使用对象和服务,并提供脚本执行的准则。此外,WSH还负责安全管理以及调用适当的脚本引擎。WScript不属于脚本语言,他只属于脚本宿主提供的一个接口。其实cmd窗口也可以理解成一个脚本宿主而已,它是一个批处理宿主。

  独立的脚本有多种不同类型,每种类型都有其各自的扩展名。下表列出了一些常见类型:

扩展名脚本类型说明
.bat MS-DOS 批处理文件 MS-DOS 操作系统的批处理文件
.asp ASP 页 Active Server Page 文件
.html HTML 文件 Web 页
.js JScript 文件 Windows 脚本
.vbs VBScript 文件 Windows 脚本
.wsf Windows 脚本宿主文件 Windows 脚本的容器或项目文件;由 WSH 2.0 或更高版本支持。
.wsh Windows 脚本宿主文件 脚本文件的属性文件;由 WSH 1.0 或更高版本支持。

  每种脚本类型都适于不同应用程序的需要,并且各有利弊。您所选择的脚本类型取决于您的需要。但在某些情况下,可以将整个问题分成几个小部分,为每个部分单独编写脚本,每个脚本都使用最适当的脚本语言。

这时,Windows 脚本宿主文件(WSF 文件)非常有用。WSF 文件可以将其他脚本文件作为脚本的一部分包括在其中。因此,多个 WSF 文件可以引用有用的函数库,它们是在一个位置创建和存储的。

 

三.WSH在命令行执行VBS

WSH提供了两个用于执行脚本的接口,一个用于命令行,一个用于Windows环境。这两个接口各使用不同的宿主程序作为VBScript引擎:

  1>● cscript.exe:用于在命令行中(cmd窗口)运行脚本【在执行脚本时候打印的内容会在命令行中显示】;

  2>● wscript.exe:用于在Windows环境中运行脚本(指得是你用鼠标双击运行一个"*.vsb"脚本,会出现一个对话框)【在执行脚本时候打印的内容会弹出一个脚本宿主对话框的形式显示】;

  之所以有两个宿主程序,是因为cscript.exe被设计为从控制台窗口启动(一般来说是Windows中的MS-DOS窗口)其实就是我们工作中常用的cmd窗口,而wscript.exe则用于直接与Windows GUI进行交互。这两者就功能来讲几乎没有区别。

 

四.WScript对象

 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 \'提供对 Windows 脚本宿主对象模型根对象的访问。
 8 
 9 \'说明
10 \'WScript 对象是 Windows 脚本宿主对象模型层次结构的根对象。它从不需要在调用其属性和方法之前进行实例化,并且始终可在任何脚本文件中使用。WScript 对象提供对以下信息的访问: 
11 
12 \'命令行参数, 
13 \'脚本文件的名称, 
14 \'宿主文件名, 
15 \'宿主版本信息。 
16 \'WScript 对象可用来: 
17 
18 \'创建对象, 
19 \'连接对象, 
20 \'与对象断开连接, 
21 \'同步事件, 
22 \'以编程方式停止脚本的执行, 
23 \'将信息输出到默认输出设备(Windows 对话框或命令控制台)。 
24 \'WScript 对象可用来设置脚本运行的模式(交互模式或批处理模式)。
25 
26 \'属性:
27 \'WScript对象具有下列属性: 
28 \'● Arguments 
29 \'● FullName 
30 \'● Interactive 
31 \'● Name 
32 \'● Path 
33 \'● ScriptFullName 
34 \'● ScriptName 
35 \'● StdErr 
36 \'● StdIn 
37 \'● StdOut 
38 \'● Version 
39 
40 
41 \'方法:
42 \'WScript的方法 
43 \'WScript对象具有下列方法: 
44 \'● CreateObject 
45 \'● ConnectObject 
46 \'● DisconnectObject 
47 \'● Echo 
48 \'● GetObject 
49 \'● Quit 
50 \'● Sleep 

 

 

WScript属性详解:

 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 Dim  objArgs,i
 8 
 9 Set objArgs = WScript.Arguments \'将命令行整体看作一个参数
10 
11 For i = 0 To objArgs.Count -1 \'objArgs.Count表示统计在cmd中调用cscript宿主脚本执行当前脚本时候跟的参数,如果有三个参数是就是数字3,但是由于我们变了是从“0”开始计数的,所以到下表“2”的时候就已经是三个参数了,如果不减去“1”的话就会报错“运行时错误: 下标越界”
12     WScript.Echo "i = "& i & ";Item = "& objArgs.Item(i)
13 Next 
14 
15 
16 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
17 \'C:\\Users\\尹正杰>cscript C:\\Users\\尹正杰\\Desktop\\test.vbs dir /a /b
18 \'Microsoft (R) Windows Script Host Version 5.8
19 \'版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。
20 
21 \'i = 0;Item = dir
22 \'i = 1;Item = /a
23 \'i = 2;Item = /b
24 
25 \'C:\\Users\\尹正杰>
Arguments用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 Dim  objArgs,i,sum,s1,s2
 8 
 9 Set objArgs = WScript.Arguments \'将命令行整体看作一个参数
10 
11 s1 = objArgs.Item(0)
12 s2 = objArgs.Item(1)
13 sum = 0
14 For i = s1 To s2\'objArgs.Count表示统计在cmd中调用cscript宿主脚本执行当前脚本时候跟的参数,如果有三个参数是就是数字3,但是由于我们变了是从“0”开始计数的,所以到下表“2”的时候就已经是三个参数了,如果不减去“1”的话就会报错“运行时错误: 下标越界”
15     sum = sum + i
16 Next 
17 WScript.Echo ""& s1 & "" & s2 & "之间的整数之和为:" & sum
18 
19 
20 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
21 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs 1 100
22 \'从1到100之间的整数之和为:5050
23 
24 \'C:\\Users\\尹正杰>
利用Arguments计算2个数字之间的和
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 Dim  objArgs,i
 7 
 8 Set objArgs = WScript.Arguments \'将命令行整体看作一个参数
 9 
10 For i = 0 To objArgs.Count -1 \'objArgs.Count表示统计在cmd中调用cscript宿主脚本执行当前脚本时候跟的参数,如果有三个参数是就是数字3,但是由于我们变了是从“0”开始计数的,所以到下表“2”的时候就已经是三个参数了,如果不减去“1”的话就会报错“运行时错误: 下标越界”
11     WScript.Echo objArgs.Item(i) 
12 Next 
13 
14 \'这个脚本双击的时候不会报错,用法是需要你讲任意一个独享移动到这个脚本身上,然后会返回一个对话框,内容是你拖动的那个文件或目录的绝对路径
Arguments返回文件的绝对路径
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 WScript.Echo WScript.FullName \'返回主机可执行文件(CScript.exe 或 WScript.exe)的完全限定路径。
 8 
 9 
10 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下[cscript  /nologo,其中//Nologo表示不显示徽标:执行时不显示标志]:
11 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
12 \'C:\\Windows\\system32\\cscript.exe
13 
14 \'C:\\Users\\尹正杰>
FullName用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 WScript.Echo WScript.Interactive \'Interactive 属性返回一个布尔值即“0”或者“1”
 7 \'说明
 8 \'Interactive 属性返回一个布尔值。
 9 
10 \'有批处理和交互两种模式。在交互模式(默认模式)下,该脚本为用户提供交互功能。启用对 Windows 脚本宿主的输入和输出。该脚本可以将信息显示在对话框中并等待用户提供反馈。在批处理模式下,不支持这种类型的用户交互 — 所有对 WSH 的输入和输出被禁用。还可以使用 Windows 脚本宿主命令行开关 //I(对于交互式)和 //B(对于批处理模式)来设置脚本模式。
11 
12 \'示例
13 \'下面的 JScript 代码显示脚本模式。
14 
15 \'WScript.Echo WScript.Interactive;
16 \'下面的 JScript 代码将脚本模式设置为批处理。
17 
18 \'WScript.Interactive = false;
Interactive用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 
 8 WScript.Echo WScript.Name \'返回 WScript 对象(主机可执行文件)的名称。
 9 
10 
11 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
12 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
13 \'Windows Script Host
14 
15 \'C:\\Users\\尹正杰>
Name 用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 
 8 WScript.Echo WScript.Path \'返回包含主机可执行文件(CScript.exe 或 WScript.exe)的路径名称。
 9 
10 
11 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
12 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
13 \'C:\\Windows\\system32
14 
15 \'C:\\Users\\尹正杰>
Path 用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 
 8 WScript.Echo WScript.ScriptFullName \'返回当前运行脚本的完整路径。
 9 
10 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
11 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
12 \'C:\\Users\\尹正杰\\Desktop\\test.vbs
13 
14 \'C:\\Users\\尹正杰>
ScriptFullName 用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 
 8 WScript.Echo WScript.ScriptName \'返回当前运行脚本的文件名。
 9 
10 
11 
12 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
13 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
14 \'test.vbs
15 
16 \'C:\\Users\\尹正杰>
ScriptName 用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 Dim row_input
 8 row_input = "您输入一些字符串是>>>:" \'定义输出的值
 9 
10 WScript.Echo "请输入一些字符串:“  
11 Do While Not WScript.StdIn.AtEndOfLine
12     row_input = row_input & WScript.StdIn.Read(1) \'WScript.StdIn.Read(1)表示每次循环读取一个字符。
13 Loop
14 WScript.Echo  row_input \'打印拼接后的字符
15 
16 
17 \'注意:
18 \'StdIn 属性返回一个表示标准输入流的对象。只可在使用 CScript.exe 时访问 StdIn、StdOut 和 StdErr 流。如果试图在使用 WScript.exe 时访问这些流,则会出错。
19 
20 
21 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
22 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
23 \'请输入一些字符串:
24 \'您好
25 \'您输入一些字符串是>>>:您好
26 
27 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
28 \'请输入一些字符串:
29 \'尹正杰
30 \'您输入一些字符串是>>>:尹正杰
31 
32 \'C:\\Users\\尹正杰>
StdIn与AtEndOfLine用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 WScript.Echo WScript.Version \'返回 Windows 脚本宿主的版本。
 8 
 9 
10 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
11 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
12 \'5.8
13 
14 \'C:\\Users\\尹正杰>
Version 用法展示

 

WScript方法详解:

 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 WScript.Echo "当前的时间为:" & Time  \'打印当前时间
 8 
 9 WScript.Sleep 3*1000   \'睡眠3秒钟
10 
11 WScript.Echo "当前的时间为:" & Time
12 
13 
14 
15 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
16 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
17 \'当前的时间为:23:03:25
18 \'当前的时间为:23:03:28
19 
20 \'C:\\Users\\尹正杰>
21  
Echo与Sleep 的用法展示
 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 WScript.Echo "当前的时间为:" & Time  \'打印当前时间
 8 
 9 WScript.Quit  \'退出程序
10 
11 WScript.Echo "quit后面的语句:" & Time
12 
13 
14 
15 \'以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
16 \'C:\\Users\\尹正杰>cscript  /nologo  C:\\Users\\尹正杰\\Desktop\\test.vbs
17 \'当前的时间为:23:05:54
18 
19 \'C:\\Users\\尹正杰>
Quit 用法展示

 

五.WshShortcut对象

 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 Dim windows_shell,desktop,object_link
 8 
 9 Set windows_shell = CreateObject("WScript.Shell") \'创建一个对象(实例化)
10 desktop = windows_shell.SpecialFolders("Desktop") \'使用SpecialFolders方法获取桌面的路径
11 \'MsgBox desktop
12 Set object_link = windows_shell.CreateShortcut(desktop & "\\yinzhengjie_cmd.lnk") \'定义链接文件路径并且给他起了一个名字叫“yinzhengjie_cmd”,注意以“.lnk”结尾标志着链接文件哟
13 
14 object_link.TargetPath = "C:\\Windows\\System32\\cmd.exe" \'源文件链接的绝对路径
15 
16 object_link.WorkingDirectory = "C:\\Windows\\System32" \'源文件的工作路径,也就是他的所在目录(父目录)
17 
18 object_link.Hotkey = "" \'可以不写这个参数
19 
20 
21 object_link.save \'保存以上的配置,因为以上代码只是将数据加入到缓存中,并没有将数据写入磁盘中去,所以这个步骤是必须的!
22 
23 Set windows_shell = Nothing \'以上代码执行完毕后,需要释放掉内存地址。
24 Set desktop = Nothing
25 Set object_link = Nothing 
CreateShortcut用于创建一个快捷方式

 

六.WshEnvironment 对象

 1 Option Explicit
 2 \'@author :yinzhengjie
 3 \'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
 4 \'EMAIL:y1053419035@qq.com
 5 
 6 
 7 \'说明
 8 \'WshEnvironment 对象是由 WshShell 对象的 Environment 属性返回的环境变量集。该变量集包含整个环境变量集(有名称和没有名称的)。若要在此集合中检索个别环境变量(和它们的值),请将环境变量名用作索引。
 9 
10 \'示例
11 \'下面代码显示一个环境变量。
12 
13 \'[VBScript]  
14 Dim  WshShell,WshSysEnv
15 Set WshShell = WScript.CreateObject("WScript.Shell")
16 Set WshSysEnv = WshShell.Environment("SYSTEMvbscript 各种自定义代码片段 - 有关详细信息,请参阅注释

Web应用的组件化进阶篇

vbscript 一个简单的片段,用于复制大小和位置。

Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用

Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情