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)

注意,如果要删除关键词的值的话 一定要在路径最后加上“”,如果不加斜线,就会删除

整个关键词。