vbs个人总结514行笔记(悲)
msgbox 弹出一个对话框 用法:msgbox "话"
标题:msgbox "话",,"标题"
msgbox扩充:
输出图标与按键设置
msgbox "内容",1+16+256,"标题"
1+16中,1可以替换:
0 确定
1 确定+取消
2.中止+重试+忽略
3.是+否+取消
4.是+否
5.重试+取消
16可以替换:
16 ×
32 ?
48 !
64 i
4096 置顶
256可以替换:
0 鼠标指针默认在第一个按钮
256 同上,但是第二个
512 同上,但是第三个
4096 置顶
x=msgbox("",,"")
if x=6 then
这里,x代表一个变量,6:
1 ok 确定
2 cancel 取消
3 abort 终止
4 retry 重试
5 ignore 忽略
6 yes 确定
7 no 取消
当然,msgbox "",17,""
在前面,17=16+1
变量:dim 变量名,变量名
直接给变量赋值:dim 变量:变量=值
变量赋值:变量名="XXX"或者变量名=数字
显示变量:msgbox "内容"&变量名&"内容"&变量名
常量:const 变量名
设置一个空变量:set a=nothong
输入:变量名=inputbox("内容","标题","输入框中会出现的内容",x坐标,y坐标)
inputbox判空:isempty(变量名)或者:typename(变量名)="empty"
if语句:基础:if 表达式 then 表达式 例:if a="1" then msgbox "1"
进阶(else):
if 表达式 then
表达式
else 表达式
end if
if or then
...
elseif and then
...
else
...
end if
or代表或者,and代表和
elseif代表否则如果,else代表否则
字符串强制转化为整数:变量=CDbl(变量) 或者变量=cint(变量) 或者 变量=int(变量)
注释:单引号' 或者rem
循环:
举例:从一到十
dim i
i=1
while i<11
msgbox i
i=i+1
wend
while循环:
while 表达式
执行内容
wend
dim i
for i=1 to 10
msgbox i
next
for循环:
for 起始 to 终止
内容
next
利用exit for退出循环
do loop循环(无限循环):
do
内容
loop
dim i
i=1
do
msgbox i
i=i+1
loop until i>10
do loop until:
do '在此也可以加until,在此加了后面就不用加了,在这里加会先判定条件,后面加会先执行代码在判定条件
内容
loop until 表达式
当然,until可以替换成while:do while...
通过exit do来退出循环
函数:
函数名(参数或表达式)
Function 函数名(参数)
内容
End Function
举例:一个数的平方:
dim a
square(inputbox(" "))
msgbox a
Function square(n)
a=n*n
End Function
递归实例:汉诺塔
dim n
n=3
hannuota "A","B","C",n
Function hannuota(a,b,c,n)
if n=1 then
nsgbox a&"->1->"&c
else
hannuota a,c,b,n-1
msgbox a&"->"&n&"->"&c
hannuota b,a,c,n-1
end if
End Function
数组:dim 数组名(数值)
访问:数组名(下标)
实例:成绩输入+求平均分
dim cj(40)
dim i
i=0
while(i<5)
cj(i)=inputbox("")
i=i+1
wend
dim sum
sum=0
i=0
while(i<5)
sum=sum+cj(i)
i=i+1
wend
msgbox sum/i
返回数组右侧最大可用下标:ubound(名)
返回数组左侧最大可用下标:lbound(名)
生成一个数组:变量名=array("元素1","元素2"……)
在每个元素后添加一个分隔符:join(数组名,字符)
查找所有带某个字符的元素:filter(数组,字符,true或false(写false是返回不带指定字符的元素,省略为true))
判断一个玩意是不是数组:isarray(数组名)
判断数组里面的元素是不是空的:isnull(元素),同样适用于其他情况
在过程级中声明动态数组变量并分配或重新分配存储空间:redim preserve 变量名(维数)
多维数组:dim a(一维数目,二位数目,……)
访问:a(1,2,……)
添加元素:function mjoin(l,d)
for each item in l
allitems=allitems&item&delimiter
next
mjoin=allitems
end function
调用:mjoin(数组名,换行符)
<> 不等于
if a<>1 与 if not a=1相等
字符串:定义:dim str1,str2
赋值:str1="123"
函数:
返回一个字符串是否与另一个字符串中有相同的元素,有返回第一个字符串下标InStr(str1,str2)'下标从0开始
同上,但是从后往前搜索:InStrRev(str1,str2)
提取从一到下标的所有字符:Left(字符串,下标)
反转字符串:StrReverse(字符串名)
获取字符串长度:Len()
mid函数:返回在字符串里指定数量的字符 mid(字符串,开始,长度(不写默认从开始返回到最后))
把字符串按照指定字符分割:split(字符串,分割字符(不写默认空格),要返回字符的数目(可省略,-1返回所有字符串),比较数值(可省略,要加的话0代表二进制比较,1代表文本比较))
大写转小写 lcase(字符串)
小写转大写 ucase(字符串)
删除字符串前后所有空格:trim(字符串)
删除字符串前所有空格:ltrim(字符串)
删除字符串后所有空格:rtrim(字符串)
添加若干个空格:space(添加空格数量)
添加若干个指定字符:string(数量,字符)
msgbox a&vbLf&b&vbTab&c
vbLf:在输出的时候会在a和b之间换行
vbTab:在输出b和c的时候会加一个缩进
vbLf=chr(10)
vbTab=chr(9)
如果将很长一段代码断开,需要在断开结尾处加上下划线
按下一个按键:createobject("wscript.shell").sendkeys ""
等同于:dim obj
set obj=CreateObject("wscript.shell")
rem obj.run "文件名.文件后缀"这样既可以按键,又可以打开文件
obj.run "notepad.exe"
wscript.sleep 1000rem等待1秒钟,以毫秒为单位
obj.sendkeys "Hello"
Hello的特殊替换:
{enter} or ~回车
{{} {
{}} }
{[} [
{]} ]
{~} ~
{+} +
{^} ^
{%} %
{BACKSPACE} {BS} {BKSP} BACKSPACE
特殊字符:按键全拼+{}
{INSERT}{INS} INSERT
PAGE DOWN {PGDN}(UP同)
{PRTSC} PRINTSCREEN
+ shift
^ ctrl
% alt
wscript.echo "Hello" 输出一段话,但是标题为windows wscript
wscript.scriptname 获取文件名
wscript.scriptfullname 获取文件路径
wscript.CurrentDirectory 获取文件路径,但最后不加文件名
%username%自动获取用户名。用于打开文件中使用
sub命令:(函数)
sub 名称(参数)
代码
end sub
调用:
call 名称(参数)
在vbs上调用IE(其他浏览器也可):
set ie=createobject("InternetExplorer.Application")
导航到某个网站:ie.navigate"网站"
地址栏是否可见:ie.visible=1或0
工具栏————:ie.toobar=1或0
状态—————:ie.StatusBar=1或0
高度:ie.Height=560
宽:ie.witdh=1000
坐标:ie.top(顶部与窗口的距离)
ie.left(左边——————)
使得它无法调整大小:ie.resiable=0'这样是锁定
判断浏览器是不是忙:ie.busy
ie.quit 退出浏览器
查看源码:ie.Document.all.item("寻找字段").value="值"
上面代码中,value代表输入一个值,还可以替换成submit(提交,后面不加任何参数)
on error resume next 免除报错(遇到报错,会无视,类似于python的try)
文件处理:
set fso=createobject("scripting.FileSystemObject")
检查文件是否存在:fso.FileExists("路径")
检查文件夹是否存在:fso.folderExists("路径")
复制文件:fso.CopyFile "文件路径","文件夹路径"
复制文件夹:fso.Copyfolder "要复制的文件夹路径","复制到文件夹的路径"
移动文件:fso.MoveFile "文件路径","文件夹路径"
移动文件夹:fso.Movefolder "要移动的文件夹路径","移动到文件夹的路径"
重命名文件:fso.MoveFile "文件路径.扩展名(原先名称)","文件路径.扩展名(重命名的名称)"
移动文件夹内所有指定扩展名:fso.MoveFile "文件路径\*.jpg","文件夹路径"
移动文件夹内所有指定名称,不受扩展名限制:fso.MoveFile "文件路径\名字.*","文件夹路径"
移动文件夹内所有文件但是不包括文件夹内的文件夹:fso.MoveFile "文件路径\*.*","文件夹路径"
移动文件夹内所有文件但是包括文件夹内的文件夹:fso.MoveFile "文件路径\*","文件夹路径"
创建快捷方式:set nlink=fso.CreateShortCut("路径.ink")
给快捷方式赋值:nlink=TargetPath="路径"
介绍快捷方式:nlink.Description="介绍内容"
切换图标:nlink.IconLocation="图标路径"
保存快捷方式:nlink.Save
打开特殊文件夹:path=fso.specialfolders("特殊文件夹名称,入Desktop") &"\proj" fso.run path
创建文件:fso.CreateTextFile "路径\文件.后缀"
删除文件:fso.DeleteFile "路径\文件.后缀"
删除文件夹:fso.Deletefolder "路径"
编辑文本文档:fso.OpenTextFile("路径.txt",数值,判断文件是否不存在,不存在写true,自动创建新文件)
数值可以替换成:1 只读 2覆盖 8追加
read命令合集:fso.read(数值) 读取前数值个字符
fso.ReadLine 读取一行
fso.ReadAll 读取全部
fso.close关闭文件
write命令合集:fso.write "这个命令是写入字符串的内容"
fso.WriteLine "跟write命令一样,但是写完一行自动换行"
写回车:fso.WriteBlankLines(回车行数)
替换字符:cd=replace(wscript.ScriptFullName,wscript.ScriptName,"文件名.文件后缀")
fso.AtEndOfStream 判断文件是否达到末尾
getfile:Set objfso=CreateObject("scripting.filesystemobject")
getfile命令,如果后面不加东西则默认返回文件大小,下面的文件夹也一样:objfso.getfile("文件名.文件后缀")
得到文件夹的大小:fso.getfolder("文件夹名称")
更改文件属性:objfso.attributes=objfso.attributes加或减1
加为设置,减为取消设置1可以替换:1只读2隐藏4SYSTEM FILE 32备份
if objfile.attributes and 16 then 判断是否为这个文件
16可以替换:0正常8磁盘驱动器卷标16文件夹64快捷方式2048压缩文件
利用getfile复制删除打开文件:
objfile.Copy "路径"(因为getfile有了文件名,如果getfile有文件路径,那么这里写文件名)
objfile.delete "路径"(同上)
objfile.openastextstream(读写类型).命令
for each in循环遍历文件夹(在IE中同样使用):
for each 变量 in 前面getfolder的文件名.Files(files是遍历文件,在IE中通常.Windows)
msgbox 变量.Name'获取前面文件名
msgbox 变量.Size'获取大小
exit for'退出循环
next
遍历文件夹:dim objapp:set objapp=createobject("shell.Application")
set objfolder=objapp.BrowseForfolder(0,"在要遍历文件夹上分的窗口上写的提示信息",0,0)
第一个数字始终为0,第三个数字可以替换0仅仅遍历文件夹里面的文件夹16384所有文件
第四个数字代表开始位置,可以替换:0桌面2programs17drives18network19nethood38programfiles48programfilesx86 36windows
第四个数字也可以代表 "路径",数字仅仅是代表特殊文件夹
判断这个遍历的文件夹是否为空: if objfolder is nothing
返回选择的文件夹名称:objfolder.title
返回选择的文件夹路径:objfolder.self.path
复制文件到选定的文件夹:objfolder.copyhere "文件名"
移动——————————————————:set itemcoll=objfolder.items
objfolder.movehere itemcoll
利用vbs打开文件并且以管理员身份打开
set objapp=createobject("shell.application")
objapp.shellexcute "文件名","路径","","不填就默认,填runas以管理身份打开,还能写open、edit、print(不填的话写"")",窗口状态
窗口状态0隐藏1正常2最小化3最大化
打开一个文件:CreateObject("wscript.shell").run"文件名.文件后缀"
等价于:dim obj
set obj=CreateObject("wscript.shell")
obj.run "文件名.文件后缀"
obj.run "路径\文件名.文件后缀"
obj.run """路径""" '打开文件夹
这种方法的好处:可以打开多个文件
with命令:举例:
with CreateObject("Wscript.shell")
.run "cmd"
.sendkeys "hello"
end with 就这么用,能帮着省几行
窗口:
查找一个窗口:set objshl=createobject("wscript.shell")
AppActivate "窗口名,比如Untitled - Notepad"
还原窗口(alt+空格+r) objshl.sendkeys "{% }{R}"
最小化窗口(alt+空格+n)objshl.sendkeys "{% }{N}"
最大化窗口(alt+空格+x)objshl.sendkeys "{% }{X}"
关闭窗口 alt+f4 objshl.sendkeys "%{F4}"
强制结束进程:
dim obj:set obj=cerateobject("wscript.shell")
obj.run "taskkill /F /IM 进程名称",0
select case语句:
select case 变量
case 内容
符合内容要执行的代码
case 内容
符合内容要执行的代码
……
case else(类似于c++的default)
代码
end select
例:dim a,b,c
a="a"
select case a
case "a"
msgbox "a"
end select
(像c++的switch)
利用cmd控制vbs:
set args=wscript.arguments
for each arg in args
msgbox arg
next
在cmd中输入:文件名.vbs 内容1 内容2……
判断传入的参数的数量:args.count
时间的函数:
日期:msgbox Date()
时间:msgbox time()
日期+时间:msgbox now()
增加时间:dateadd("要增加的内容",要增加的数值,date)
要添加的内容里面,d 天 m 月 yyyy 年 w 一周第几天 y 一年中第几天 ww 一年中第几周 q 季度 h 小时 n 分钟 s 秒
看时差:datediff("查看内容,同上要添加的内容","第一个时间(日-月-年)",第二个时间)
返回给定日期的指定部分:datepart("内容,同上",要计算期间的表达式子,如果前面是星期则1代表周日,年份则1代表1月1,2代表由在新的一年中至少有四天的第一周开始,3代表由在新的一年中第一个完整的周开始)
获取年:year(时间)
获取月 month(时间)
获取周几 weekday(时间)
获取天day(时间)
获取时hour(时间)
获取分minute(时间)
获取秒second(时间)
获取月份名称monthname(月份,缩不缩写(缩写ture))
————周的————weekdayname(一周第几天,缩不缩写(不缩写可以不写))
数学函数:
绝对值:abs(数字)
四舍五入:round(数字)
0到1之间的随机数:
randmoize
rnd(1~100可以讲这个数字乘以100)
格式化:
将数字格式化(5000变成5,000.00)formetnumber(数字,要保留的小数位)
将数字格式化为货币(美元和美分)formetcurrency(数字,小数点位数)
格式化为百分数:formetpercent(数字,小数点位数)
格式化时间:formatdatetime(时间,vbGeneralDate)
上面,最后一个参数是vbGeneralDate(按照给定前面的时间排版),vblongdate(星期,月,日,年),VBshortdate(月/日/年)
那个参数也可以替换为数字,0 vbGeneralDate
1 vblongdate
2 vbshortdate
3 vbLongTime
4 vbShortTime
查看东西的类型:typename(变量)
查看东西类型第二种:vartype(变量)
返回值:
0.empty 1.null 2 整数3 长整数(long intger)4单精度小数5双精度小数
6货币(ccur())7日期8字符串9createobject10error11布尔类型12数组13vbdataobject
17 字节
判断是否为数组:isarray(变量)
判断是否为日期:isdate(变量)
IsNumeric(a) 判断a是不是数字
判断是否为空数:isnull(变量)
判断是否为空:isenpty(变量)
判断是否为一个createobject:isobject(变量)
利用vbs导入库:
dim objfso:set objfso=createobject("scripting.filesystemobject")
dim rvbfil:set rvbfil=objfso.opentextfile("文件名.vbs",1)
execute rvbfil.readall()
rvbfil.close()
接着就可以使用此vbs下的函数
class:
class 类名
public a
dim b
private c
定义属性:
property get aa
d=" "
end property
property let aa(参数)
代码,比如变量=参数
end property
private c
private(public也行) sub class_initialize()
代码
end sub
同上 sub class_terminate()
代码
end sub
也可以定义函数
function f
end function
end class
使用:set x=new 类名
x.class_terminate
使用属性:x.aa
get和let去调用:
x.aa=""
msgbox x.aa
利用vbs解压压缩文件:
dim objfso:set objfso=createobject("scripting.filesystemobject")
dim objapp:set objapp=createobject("shell:application")
dim comp:comp="路径"
dim extr:extr=left(comp,instrrev(comp,".")-1)
if not objfso.folderExists(extr) then
objfso.createfolder extr
end if
objapp.namespace(extr).copyhere(objapp.namespace(comp).items)
让机器说话:dim objvoc=createobject("SAPI.SpVioce")
设置声音: set 变量.voice=变量.getvoices.item(1) 0男1女
objvoc.rate=0 更改速度
objvoc.volume=0~100 音量
objvoc.speak "要说的话"
注册表:set objwsh=createobject("wscript.shell")
objwsh.regread("注册表路径,如HKCU\Control Panel\desktop\") 读取注册表
写入注册表(创建一条):objwsh.regwrite "注册表路径,如HKEY_CLASSER_ROOT\VBSFile\Shell\Edit with Vbsedit\Icon","键值,如c:\Windows\system32\shell32.dll,269",注册表的类型
写入注册表(创建文件夹)objwsh.regwrite "注册表路径\要创建的文件夹\,如HKEY_CLASSER_ROOT\VBSFile\Shell\Edit with Vbsedit\Test\",""
删除注册表 objwsh.regdelete "路径"
字典:set c=createobject("scripting.dictionary")
添加元素:c.add "键","键值"
查看元素:c.items()()()()……(键下标,可以不填)要访问的下标前面有多少个元素,前面就加多少个小括号
查看键值:c.keys()()()()(键值下标,可以不填)同上
查看字典内项目的个数:c.count()
删除:c.remove(键)
清空字典:c.removeall()
多维字典:set c=createobject("scripting.dictionary")
a=array("","","")
c.add " ",a
正则表达式:
str=" "
set name=new regexp
设置正则模式:name.pattern="要搜索的字符"
这里面能写的特殊字符:
\(? 左括号 \d{3} 后三位数 \)?右括号 [\s-]破折号或空格 \b可作为结尾或开头 |或者
[A-Z]大写字母[a-z]小写字母 \s词 代表匹配一个空格后面+一个词
测试正则是否成功,比如说判断一个J但是有一个小写的j没被判断,返回false,否则返回true
name.test(str)
忽略大小写:ignorecase=true
name.global=true 是在str中取代全部,还是只代替第一个
替换字符串:name.replace(原先字符,要替换的)
execute:
对指定字符串搜索:name.execute(str)
查看指定字符串搜索了几次:name.execute(str).count()
查看指定字符串搜索出来的第一个下标:name.execute(str).item(指定字符串的序号,如0).firstindex
查看指定字符串搜索出来的元素的长度:name.execute(str).item(指定字符串的序号,如0).lengeth
查看指定字符串搜索出来的元素:name.execute(str).item(指定字符串的序号,如0).value
匹配对象所匹配结果中的子项集合:name.execute(str).item(指定字符串的序号,如0).submatches(子串)