简介
VBS windows脚本 Microsoft visual basic script edition
VBS 是visual basic的一个抽象子集,系统内置,不编译为二进制文件,(由host解释源)直接执行,方便简易,具备高级语言功能,不需要开发环境
提供COM对象简便支持
COM对象:一些具有特定函数功能的程序模块,一般以.ocx,.dll扩展名,在脚本中引用这些模块文件就能发挥功能,不用编写代码,设计算法
用途:
VBS可以做什么:
1. 计算
2. 处理文件和文件夹
3. 管理Windows
4. 处理Word, Excel, PowerPoint等Office文档
5. 嵌入网页,驱动dHTML
6. 编写HTTP通信
7. 调用系统功能(COM组件),比如说语音说话
8. 分析HTML, XML
9. 调用命令行并分析返回结果
10. 处理图片
11. 自动化按键
12. 调用Windows Media Player并管理
13. 调用Windows Live Messenger并管理
14. 服务端技术:Active Server Page (ASP)
15. 脚本病毒
16. 处理数据库
特别注意:
1.中文编码有问题,文件,文件名都可能出错
教程
msgbox函数:
msgbox “内容”,,“对话框标题(可无)”----中间两个逗号
定义变量:Dim
dim 变量1,变量2...
(vbs只有一种变量类型,系统自动分辨,在使用过程中需要使用类型转换将其转化为适合的类型)
不能在定义是赋值
定义常量:
const A = ...
inputbox函数:
inputbox("内容","对话框标题可无"),
返回输入的内容,可用赋值给变量:dim a ; a =input("input:")
一般来说输入的都是字符串,如果想要的是整数就必须转换,不然是会出错的
注释:单引号‘ ,rem
类型转化:
cbool : 转化为布尔 true,false
cbyte:
ccur , cdbi, csng : to 浮点,精确度增加
Cdate: 转换位日期
Cint, Clng : string ...to Integer
Cstr: string
运算: 加减乘除
^ : 乘方
mod: 余
判断: 等于:= (非==)
不等:<> (非!=)
条件语句:
if:
if 条件 then 语句
elseif 条件 then 语句
else 语句
end if
(and 并 , or 或— not)
select-case语句:
select case 变量名
case 值
语句
case 值
语句
case else
语句
end select
循环:
循环控制语句有for……next循环、for……each循环、do……while循环、do……until循环、while循环五种形式
1.
do
语句
exit do
loop
while:
while可以放在do或者是loop后面, 然后再接一个表达式
do while 条件
loop
do
loop while 条件
2.
for...next: 基于计数
for i=value to 10
语句
exit for
next
(i必须是在for中赋值)
3.
for each:对象或数组
For each 循环计数变量 in 要查看的对象或数组
执行处理语句
Next
4. do while
Do until 条件
执行循环体
(exit do)
Loop
5.while 条件满足时一直执行循环
While 条件
执行循环体
Wend
字符串:
& -- 字符串连接符
其他类型的数据可以直接转化为字符串
vbCrlf 换行
数组
dim arr(size) (实际上是0-9 共10个数据)
多维:
dim arr(d2size,d2size,d3size...)
注意:
1.只能储存同类型数据
2.都是从0开始的
函数
function name(par1,par2,par3...)
exit function '(中途结束函数,不是必须的)
...
函数名称=某值 ‘用来返回值
end function (必须的)
运行外部程序 CreateObject,这条命令可以访问windows系统内安装的所有com对象,并且可以调用这些部件中存放的命令
WSH也就是用来解析Vbs的宿主,本身包含了几个个常用对象:
1、Scripting.FileSystemObject —> 提供一整套文件系统操作函数
2、Scripting.Dictionary —> 用来返回存放键值对的字典对象
3、Wscript.Shell —> 提供一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置
4、Wscript.NetWork —> 提供网络连接和远程打印机管理的函数。(其中,所有Scripting对象都存放在SCRRUN.DLL文件中,所有的Wscript对象都存放在WSHOM.ocx文件中。)
Option Explicit ' explicit 明确的
dim obj
set obj = CreateObject("Wscript.Shell")
obj.run "notepad",2,true
obj.run "winword",3,false
说明:
1.Set是Vbs指令,凡是将一对象引用赋给变量,就需要使用set关键字。那么 什么是对象引用呢?凡是字符串、数值、布尔值之外的变量都是对象引用。
2.Wscript.shell中的运行外部程序的函数——run,notepad是记事本程序的文件名。当然你也可以改成“calc”,这是计算器的文件名,winword是word的文件名,所有可执行文件的文件名都可以。
3.但是run在运行解析时,遇到空格会停止,解决的方法是使用双引号,例如:在我的机器上运行qq,代码为:
objshell.run """C:\Program Files\QQ2006\QQ.exe""" ‘注:三个引号
4.run函数有三个参数: ·
···1.参数是你要执行的程序的路径,
···2.第二个程序是窗口的形式,0是在后台运行;1表示正常运行;2表示激活程序并且显示为最小化;3表示激活程序并且显示为最大化;一共有10个这样的参数我只列出了4个最常用的。
···3,。第三个参数是表示这个脚本是等待还是继续执行,如果设为了true,脚本就会等待调用的程序退出后再向后执行。
5.run前面还有一个接受返回值的变量,一般来说如果返回为0,表示成功执行,如果不为0,则这个返回值就是错误代码,可以通过这个代码找出相应的错误。
注意:如果要对打开的文件进行文件输入输出,需要给一个打开的时间,否则在其未运行时输入字符串是无效的
方式:
WScript.Sleep n (n表示n秒)
错误处理
错误原因:类型不匹配,地址错误。。。
1.运行错误:发生错误是脚本将停止,并在屏幕上显示一个错误信息
处理:在开头添加: On Error Resume Next
运行错误是跳过,继续执行,并把错误信息压入错误栈堆
(并没有处理错误)
2.处理错误:
vbscript提供了一个err对象,他有两个方法clear,raise,5个属性:description,helpcontext,helpfile,number,source
err对象不用引用实例,可以直接使用,err.something
on error resume next
a=11
b=0
c=a/b
if err.number<>0 then
wscript.echo err.number & err.description & err.source
end if
修改注册表
(暂时用不了,先不学)
文件系统(应该了如指掌)
注意:
1.可以使用通配符 :*
VBS中对桌面和文件系统访问的顶级对象----FileSystemObject (FSO)
FSO常见对象:
1.Drive对象:含存储设备(硬盘光驱、RAM盘、网络驱动)的信息
2.Drives集合:提供一个物理和逻辑驱动器的列表
3.File对象:检查、处理文件
4.Files集合:提供一个文件夹中的文件列表
5.Folder对象:检查、、处理文件夹
6.Folders集合:提供文件夹中子文件夹的列表
7.Textstream对象:读写文本文件
FSO常用方法:
BulidPath:把文件路径信息添加到现有的文件路径上
CopyFile:复制文件
CopyFolder:复制文件夹
CreateFolder:创建文件夹
CreateTextFile:创建文本并返回一个TextStream对象
DeleteFile:删除文件
DeleteFolder:删除文件夹及其中所有内容
DriveExits:确定驱动器是否存在
FileExits:确定一个文件是否存在
FolderExists:确定某文件夹是否存在
GetAbsolutePathName:返回一个文件夹或文件的绝对路径
GetBaseName:返回一个文件或文件夹的基本路径
GetDrive:返回一个dreve对象
GetDriveName:返回一个驱动器的名字
GetExtensionName:返回扩展名
GetFile:返回一个file对象
GetFileName:返回文件夹中文件名称
GetFolder:返回一个文件夹对象
GetParentFolderName:返回一个文件夹的父文件夹
GetSpecialFolder:返回指向一个特殊文件夹的对象指针
GetTempName:返回一个可以被createtextfile使用的随机产生的文件或文件夹的名称
MoveFile:移动文件
MoveFolder:移动文件夹
OpenTextFile:打开一个存在的文件并返回一个TextStream对象
建立FSO模型:
FSO不是wsh的一部分,故需要建立它的模型:
dim fso
set fso = wscript.CreateObject("scripting.FileSystemObject")
释放:
set fso = nothing
使用文件夹:
1.创建:
创建前,先检查存在不
set fso = wscript.createobject("scriptng.filesystemobject")
if fso.folderexists("c:\temp") then
msgbox "err"
else
set folder = fso.createfolder("C:\temp") '''
end if
2.删除:
fso.deletefolder("C:\temp)
3.拷贝:
fso.copyfolder "C:\from" "D:\to"
都存在,错误,停止,
fso.copyfolder "C:\from" "D:\to",true ---覆盖
4.移动:
fso.movefolder "C:\from","D:\to1\to2"----如果to1不存在,自动创建
fso.movefolder "C:\from","D:\to1\to2\"----如果to1不存在,不会自动创建
创建FSO对象:
set f = fso.getfolder("C:\a\b)
这时可以直接将f当作对象使用,不用在加其他地址参数
如: f.delete
f.copy "c:\"
f.move "C:\"
使用文件
1.创建: fso.createtextfile("")
2.复制: fso.copyfile "",""
3.移动: fso.movefile "",""
4.删除: fso.delete ""
文件读写:
1.打开文件
set open = fso.opentextfile("path\file.txt",int operationMode,create r not if not exists)
operationMode: 文件操作模式
1:只读
2:写入
8: 追加
create:如果文件不存在是否创建 (true/false)
2.读取文件
set file = fso.opentextfile("",1,true)
fiile.read(x)---读取x个字符(\n也算一个)
file.readline---读取一行
file.readall---读取所有
注意:
read 和readline是有一个文件指针从头到尾指向的,读完一些内容,就从这些内容后面一个字符开始,即使末尾换行符也算
3.文件指针变量
1.文件末尾标识:atendofstream
当文件指针到达末尾时,返回true
do while atendofstream <> true
f.read(10)
loop
2.当前字符列号:Column,初始化为1
3.当前字符行号:line, 初始化为1
4.跳行:
file.skip(x)---跳过x字
file.skipline ---跳过一行
5.写入:(2写入,8追加)
set f =fso.opentextfile("",2/8,true)
f.write("something")
f.writeline("words")
f.writeblanklines(int n)---写入N个空行
6.关闭文件流:
文件操作后一定要关闭文件流:file.close
重复操作简化---SendKeys(模拟键盘)
set obj = wscript.createobject("Wscript.Shell")
obj.SendKeys "string" like :obj.sendkeys "A" /"Abd"
1.基本键
2.特殊功能键:
Shift--- +
Ctrl --- ^
Alt --- %
eg: Ctrl+E : ^E
如果特殊键下同时按住多个其他键,用括号把后者括起来:
Ctrl+Q+W: ^(QW)
注意:
对于被特殊键占用的 %^+,用{%}{^}{+}代替
回车:”{ENTER}“
向下:{DOWN}
向左:{LEFT}
向右:{RIGHT}
向上:{UP}
Esc : {ESC}
注:Ctrl+ESC 相当于Win
3.多个重复键的输入:
obj.sendkeys "{按键 次数}"
eg: obj.sendkeys "{A 10}"
补充---notepad(记事本)快捷键
打开:win+R+notepad
Ctrl+s 保存,输入地址,
未完待续。。。