欢迎光临散文网 会员登陆 & 注册

vbs个人总结514行笔记(悲)

2022-11-18 11:45 作者:炸鸡1024  | 我要投稿

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(子串)


vbs个人总结514行笔记(悲)的评论 (共 条)

分享到微博请遵守国家法律