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对象
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com '提供对 Windows 脚本宿主对象模型根对象的访问。 '说明
'WScript 对象是 Windows 脚本宿主对象模型层次结构的根对象。它从不需要在调用其属性和方法之前进行实例化,并且始终可在任何脚本文件中使用。WScript 对象提供对以下信息的访问: '命令行参数,
'脚本文件的名称,
'宿主文件名,
'宿主版本信息。
'WScript 对象可用来: '创建对象,
'连接对象,
'与对象断开连接,
'同步事件,
'以编程方式停止脚本的执行,
'将信息输出到默认输出设备(Windows 对话框或命令控制台)。
'WScript 对象可用来设置脚本运行的模式(交互模式或批处理模式)。 '属性:
'WScript对象具有下列属性:
'● Arguments
'● FullName
'● Interactive
'● Name
'● Path
'● ScriptFullName
'● ScriptName
'● StdErr
'● StdIn
'● StdOut
'● Version '方法:
'WScript的方法
'WScript对象具有下列方法:
'● CreateObject
'● ConnectObject
'● DisconnectObject
'● Echo
'● GetObject
'● Quit
'● Sleep
WScript属性详解:
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com Dim objArgs,i Set objArgs = WScript.Arguments '将命令行整体看作一个参数 For i = To objArgs.Count - 'objArgs.Count表示统计在cmd中调用cscript宿主脚本执行当前脚本时候跟的参数,如果有三个参数是就是数字3,但是由于我们变了是从“0”开始计数的,所以到下表“2”的时候就已经是三个参数了,如果不减去“1”的话就会报错“运行时错误: 下标越界”
WScript.Echo "i = "& i & ";Item = "& objArgs.Item(i)
Next '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript C:\Users\尹正杰\Desktop\test.vbs dir /a /b
'Microsoft (R) Windows Script Host Version 5.8
'版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。 'i = 0;Item = dir
'i = 1;Item = /a
'i = 2;Item = /b 'C:\Users\尹正杰>
Arguments用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com Dim objArgs,i,sum,s1,s2 Set objArgs = WScript.Arguments '将命令行整体看作一个参数 s1 = objArgs.Item()
s2 = objArgs.Item()
sum =
For i = s1 To s2'objArgs.Count表示统计在cmd中调用cscript宿主脚本执行当前脚本时候跟的参数,如果有三个参数是就是数字3,但是由于我们变了是从“0”开始计数的,所以到下表“2”的时候就已经是三个参数了,如果不减去“1”的话就会报错“运行时错误: 下标越界”
sum = sum + i
Next
WScript.Echo "从"& s1 & "到" & s2 & "之间的整数之和为:" & sum '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs 1 100
'从1到100之间的整数之和为:5050 'C:\Users\尹正杰>
利用Arguments计算2个数字之间的和
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com Dim objArgs,i Set objArgs = WScript.Arguments '将命令行整体看作一个参数 For i = To objArgs.Count - 'objArgs.Count表示统计在cmd中调用cscript宿主脚本执行当前脚本时候跟的参数,如果有三个参数是就是数字3,但是由于我们变了是从“0”开始计数的,所以到下表“2”的时候就已经是三个参数了,如果不减去“1”的话就会报错“运行时错误: 下标越界”
WScript.Echo objArgs.Item(i)
Next '这个脚本双击的时候不会报错,用法是需要你讲任意一个独享移动到这个脚本身上,然后会返回一个对话框,内容是你拖动的那个文件或目录的绝对路径
Arguments返回文件的绝对路径
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.FullName '返回主机可执行文件(CScript.exe 或 WScript.exe)的完全限定路径。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下[cscript /nologo,其中//Nologo表示不显示徽标:执行时不显示标志]:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'C:\Windows\system32\cscript.exe 'C:\Users\尹正杰>
FullName用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.Interactive 'Interactive 属性返回一个布尔值即“0”或者“1”
'说明
'Interactive 属性返回一个布尔值。 '有批处理和交互两种模式。在交互模式(默认模式)下,该脚本为用户提供交互功能。启用对 Windows 脚本宿主的输入和输出。该脚本可以将信息显示在对话框中并等待用户提供反馈。在批处理模式下,不支持这种类型的用户交互 — 所有对 WSH 的输入和输出被禁用。还可以使用 Windows 脚本宿主命令行开关 //I(对于交互式)和 //B(对于批处理模式)来设置脚本模式。 '示例
'下面的 JScript 代码显示脚本模式。 'WScript.Echo WScript.Interactive;
'下面的 JScript 代码将脚本模式设置为批处理。 'WScript.Interactive = false;
Interactive用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.Name '返回 WScript 对象(主机可执行文件)的名称。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'Windows Script Host 'C:\Users\尹正杰>
Name 用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.Path '返回包含主机可执行文件(CScript.exe 或 WScript.exe)的路径名称。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'C:\Windows\system32 'C:\Users\尹正杰>
Path 用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.ScriptFullName '返回当前运行脚本的完整路径。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'C:\Users\尹正杰\Desktop\test.vbs 'C:\Users\尹正杰>
ScriptFullName 用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.ScriptName '返回当前运行脚本的文件名。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'test.vbs 'C:\Users\尹正杰>
ScriptName 用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com Dim row_input
row_input = "您输入一些字符串是>>>:" '定义输出的值 WScript.Echo "请输入一些字符串:“
Do While Not WScript.StdIn.AtEndOfLine
row_input = row_input & WScript.StdIn.Read() 'WScript.StdIn.Read(1)表示每次循环读取一个字符。
Loop
WScript.Echo row_input '打印拼接后的字符 '注意:
'StdIn 属性返回一个表示标准输入流的对象。只可在使用 CScript.exe 时访问 StdIn、StdOut 和 StdErr 流。如果试图在使用 WScript.exe 时访问这些流,则会出错。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'请输入一些字符串:
'您好
'您输入一些字符串是>>>:您好 'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'请输入一些字符串:
'尹正杰
'您输入一些字符串是>>>:尹正杰 'C:\Users\尹正杰>
StdIn与AtEndOfLine用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo WScript.Version '返回 Windows 脚本宿主的版本。 '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'5.8 'C:\Users\尹正杰>
Version 用法展示
WScript方法详解:
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo "当前的时间为:" & Time '打印当前时间 WScript.Sleep * '睡眠3秒钟 WScript.Echo "当前的时间为:" & Time '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'当前的时间为:23:03:25
'当前的时间为:23:03:28 'C:\Users\尹正杰>
Echo与Sleep 的用法展示
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com WScript.Echo "当前的时间为:" & Time '打印当前时间 WScript.Quit '退出程序 WScript.Echo "quit后面的语句:" & Time '以上代码在cmd窗口调用cscript宿主脚本执行结果如下:
'C:\Users\尹正杰>cscript /nologo C:\Users\尹正杰\Desktop\test.vbs
'当前的时间为:23:05:54 'C:\Users\尹正杰>
Quit 用法展示
五.WshShortcut对象
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com Dim windows_shell,desktop,object_link Set windows_shell = CreateObject("WScript.Shell") '创建一个对象(实例化)
desktop = windows_shell.SpecialFolders("Desktop") '使用SpecialFolders方法获取桌面的路径
'MsgBox desktop
Set object_link = windows_shell.CreateShortcut(desktop & "\yinzhengjie_cmd.lnk") '定义链接文件路径并且给他起了一个名字叫“yinzhengjie_cmd”,注意以“.lnk”结尾标志着链接文件哟 object_link.TargetPath = "C:\Windows\System32\cmd.exe" '源文件链接的绝对路径 object_link.WorkingDirectory = "C:\Windows\System32" '源文件的工作路径,也就是他的所在目录(父目录) object_link.Hotkey = "" '可以不写这个参数 object_link.save '保存以上的配置,因为以上代码只是将数据加入到缓存中,并没有将数据写入磁盘中去,所以这个步骤是必须的! Set windows_shell = Nothing '以上代码执行完毕后,需要释放掉内存地址。
Set desktop = Nothing
Set object_link = Nothing
CreateShortcut用于创建一个快捷方式
六.WshEnvironment 对象
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com '说明
'WshEnvironment 对象是由 WshShell 对象的 Environment 属性返回的环境变量集。该变量集包含整个环境变量集(有名称和没有名称的)。若要在此集合中检索个别环境变量(和它们的值),请将环境变量名用作索引。 '示例
'下面代码显示一个环境变量。 '[VBScript]
Dim WshShell,WshSysEnv
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
Set WshShell = Nothing
Set WshSysEnv = Nothing
七.WshNetwork 对象
Option Explicit
'@author :yinzhengjie
'blog:http://www.cnblogs.com/yinzhengjie/tag/VBScript/
'EMAIL:y1053419035@qq.com '提供对计算机所连接的网络上共享资源的访问。 '说明
'如果需要连接网络共享和网络打印机、断开网络共享和网络打印机、映射或删除网络共享,或访问有关网络上用户的信息,请创建 WshNetwork 对象。 '示例
'下面的示例演示对域名、计算机名、使用WshNetwork 对象的当前计算机系统的用户名的显示。 Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo "Domain = " & WshNetwork.UserDomain
WScript.Echo "Computer Name = " & WshNetwork.ComputerName
WScript.Echo "User Name = " & WshNetwork.UserName
VBScript进阶篇一的更多相关文章
- Sass进阶之路,之二(进阶篇)
Sass之二(进阶篇) 1. 数据类型 1.1 Number 数字类型,小数类型,带有像素单位的数字类型,全部都属于Number类型 Number类型详情请点击这里,下面是小例子 1.$n1: 1.2 ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- idea 插件的使用 进阶篇
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...
- 2. web前端开发分享-css,js进阶篇
一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...
- windows系统快捷操作の进阶篇
上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- 最快让你上手ReactiveCocoa之进阶篇
前言 由于时间的问题,暂且只更新这么多了,后续还会持续更新本文<最快让你上手ReactiveCocoa之进阶篇>,目前只是简短的介绍了些RAC核心的一些方法,后续还需要加上MVVM+Rea ...
- SQL Server调优系列进阶篇(查询优化器的运行方式)
前言 前面我们的几篇文章介绍了一系列关于运算符的基础介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符. ...
- SQL Server调优系列进阶篇(查询语句运行几个指标值监测)
前言 上一篇我们分析了查询优化器的工作方式,其中包括:查询优化器的详细运行步骤.筛选条件分析.索引项优化等信息. 本篇我们分析在我们运行的过程中几个关键指标值的检测. 通过这些指标值来分析语句的运行问 ...
随机推荐
- Hitchhiker 是一款开源的 Restful Api 测试工具
Hitchhiker 是一款开源的 Restful Api 测试工具 开源API测试工具 Hitchhiker v0.4更新 - 没有做不到,只有想不到 Hitchhiker 是一款开源的 Restf ...
- squid反向代理
反向代理的作用是就爱那个网站中的静态自原本地化.也就是将一部分本应该有原是服务器处理的请求交给 Squid 缓存服务处理 编辑 Squid 服务程序的配置文件*(正向代理与反向代理不能同时使用,) ...
- RequestHolder工具类
package com.inspire.ssm.common; import com.inspire.ssm.model.SysUser; import javax.servlet.http.Http ...
- Apache Shiro Session Management
https://shiro.apache.org/session-management.html#session-management https://shiro.apache.org/session ...
- Docker 执行nginx以及简单进入container
1. docker run -d --name mynginx nginx 运行起来nginx镜像之后 2. docker exec -ti mynginx /bin/bash 能够进入操作界面 发现 ...
- 关于mybatis的@Param注解和参数
1,使用@Param注解 当以下面的方式进行写SQL语句时: @Select("select column from table where userid = #{userid} " ...
- html5應用緩存
HTML5使用了應用緩存,就是web應用緩存,使得在離線狀態下可以訪問web'應用. 應用緩存的優點: 離線訪問-可以在無網的狀態下訪問應用 速度-有緩存的應用加載更快 瀏覽器負載-瀏覽器只從服務器加 ...
- QT 5 安装 vs2017 后,出现找不到 rc.exe 问题
QT 5 安装 vs2017 后,出现找不到 rc.exe 问题 qt 5 cannot run 'rc.exe' 出现这种错误,是因为,rc.exe 未找到,也就是 SKD 路径不对. 找到相应的 ...
- android post 方式 访问网络 实例
android post 方式 访问网络 实例 因为Android4.0之后对使用网络有特殊要求,已经无法再在主线程中访问网络了,必须使用多线程访问的模式 该实例需要在android配置文件中添加 网 ...
- html5 viewport使用
用html5开发移动应用时往往会遇到手机的分辨率或屏幕大小不同的问题,如何使我们开发出来的应用或页面大小能适合各种手机呢?html5中的viewport能帮你做到. viewport 语法介绍: &l ...