2024年3月18日发(作者:)
vbscript脚本编程教学(1)
论坛上好多朋友都问关于脚本的问题,正好最近对脚本比较有兴趣,就写点东西吧。首先说
明一下,我的所有代码都是vbscript,jscript我没有研究过,不过我想也差不多。
关于最基础的语法比如变量的申明,分支,循环,函数的调用,等等这些我就不讲了,不懂
得自己看一下。
1、我们的第一个vbs程序:还是那个老得掉牙的冬冬。
**************************************************
dim hello
hello="hello world!"
hello
"this is my first vbs"
**********************************************************
可以看出有两种用法,这个不难。
可以直接双击运行,可以在当前目录的命令行输入:
cscript
2、在脚本中调用其他的程序:
使用run()方法,在使用前必须先建立shell的实例
**************************************************************
set ws=object("")
ret= ("notepad",3,true)
if ret=0 then
"succeed!"
else
"there is a error,the error number is:"
cstr(ret)
end if
***************************************************************************
这里run 有三个参数,第一个参数是你要执行的程序的路径
第二个程序是窗口的形式,
0是在后台运行;
1表示正常运行
2表示激活程序并且显示为最小化
3表示激活程序并且显示为最大化
一共有10个这样的参数我只列出了4个最常用的。
第三个参数是表示这个脚本是等待还是继续执行,如果设为了true,脚本就会等待调用的程
序退出后再向后执行。
注意到没有,我在run的前面还有一个接受返回值的变量,一般来说如果返回为0,表示成
功执行,如果不为0,则这个返回值就是错误代码,可以通过这个代码找出相应的错误。
3、inputbox 和msgbox
会vb的人对着两个东西应该很熟悉,用法也没什么差别
**************************************************************
input=inputbox("please enter you password","passwd")
if input<>"1234" then
msgbox "you enter a wrong passwd"
end if
***************************************************************************
当然你也可以给msgbox添加按钮,用一个变量接受用户的选择
例如:ret=msgbox “continue?”,vbyesnocancel
返回值和常量对照如下:
Vbok 1
Vbcancel 2
Vbabort 3
Vbretry 4
vbignore 5
vbyes 6
vbno 7
4、错误处理
和vb一样用on error resume next
这个没什么好说的,如果遇到了错误就跳过继续执行下一句
当然这个方法很弱智,还需要有一个方法,vbscript提供了一个对象err对象
他有两个方法clear,raise,5个属性:description,helpcontext ,helpfile,number,source
我们可以利用获得错误号例如
****************************************************
on error resume next
a=11
b=0
c=a/b
if <>0 then
& ption &
end if
**********************************************************
我们可以用来手工抛出错误
比如我们要产生一个path not found的错误 告诉用户,他填写的路径不对
****************************************************
on error resume next
76
msgbox "error :" & ption
**********************************************************
vbscript脚本编程教学(2)
我们来看一看怎么利用fso来进行文件操作。Fso时vbs里进行文件操作的核心。作为黑客,
不管学习什么语言,对文件的操作都应该是要了如指掌的,所以请大家仔细学习。
不说废话,先看fso由哪几个对象组成:
drive对象:包含储存设备的信息,包括硬盘,光驱,ram盘,网络驱动器
drives集合:提供一个物理和逻辑驱动器的列表
file 对象:检查和处理文件
files 集合:提供一个文件夹中的文件列表
folder对象:检查和处理文件夹
folders集合:提供文件夹中子文件夹的列表
textstream对象:读写文本文件
看看fso的方法:由于很多,所以我不会把每个的作用写出来,如果有不懂的,自己查一下
msdn。不要说没有哦
bulidpath:把文件路径信息添加到现有的文件路径上
copyfile
copyfolder
createfolder
createtextfile
deletefile
deletefolder
dreveexits
fileexits
folderexists
getabsolutepathname:返回一个文件夹或文件的绝对路径
getbasename:返回一个文件或文件夹的基本路径
getdrive:返回一个dreve对象
getdrivename:返回一个驱动器的名字
getextensionname:返回扩展名
getfile:返回一个file对象
getfilename:返回文件夹中文件名称
getfolder
getparentfoldername:返回一个文件夹的父文件夹
getspecialfolder:返回指向一个特殊文件夹的对象指针
gettempname:返回一个可以被createtextfile使用的随机产生的文件或文件夹的名称
movefile
movefolder
opentextfile
好了,看到这里我想大家也明白了一大半,可能后面都不用我多说了,脚本就是这么简单,
呵呵呵,还是继续把。
1、使用fso
由于fso不是wsh的一部分,所以我们需要建立他的模型
例如set fs=object(“stemobject”)
这样就建立了fso的模型。如果要释放的话也很简单,set fs=nothing
2、使用文件夹
创建:
在创建前我们需要检查是否存在,看一下程序
********************************************************
dim fs,s
set fs=object("stemobject")
if (exists("c:temp")) then
s="c:temp is available"
else
s="c:temp is not exist"
set foldr=folder("c:temp")
end if
s
**********************************************************
删除、拷贝、移动
删除:
********************************************************
set fs=object("stemobject")
folder("c:temp")
**********************************************************
拷贝:
********************************************************
set fs=object("stemobject")
lder "c:data","d:data"
**********************************************************
注意,如果这个时候c:data 和d:data都存在,会出错,复制也就会停止,如果要强制覆盖,
使用lder "c:data","d:data",true
移动:
********************************************************
set fs=object("stemobject")
lder "c:data","d:data"
**********************************************************
关于通配符:
我们可以使用统配符,来方便操作:
例如,lder "c:datate*","d:working"
注意到没有,我在目的路径最后没有使用“” 也就是说我没有这样写:
lder "c:datate*","d:working"
这样写的话,如果d:working 目录不存在,windows就不会为我们自动创建这个目录。
还有一点,大家注意到没有 上面说的都没有涉及到folder对象,我们都是在利用fso提供
的方法,当然利用folder一样可以的:
********************************************************
set fs= object("stemobject")
set f=der("c:data")
'删除。如果有子目录,也会被删除
"d:working",true '拷贝到d:working
"d:temp" '移动到d:temp
*****************************************************************
特殊文件夹
一般指的就是系统文件夹:windowssystem32,临时文件夹,windows文件夹
看下面,我们使用环境变量来获得windows目录,关于环境变量我们会在后面详细讲道,
如果我忘记了 请大家提醒我
********************************************************
set fs=object("stemobject")
set wshshell=object("")
osdir=environmentstrings("%systemroot%")
set f =der(osdir)
f
******************************************************************
当然,还有简单的方法 那就是使用getspecialfolder()
这个方法使用3种值:
0 表示windows文件夹,相关常量是windowsfolder
1 系统文件夹,相关常量是systemfolder
2 临时目录,相关常量temporaryfolder
看下面的例子:
***************************getspecialfolder***************************
set fs=object("stemobject")
set wfolder=cialfolder(0) '返回windows目录
wfolder
set wfolder=cialfolder(1) '返回system32
wfolder
set wfolder=cialfolder(2) '返回临时目录
wfolder
******************************************************************
3、使用文件
使用文件属性:
文件夹的属性我没有说,大家可以从文件属性里举一反三
文件属性常用的就是:
normal 0
readonly 1
hideen 2
readonly+hideen 3
system 4
readonly+system 5
hideen +system 6
readonly+hideen +system 7
****************************************************
set fs=object("stemobject")
set f=e("d:")
f
if utes<7 then
utes=utes+1
else utes=0
end if
if utes=0 then
"normal"
end if
if utes=1 then
"readonly"
end if
if utes=2 then
"hideen"
end if
if utes=3 then
"readonly+hideen"
end if
if utes=4 then
"system"
end if
if utes=5 then
"readonly+system"
end if
if utes=6 then
"hideen +system"
end if
if utes=7 then
"readonly+hideen +system"
end if
******************************************************************
这里由于不知道d:的文件属性,所以会发生不可预测的结果,如果文件的属性是0,
那么就会变成1。所以最好在改变属性前查询
创建
创建前需要检查文件是否存在,方法和前面说的文件夹的方法一样
**********************************************************
set fs=object("stemobject")
if ists("c:") then
s="available"
else
s="not exist"
set f=textfile("c:")
end if
******************************************************************
当然 我们也可以使用set f=textfile(“c:”,true)
来强制覆盖已存在的文件。
复制移动删除文件
和文件夹一样 我们既可以使用fso提供的方法也可以用file对象
set fs=object("stemobject")
le "c:","d:",true '复制文件,如果已存在就强制覆盖
le "c:","d:" '移动
file "c:" '删除
vbscript脚本编程教学(3)
使用vbscript来读写文件,十分的方便,废话少说,切入正题。
1、打开文件
使用opentextfile方法
**************************************************
set fs =createobject("stemobject")
set ts=xtfile("c:",1,true)
******************************************************************
注意这里需要填入文件的完整路径,后面一个参数为访问模式
1为for reading
2为for writing
8为for appending
第三个参数指定如果指定文件不存在,是否创建。
2、读取文件
读取文件的方法有三个
read(x)读取x个字符
readline读取一行
readall全部读取
例如:
******************************************************
set fs =createobject("stemobject")
set ts=xtfile("c:",1,true)
value=(8)
value
line=ne
line
contents=l
contents
******************************************************************
这里还要介绍几个指针变量:
textstream对象的atendofstream属性。当处于文件结尾的时候这个属性返回true.我们可以用
循环检测又没有到达文件末尾。例如:
set fs =createobject(“stemobject”)
set f=e(“c:”,1,false)
set ts=textstream(1,0)
do while fstream<>true
(1)
loop
还有一个属性,atendofline,如果已经到了行末尾,这个属性返回true.
Textstream对象还有两个有用的属性,column和line.
在打开一个文件后,行和列指针都被设置为1。
看一个综合的例子吧:
*************************************************************
set fs =createobject("stemobject")
set f=xtfile("c:",1,true)
do while fstream<>true
data=""
for a=1 to 5
if fstream<>true then
data=data+ne
end if
next
dataset=dataset+1
"data set " &dataset &" :" &data
loop
******************************************************************
最后说一下在文件中跳行
skip(x) 跳过x个字符
skipline 跳过一行
用法也很简单 和前面一样,就不说了。
3、写文件
可以用forwriting和forappending方式来写
写有3各方法:
write(x)
writeline
writeblanklines(n) 写入n个空行
来看一个例子:
*****************************************************
data="hello, I like script programing"
set fs =createobject("stemobject")
if (ists("c:")) then
set f =xtfile("c:",8)
data
ine data
else
set f=xtfile("c:",2, true)
lanklines 2
data
end if
******************************************************************
注意 写完文件以后一定要关闭!!!!!!! 还有就是,如果要读文件又要写文件,读完之后一
定也要记得关闭,这样才能以写的方式打开。
好了 关于文件都说完了,实际运用中还有可能牵扯到关于字符串的操作。
后面的1章里面,我打算写一点驱动器和注册表的内容,脚本编程内容也很丰富,我也只讲
关于黑客方面的。
vbscript脚本编程教学(4)
驱动器的编程对黑客编程来说至关重要。好在vbs给我们提供了方便的集合,使得工作变得
很简单。
1、检查驱动器
使用filesystemobject的driveexists方法
例如:
**********************************************
set fs=createobject("stemobject")
if xists("h") then
"h is exist"
end if
**********************************************************
2、获得驱动器属性
可以使用getdrive方法,然后可以通过drive对象的属性或的驱动器的属性。常用属性有
drivetype:以整数形式返回驱动器的类型
0 表示unknown
1 表示可移动的
2 表示固定的
3 表示网络驱动器
4 表示cd-rom
5 表示ram盘
freespace:可用空间
totalsize:总空间
volumename:驱动器标卷
例如:
**********************************************
set fs=createobject("stemobject")
set drv=ve("D")
t=ype
y=ace
"类型:" &t
"可用空间:" &y
*******************************************************
如果大家还记得的话,应该知道还有个drives集合,这个东西比前面所说得更方便,比如我
们要得到系统上所有的驱动器可以得到这个集合,然后使用foreach来检查。另外,有时候
我们要编制一个病毒,可能会要感染软盘,这个时候我们需要检查软盘是不是准备好了,看
下面这个程序:
*******************************************
getdrivelist()
function getdrivelist() '自定义函数
dim fs,d,dc,s,n,crlf
crlf=chr(13)&chr(10)
set fs=createobject("stemobject")
set dc= '获得驱动器集合
for each d in dc
n=""
s=s &etter & "--"
if ype=remote then
n=ame
elseif y then
n=name
end if
s=s & n& crlf
next
getdrivelist=s
end function
***********************************************************
3、映射网络驱动器
网络共享对于脚本用户来说必须经过映射才能够使用。使用network对象的mapnetworkdrive
方法可以实现映射。
**********************************************
set wn=object("k")
workdrive "k:","192.168.84.128Software",true
**********************************************************
其中最后一个参数指定是不是永久的映射,如果不写最后一个参数,下次启动的时候,映射
就会被取消。
如果要断开映射使用networkdrive "k:",true,true
如果网络驱动器正在使用中,要强制断开的话把第二个参数设置为true
第三个参数表示永久取消映射。
vbscript脚本编程教学(5)
注册表,修改注册表是编程的一个基本技能,脚本编程当然也不例外。
这里,我就不再讲解注册表的基本结构。
1、读注册表的关键词和值:
可以通过把关键词的完整路径传递给wshshell对象的regread方法
例如:
set ws=object("")
v=d("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionR
unPHIME2002A")
v
2、写注册表
有读就有写了,使用wshshell对象的regwrite方法
看例子:
path="HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun"
set ws=object("")
t=te(path & "jj","hello")
这样就把
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunjj这个
键值改成了hello.
3、删除关键字和值
使用regdelete方法,把完整的路径传递给regdelete就可以了
例如
val=(path)
注意,如果要删除关键词的值的话 一定要在路径最后加上“”,如果不加斜线,就会删除
整个关键词。


发布评论