vbs個人總結(jié)514行筆記(悲)
msgbox 彈出一個對話框 用法:msgbox "話"
標題:msgbox "話",,"標題"
msgbox擴充:
輸出圖標與按鍵設(shè)置?
msgbox "內(nèi)容",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"或者變量名=數(shù)字
顯示變量:msgbox "內(nèi)容"&變量名&"內(nèi)容"&變量名
常量:const 變量名
設(shè)置一個空變量:set a=nothong
輸入:變量名=inputbox("內(nèi)容","標題","輸入框中會出現(xiàn)的內(nèi)容",x坐標,y坐標)
inputbox判空:isempty(變量名)或者:typename(變量名)="empty"
if語句:基礎(chǔ):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代表否則
字符串強制轉(zhuǎn)化為整數(shù):變量=CDbl(變量)? 或者變量=cint(變量) 或者 變量=int(變量)
注釋:單引號' 或者rem
循環(huán):
舉例:從一到十
dim i
i=1
while i<11
msgbox i
i=i+1
wend
while循環(huán):
while 表達式
執(zhí)行內(nèi)容
wend
dim i
for i=1 to 10
msgbox i
next
for循環(huán):
for 起始 to 終止
內(nèi)容
next
利用exit for退出循環(huán)
do loop循環(huán)(無限循環(huán)):
do
內(nèi)容
loop
dim i
i=1
do
msgbox i
i=i+1
loop until i>10
do loop until:
do '在此也可以加until,在此加了后面就不用加了,在這里加會先判定條件,后面加會先執(zhí)行代碼在判定條件
內(nèi)容
loop until 表達式
當然,until可以替換成while:do while...
通過exit do來退出循環(huán)
函數(shù):
函數(shù)名(參數(shù)或表達式)
Function 函數(shù)名(參數(shù))
內(nèi)容
End Function
舉例:一個數(shù)的平方:
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
數(shù)組:dim 數(shù)組名(數(shù)值)
訪問:數(shù)組名(下標)
實例:成績輸入+求平均分
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
返回數(shù)組右側(cè)最大可用下標:ubound(名)
返回數(shù)組左側(cè)最大可用下標:lbound(名)
生成一個數(shù)組:變量名=array("元素1","元素2"……)
在每個元素后添加一個分隔符:join(數(shù)組名,字符)
查找所有帶某個字符的元素:filter(數(shù)組,字符,true或false(寫false是返回不帶指定字符的元素,省略為true))
判斷一個玩意是不是數(shù)組:isarray(數(shù)組名)
判斷數(shù)組里面的元素是不是空的:isnull(元素),同樣適用于其他情況
在過程級中聲明動態(tài)數(shù)組變量并分配或重新分配存儲空間:redim preserve 變量名(維數(shù))
多維數(shù)組:dim a(一維數(shù)目,二位數(shù)目,……)
訪問:a(1,2,……)
添加元素:function mjoin(l,d)
for each item in l
allitems=allitems&item&delimiter
next
mjoin=allitems
end function
調(diào)用:mjoin(數(shù)組名,換行符)
<> 不等于
if a<>1 與 if not a=1相等
字符串:定義:dim str1,str2
賦值:str1="123"
函數(shù):
返回一個字符串是否與另一個字符串中有相同的元素,有返回第一個字符串下標InStr(str1,str2)'下標從0開始
同上,但是從后往前搜索:InStrRev(str1,str2)
提取從一到下標的所有字符:Left(字符串,下標)
反轉(zhuǎn)字符串:StrReverse(字符串名)
獲取字符串長度:Len()
mid函數(shù):返回在字符串里指定數(shù)量的字符 mid(字符串,開始,長度(不寫默認從開始返回到最后))
把字符串按照指定字符分割:split(字符串,分割字符(不寫默認空格),要返回字符的數(shù)目(可省略,-1返回所有字符串),比較數(shù)值(可省略,要加的話0代表二進制比較,1代表文本比較))
大寫轉(zhuǎn)小寫 lcase(字符串)
小寫轉(zhuǎn)大寫 ucase(字符串)
刪除字符串前后所有空格:trim(字符串)
刪除字符串前所有空格:ltrim(字符串)
刪除字符串后所有空格:rtrim(字符串)
添加若干個空格:space(添加空格數(shù)量)
添加若干個指定字符:string(數(shù)量,字符)
msgbox a&vbLf&b&vbTab&c
vbLf:在輸出的時候會在a和b之間換行
vbTab:在輸出b和c的時候會加一個縮進
vbLf=chr(10)
vbTab=chr(9)
如果將很長一段代碼斷開,需要在斷開結(jié)尾處加上下劃線
按下一個按鍵: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命令:(函數(shù))
sub 名稱(參數(shù))
代碼
end sub
調(diào)用:
call 名稱(參數(shù))
在vbs上調(diào)用IE(其他瀏覽器也可):
set ie=createobject("InternetExplorer.Application")
導(dǎo)航到某個網(wǎng)站:ie.navigate"網(wǎng)站"
地址欄是否可見:ie.visible=1或0
工具欄————:ie.toobar=1或0
狀態(tài)—————:ie.StatusBar=1或0
高度:ie.Height=560
寬:ie.witdh=1000
坐標:ie.top(頂部與窗口的距離)
ie.left(左邊——————)
使得它無法調(diào)整大?。篿e.resiable=0'這樣是鎖定
判斷瀏覽器是不是忙:ie.busy
ie.quit 退出瀏覽器
查看源碼:ie.Document.all.item("尋找字段").value="值"
上面代碼中,value代表輸入一個值,還可以替換成submit(提交,后面不加任何參數(shù))
on error resume next 免除報錯(遇到報錯,會無視,類似于python的try)
文件處理:
set fso=createobject("scripting.FileSystemObject")
檢查文件是否存在:fso.FileExists("路徑")
檢查文件夾是否存在:fso.folderExists("路徑")
復(fù)制文件:fso.CopyFile "文件路徑","文件夾路徑"
復(fù)制文件夾:fso.Copyfolder "要復(fù)制的文件夾路徑","復(fù)制到文件夾的路徑"
移動文件:fso.MoveFile "文件路徑","文件夾路徑"
移動文件夾:fso.Movefolder "要移動的文件夾路徑","移動到文件夾的路徑"
重命名文件:fso.MoveFile "文件路徑.擴展名(原先名稱)","文件路徑.擴展名(重命名的名稱)"
移動文件夾內(nèi)所有指定擴展名:fso.MoveFile "文件路徑\*.jpg","文件夾路徑"
移動文件夾內(nèi)所有指定名稱,不受擴展名限制:fso.MoveFile "文件路徑\名字.*","文件夾路徑"
移動文件夾內(nèi)所有文件但是不包括文件夾內(nèi)的文件夾:fso.MoveFile "文件路徑\*.*","文件夾路徑"
移動文件夾內(nèi)所有文件但是包括文件夾內(nèi)的文件夾:fso.MoveFile "文件路徑\*","文件夾路徑"
創(chuàng)建快捷方式:set nlink=fso.CreateShortCut("路徑.ink")
給快捷方式賦值:nlink=TargetPath="路徑"
介紹快捷方式:nlink.Description="介紹內(nèi)容"
切換圖標:nlink.IconLocation="圖標路徑"
保存快捷方式:nlink.Save
打開特殊文件夾:path=fso.specialfolders("特殊文件夾名稱,入Desktop") &"\proj"? ?fso.run path
創(chuàng)建文件:fso.CreateTextFile "路徑\文件.后綴"
刪除文件:fso.DeleteFile "路徑\文件.后綴"
刪除文件夾:fso.Deletefolder "路徑"
編輯文本文檔:fso.OpenTextFile("路徑.txt",數(shù)值,判斷文件是否不存在,不存在寫true,自動創(chuàng)建新文件)
數(shù)值可以替換成:1 只讀 2覆蓋 8追加
read命令合集:fso.read(數(shù)值) 讀取前數(shù)值個字符
fso.ReadLine 讀取一行
fso.ReadAll 讀取全部
fso.close關(guān)閉文件
write命令合集:fso.write "這個命令是寫入字符串的內(nèi)容"
fso.WriteLine "跟write命令一樣,但是寫完一行自動換行"
寫回車:fso.WriteBlankLines(回車行數(shù))
替換字符:cd=replace(wscript.ScriptFullName,wscript.ScriptName,"文件名.文件后綴")
fso.AtEndOfStream 判斷文件是否達到末尾
getfile:Set objfso=CreateObject("scripting.filesystemobject")
getfile命令,如果后面不加?xùn)|西則默認返回文件大小,下面的文件夾也一樣:objfso.getfile("文件名.文件后綴")?
得到文件夾的大?。篺so.getfolder("文件夾名稱")
更改文件屬性:objfso.attributes=objfso.attributes加或減1
加為設(shè)置,減為取消設(shè)置1可以替換:1只讀2隱藏4SYSTEM FILE 32備份
if objfile.attributes and 16 then? ?判斷是否為這個文件
16可以替換:0正常8磁盤驅(qū)動器卷標16文件夾64快捷方式2048壓縮文件
利用getfile復(fù)制刪除打開文件:
objfile.Copy "路徑"(因為getfile有了文件名,如果getfile有文件路徑,那么這里寫文件名)
objfile.delete "路徑"(同上)
objfile.openastextstream(讀寫類型).命令
for each in循環(huán)遍歷文件夾(在IE中同樣使用):
for each 變量 in 前面getfolder的文件名.Files(files是遍歷文件,在IE中通常.Windows)
msgbox 變量.Name'獲取前面文件名
msgbox 變量.Size'獲取大小
exit for'退出循環(huán)
next
遍歷文件夾:dim objapp:set objapp=createobject("shell.Application")
set objfolder=objapp.BrowseForfolder(0,"在要遍歷文件夾上分的窗口上寫的提示信息",0,0)
第一個數(shù)字始終為0,第三個數(shù)字可以替換0僅僅遍歷文件夾里面的文件夾16384所有文件
第四個數(shù)字代表開始位置,可以替換:0桌面2programs17drives18network19nethood38programfiles48programfilesx86 36windows
第四個數(shù)字也可以代表 "路徑",數(shù)字僅僅是代表特殊文件夾
判斷這個遍歷的文件夾是否為空: if objfolder is nothing
返回選擇的文件夾名稱:objfolder.title
返回選擇的文件夾路徑:objfolder.self.path
復(fù)制文件到選定的文件夾:objfolder.copyhere "文件名"
移動——————————————————:set itemcoll=objfolder.items
objfolder.movehere itemcoll
利用vbs打開文件并且以管理員身份打開
set objapp=createobject("shell.application")
objapp.shellexcute "文件名","路徑","","不填就默認,填runas以管理身份打開,還能寫open、edit、print(不填的話寫"")",窗口狀態(tài)
窗口狀態(tài)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}"
關(guān)閉窗口 alt+f4? objshl.sendkeys "%{F4}"
強制結(jié)束進程:
dim obj:set obj=cerateobject("wscript.shell")
obj.run "taskkill /F /IM 進程名稱",0
select case語句:
select case 變量
case 內(nèi)容
符合內(nèi)容要執(zhí)行的代碼
case 內(nèi)容
符合內(nèi)容要執(zhí)行的代碼
……
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 內(nèi)容1 內(nèi)容2……
判斷傳入的參數(shù)的數(shù)量:args.count
時間的函數(shù):
日期:msgbox Date()
時間:msgbox time()
日期+時間:msgbox now()
增加時間:dateadd("要增加的內(nèi)容",要增加的數(shù)值,date)
要添加的內(nèi)容里面,d 天 m 月 yyyy 年 w 一周第幾天 y 一年中第幾天 ww 一年中第幾周 q 季度 h 小時 n 分鐘 s 秒
看時差:datediff("查看內(nèi)容,同上要添加的內(nèi)容","第一個時間(日-月-年)",第二個時間)
返回給定日期的指定部分:datepart("內(nèi)容,同上",要計算期間的表達式子,如果前面是星期則1代表周日,年份則1代表1月1,2代表由在新的一年中至少有四天的第一周開始,3代表由在新的一年中第一個完整的周開始)
獲取年:year(時間)
獲取月 month(時間)
獲取周幾 weekday(時間)
獲取天day(時間)
獲取時hour(時間)
獲取分minute(時間)
獲取秒second(時間)
獲取月份名稱monthname(月份,縮不縮寫(縮寫ture))
————周的————weekdayname(一周第幾天,縮不縮寫(不縮寫可以不寫))
數(shù)學(xué)函數(shù):
絕對值:abs(數(shù)字)
四舍五入:round(數(shù)字)
0到1之間的隨機數(shù):
randmoize
rnd(1~100可以講這個數(shù)字乘以100)
格式化:
將數(shù)字格式化(5000變成5,000.00)formetnumber(數(shù)字,要保留的小數(shù)位)
將數(shù)字格式化為貨幣(美元和美分)formetcurrency(數(shù)字,小數(shù)點位數(shù))
格式化為百分數(shù):formetpercent(數(shù)字,小數(shù)點位數(shù))
格式化時間:formatdatetime(時間,vbGeneralDate)
上面,最后一個參數(shù)是vbGeneralDate(按照給定前面的時間排版),vblongdate(星期,月,日,年),VBshortdate(月/日/年)
那個參數(shù)也可以替換為數(shù)字,0 vbGeneralDate
1 vblongdate
2 vbshortdate
3 vbLongTime
4 vbShortTime
查看東西的類型:typename(變量)
查看東西類型第二種:vartype(變量)
返回值:
0.empty 1.null 2 整數(shù)3 長整數(shù)(long intger)4單精度小數(shù)5雙精度小數(shù)
6貨幣(ccur())7日期8字符串9createobject10error11布爾類型12數(shù)組13vbdataobject
17 字節(jié)
判斷是否為數(shù)組:isarray(變量)
判斷是否為日期:isdate(變量)
IsNumeric(a) 判斷a是不是數(shù)字
判斷是否為空數(shù):isnull(變量)
判斷是否為空:isenpty(變量)
判斷是否為一個createobject:isobject(變量)
利用vbs導(dǎo)入庫:
dim objfso:set objfso=createobject("scripting.filesystemobject")
dim rvbfil:set rvbfil=objfso.opentextfile("文件名.vbs",1)
execute rvbfil.readall()
rvbfil.close()
接著就可以使用此vbs下的函數(shù)
class:
class 類名
public a
dim b
private c
定義屬性:
property get aa
d="? "
end property
property let aa(參數(shù))
代碼,比如變量=參數(shù)
end property
private c
private(public也行) sub class_initialize()
代碼
end sub
同上 sub class_terminate()
代碼
end sub
也可以定義函數(shù)
function f
end function
end class
使用:set x=new 類名
x.class_terminate
使用屬性:x.aa
get和let去調(diào)用:
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")
設(shè)置聲音: 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\")? ?讀取注冊表
寫入注冊表(創(chuàng)建一條):objwsh.regwrite "注冊表路徑,如HKEY_CLASSER_ROOT\VBSFile\Shell\Edit with Vbsedit\Icon","鍵值,如c:\Windows\system32\shell32.dll,269",注冊表的類型
寫入注冊表(創(chuàng)建文件夾)objwsh.regwrite "注冊表路徑\要創(chuàng)建的文件夾\,如HKEY_CLASSER_ROOT\VBSFile\Shell\Edit with Vbsedit\Test\",""
刪除注冊表 objwsh.regdelete "路徑"
字典:set c=createobject("scripting.dictionary")
添加元素:c.add "鍵","鍵值"
查看元素:c.items()()()()……(鍵下標,可以不填)要訪問的下標前面有多少個元素,前面就加多少個小括號
查看鍵值:c.keys()()()()(鍵值下標,可以不填)同上
查看字典內(nèi)項目的個數(shù):c.count()
刪除:c.remove(鍵)
清空字典:c.removeall()
多維字典:set c=createobject("scripting.dictionary")
a=array("","","")
c.add " ",a
正則表達式:
str="? ?"
set name=new regexp
設(shè)置正則模式:name.pattern="要搜索的字符"
這里面能寫的特殊字符:
\(? 左括號 \d{3} 后三位數(shù) \)?右括號 [\s-]破折號或空格 \b可作為結(jié)尾或開頭 |或者
[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
匹配對象所匹配結(jié)果中的子項集合:name.execute(str).item(指定字符串的序號,如0).submatches(子串)