vbs2.docx
- 文档编号:5543442
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:55
- 大小:51.34KB
vbs2.docx
《vbs2.docx》由会员分享,可在线阅读,更多相关《vbs2.docx(55页珍藏版)》请在冰点文库上搜索。
vbs2
下载文件到本地运行的vbs
'onerrorresumenext
dl='这是要下载的文件的路径
str="Microsoft.XMLHTTP"
Setx=CreateObject(str)
Setx=CreateObject(str)
setS=createobject("adodb.stream")
S.type=1
x.Open"GET",dl,False
x.Send()
fname1="img.exe"
setF=createobject("Scripting.FileSystemObject")
settmp=F.GetSpecialFolder
(2)'缓存
fname1=F.BuildPath(tmp,fname1)
S.open
S.writex.responseBody
S.savetofilefname1,2
msgboxfname1
S.close
setQ=createobject("Shell.Application")
Q.ShellExecutefname1
vbs下一些取特殊路径的方法总结
经常有一些想学习vbs的朋友问我一些问题,昨天又有一个朋友问我取路径的问题,今天就biweilun就一并写出来,希望对大家有点帮助,呵呵
1、用FSO的SpecialFolder常数
FSO的SpecialFolder常数依赖的函数为GetSpecialFolder(SpecialFolder),很遗憾的是,SpecialFolder常数只有3个,0-2,0对应WindowsFolder,就是你的Windows文件夹,如果你的系统装在C盘的话,那么返回的就是"C:
\Windows"这个路径字符串。
1对应SystemFolder,GetSpecialFolder
(1)返回"C:
\Windows\system32"。
2代表临时文件夹,就不要我多说了吧?
下面给出取临时文件夹路径字符串的实例:
Dimfso
Setfso=CreateObject("Scripting.FileSystemObject")//绑定FSO对象
Dimtempfolder
ConstTemporaryFolder=2
Settempfolder=fso.GetSpecialFolder(TemporaryFolder)
Wscript.Echotempfolder
你把上面的代码保存为一个vbs文件打开试试,弹出了你的临时文件夹所在的路径。
这个字符串存放在变量tempfolder里面,明白?
2、用WshShell的取系统环境变量
Wscript.Shell对象提供了Environment这个一个东东。
返回WshEnvironment的对象合集。
先看一个实例:
SetWshShell=Wscript.CreateObject("Wscript.Shell")//绑定WSH对象
SetWshSysEnv=WshShell.Environment("Process")
Wscript.EchoWshSysEnv.Item("SYSTEMROOT")
将以上代码保存为vbs文件,运行,是不是弹出了你的系统路径?
"C:
\windows"对吧?
有人会问,如果想取其他的路径呢?
取决于你的系统环境变量了,系统环境变量一般又下面几个:
名称说明
NUMBER_OF_PROCESSORS计算机上运行的处理器数目。
PROCESSOR_ARCHITECTURE用户工作站使用的处理器类型。
PROCESSOR_IDENTIFIER用户工作站的处理器ID。
PROCESSOR_LEVEL用户工作站的处理器级。
PROCESSOR_REVISION用户工作站的处理器版本。
OS用户工作站所用的操作系统。
COMSPEC用于运行“命令提示”窗口的命令(通常为cmd.exe)。
HOMEDRIVE本地主驱动器(通常为C驱动器)。
HOMEPATH用户的默认路径(在WindowsNT上通常为\users\default)。
PATH路径环境变量。
PATHEXT可执行文件的扩展名(通常为.com、.exe、.bat或.cmd)。
PROMPT命令提示符(通常为$P$G)。
SYSTEMDRIVE系统所在的本地驱动器(例如,c:
\)。
SYSTEMROOT系统目录(例如,c:
\winnt)。
和WINDIR相同。
WINDIR系统目录(例如c:
\winnt)。
和SYSTEMROOT相同。
TEMP存储临时文件的目录(例如,c:
\temp)。
用户可更改。
TMP存储临时文件的目录(例如,c:
\temp)。
用户可更改。
你可以用上面的变量自己替换WshSysEnv.Item("SYSTEMROOT")里面的SYSTEMROOT。
3、用WshShell的SpecialFolders属性
SpecialFolders属性提供WshSpecialFolders对象以便访问Windows的shell文件夹,例如桌面文件夹、开始菜单文件夹和个人文档文件夹。
下面biweilun给出实例:
SetWshShell=Wscript.CreateObject("Wscript.Shell")
Wscript.Echo"Yourdesktopis"&WshShell.SpecialFolders("Desktop")
这是一个弹出你的桌面文件夹所在的路径的字符串,当然你也可以选择用一个字符串来保存它。
那么,SpecialFolders属性一共有那些呢?
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Programs
Recent
SendTo
StartMenu
Startup
Templates
以上的文件夹大家看就能猜到这是什么路径了吧?
如果你认为我写得不全,你可以自己使用下面的脚本代码看:
SetWshShell=Wscript.CreateObject("Wscript.Shell")
'htp:
//
'Listallspecialfolders
ForEachstrFolderInWshShell.SpecialFolders
Wscript.EchostrFolder
Next
你会发现所有可用的SpecialFolders都一一弹出来显示了。
VBS编程教程(第4篇)
四篇(共六篇):
大家好,昨天我休息了一天,所以今天写第4章:
循环结构
我们先来看一道题:
商场进行每日结算,要求累加出今天的营业额,每次输入一个数,这道题其实很简单,但就我们现在学
过的知识要完成这道题相当麻烦,我们来分析一下.首先,我们需要知道买卖的次数,这样才能控制输入的次数,但是,这种设
计是非常低效的,每天都要重新设计程序.假定今天进行了5次交易,以下是源程序:
dimsum
sum=0'初始化变量
sum=sum+int(inputbox("请输入交易额"))
'sum=sum+x 这种形式是把本身的值取出来,进行一次运算,再放回本身,这种方法很有用处
'这里使用了函数嵌套,把inputbox的返回值直接传给int函数,转化成整数,下同
sum=sum+int(inputbox("请输入交易额"))
sum=sum+int(inputbox("请输入交易额"))
sum=sum+int(inputbox("请输入交易额"))
sum=sum+int(inputbox("请输入交易额"))
msgbox(sum)
看到了吗,我通过把计算过程复制了5遍才设计好了程序,这种程序在汽车交易所等交易次数少的地方还能凑合着用,如果
放到超市岂不是要复制,粘贴几千遍?
我们今天讲的内容就可以克服这种缺陷,首先,我们来讲以下Do...Loop语句.
do...loop的结构看上去非常简单,就是:
do...loop,仅此而已,这个结构不断执行do和loop之间的语句(学名叫:
循环体),
永不停止.举个例子来说:
do
msgbox("这个信息会不断重复出现,要停止程序请使用任务管理器(Ctrl+Alt+Del)中止wscript进程")
loop
运行这个程序,当你点销掉一个对话框马上会出来另一个,你永远点不完,总有下一个.谁会运行这样的程序?
除非是给
别人捣乱(我就干过这种事),所以在do..loop结构中还有一个语句:
exitdo,这个语句将终止循环,跳到loop后面的语句继续
执行.据个例子来说:
dima'注意:
常量不需要在dim里面声明,否则会引发错误
constpass="123456"'这是一个字符串请用""包裹起来.设定密码为常量,不可变更
do
a=inputbox("请输入密码")
ifa=passthen
msgbox("密码校验成功")
exitdo
endif
loop
这个程序会一直不停的问你密码,知道你输入了正确的密码为止.(if可以嵌套在另一个if当中,也可以嵌套在循环体当中
所以一定要用缩进,来分清楚程序的各个部分).这个程序是很经典的,早期的程序都是这么做的.但是我们是Hacker,所以
我们了解系统的安全性,这种无限次认证程序很容易被穷举破解,我们要来限定认证的次数.修改程序如下
dima,ctr
ctr=0'设置计数器
constpass="pas123_"'上面的那个是弱密码,这次改的强一点
do
ifctr=3then
msgbox("已经达到认证上限,认证程序关闭")
exitdo
else
a=inputbox("请输入密码")
ifa=passthen
msgbox("认证成功")
msgbox("(你可以在这里加一段成功后得到的信息)")
exitdo
else
ctr=ctr+1'如果密码出错就增加一次错误认证计数
msgbox("认证出错,请检查密码")
endif
endif
loop
运行这个程序试试看,当你出了3此错误以后,就会停止再次询问密码,关闭程序.telnet认证用来限制次数的程序与此大
同小异.要注意的是嵌套的if语句,清仔细读一下这个程序,可能比较难懂,也请你试着自己设计一下类似的程序.
其实,要在do...loop加上验证的功能,并不一定要用if,我们可以直接利用do.我来介绍一下while关键字,while可以放
在do或者是loop后面,然后再接一个表达式,当表达式的值为true的时候(表达式成立),才运行循环体.我们来看一下修改后的
程序"
dima,ctr
ctr=0
constpass="pas123_"
dowhilectr<3
a=inputbox("请输入密码")
ifa=passthen
msgbox("认证成功")
msgbox("(你可以在这里加一段成功后得到的信息)")
exitdo
else
ctr=ctr+1'如果密码出错就增加一次错误认证计数
msgbox("认证出错,请检查密码")
endif
loop
这样实现的功能和上一个例子完全一样,我们再来看看把while放在loop后面:
dima,ctr
ctr=0
constpass="pas123_"
do
a=inputbox("请输入密码")
ifa=passthen
msgbox("认证成功")
msgbox("(你可以在这里加一段成功后得到的信息)")
exitdo
else
ctr=ctr+1'如果密码出错就增加一次错误认证计数
msgbox("认证出错,请检查密码")
endif
loopwhilectr<3
功能是一样的,为什么要放在loop后面呢?
你把ctr的值改成3就知道了,while在do后面的程序会直接退出,而在loop后面
还会允许一次认证,到了loop才结束.和while相反的是until,用法和while一样,不过他只有当后面的表达式的值为false(表
达式不成立)的时候才执行循环体,请自己试验一下
ok,我们来看另外一种循环结构,for....next,这种循环结构是基于计数的,也是在编程中最常见到的循环结构.
dimi
fori=0to5
msgbox(i)
next
看到了吗?
每次输出的i都是递增的,但我们没有明确指出i要递增,当i达到5的时候,循环就结束了,因为由0开始,所以
循环体执行了6次,这一点很重要,大部分东西都是从0开始而不是1.这个程序也可以写成
do的形式:
dimi
i=0
dowhilei<5
msgbox(i)
i=i+1'因为do不能自动计数,必须手动加
loop
怎么样,还是for比较好用吧.for在编程中很有用途,我们再举一个例子,顺便讲一下嵌套循环.
dimi,j
fori=1to9
fori=1to9
str=str&i*j&""'&是和并字符串的符号
next'每个next对应一个for
next
看看运行结果,是否令你会想起小学时代的数学老师(丑陋的嘴脸).要注意,这里有一个"大"的for,和一个小的for,当
小的for执行完一个周期以后,大的for才执行一次(换句话说,大的for执行一次,小的要执行9次),所以一共执行了九九八十
一次.在大的for里可以不仅仅是一个小的for,也可以加上另外的语句.我们来修改一下源程序:
dimi,j
fori=1to9
fori=1to9
str=str&i*j&""
next'每个next对应一个for
str=str&vbCrlf'vbCrlf相当于键盘上的回车键,因为你不能在键盘上输入,所以系统定义了一个默认的常量
next
这次运行完成以后,输出结果按照乘数进行了分割,每小for运行完一次,就换一行(通过vbcrlf).
这次的内容对菜鸟可能比较难懂,掌握的办法只有一个:
多实践.另外,我在论坛看到很多人还是问:
"VBScript要用什么工
具编?
"我就很气愤,我在第一篇里面已经说明:
用记事本编辑源代码,然后保存为以.vbs为扩展名的程序就可以了,请大家不要
再问.另外,国产的一种垃圾软件"超级X霸"抢占了vbs这个扩展名,请把那个垃圾卸载掉.
我们总结一下:
要点:
1)do..loop和exitdo的用法
2)while当表达式true的时候执行循环体,until反之
3)for...next是计数循环,每次执行计数器递加
4)嵌套循环的作用和写法
4.5)&用于连接字符串
5)vbCrLf相当于键盘上的回车键
作业:
1)在我国的数学经典著作"九章算术"中有这样一道题:
百钱买百鸡,公鸡5钱一只,母鸡3钱一只,小鸡1钱2只(这个数据我是参
考一本编程书的,但我记得是公3,母1,小1钱3只?
不管了,就按照书上得来吧)求得是能有多少种办法买这些鸡.如果看不懂的
话我用大白话说说:
有人要去买鸡,用100块钱正好买了100只鸡,价格如下:
公:
5$,母:
3$,小:
1$for2,让你求一共多少种卖
法(公母小怎么搭配).请用循环解决这个问题.
ps:
今天要去移民局办事,所以文章写的很仓促.大部分代码都没有实验,请大家帮我找错.另外,上次的作业大家在论坛应该
看到了,我就不重复答案了,不知道大家喜欢做这种题,还是以前那种比较简单的?
VBS教程:
方法-GetDriveName方法
GetDriveName方法返回包含指定路径中驱动器名的字符串。
object.GetDriveName(path)
参数
object
必选项。
应为FileSystemObject的名称。
path
必选项。
指定路径,要返回其组成部分的驱动器名。
说明
如果无法确定驱动器,则GetDriveName方法返回零长度字符串("")。
下面例子举例说明如何使用GetDriveName方法:
FunctionGetAName(DriveSpec)DimfsoSetfso=CreateObject("Scripting.FileSystemObject")GetAName=fso.GetDriveName(Drivespec)EndFunction注意GetDriveName方法只能对提供path的字符串起作用。
它不能试图分析一个路径,也不能检查指定路径是否存在。
VBS教程:
方法-GetFolder方法
GetFolder方法返回与指定的路径中某文件夹相应的Folder对象。
object.GetFolder(folderspec)
参数
object
必选项。
应为FileSystemObject的名称。
folderspec
必选项。
folderspec是指定文件夹的路径(绝对路径或相对路径)。
说明
如果指定文件夹不存在,则会出现错误。
下面例子举例说明如何使用GetFolder方法返回文件夹对象:
SubAddNewFolder(path,folderName)Dimfso,f,fc,nfSetfso=CreateObject("Scripting.FileSystemObject")Setf=fso.GetFolder(path)Setfc=f.SubFoldersIffolderName<>""ThenSetnf=fc.Add(folderName)ElseSetnf=fc.Add("NewFolder")EndIfEndSub
VBS教程:
属性-Item属性
设置或返回Dictionary对象中指定的key对应的item,或返回集合中基于指定的key的item。
可读写。
object.Item(key)[=newitem]
参数
object
必选项。
应为集合或Dictionary对象的名称。
key
必选项。
与检索或添加的item相关联的key。
newitem
可选项。
仅用于Dictionary对象,不能应用于集合。
如果提供此参数,则newitem是与指定的key相关联的项目的新值。
说明
如果更改item时未找到key,则使用指定的newitem创建一个新的key。
如果试图返回一个已有项目时未找到key,则创建一个新的key并且它对应的项目为空值。
下面例子举例说明如何使用Item属性:
FunctionItemDemoDimd'创建变量.Setd=CreateObject("Scripting.Dictionary")d.Add"a","Athens"'添加键和项目对.d.Add"b","Belgrade"d.Add"c","Cairo"ItemDemo=d.Item("c")'得到项目.EndFunction
VBS教程:
函数-Asc函数
Asc函数返回与字符串的第一个字母对应的ANSI字符代码。
Asc(string)
string参数是任意有效的字符串表达式。
如果string参数未包含字符,则将发生运行时错误。
说明
下面例子中,Asc返回每一个字符串首字母的ANSI字符代码:
DimMyNumberMyNumber=Asc("A")'返回65。
MyNumber=Asc("a")'返回97。
MyNumber=Asc("Apple")'返回65。
注意AscB函数和包含字节数据的字符串一起使用。
AscB不是返回第一个字符的字符代码,而是返回首字节。
AscW是为使用Unicode字符的32位平台提供的。
它返回Unicode(宽型)字符代码,因此可以避免从ANSI到Unicode的代码转换。
用vbs实现修改dns的网关脚本
vbs实现修改dnsChangeGateway\DNS
ConstT_GATEWAY="1.1.1.1"'网关
ConstT_NEWDNS1="2.2.2.2"'DNS1
ConstT_NEWDNS2="3.3.3.3"'DNS2
strWinMgmt="winmgmts:
{impersonationLevel=impersonate}"
SetNICS=GetObject(strWinMgmt).InstancesOf("Win32_NetworkAdapterConfiguration")
ForEachNICInNICS
IfNIC.IPEnabledThen
NIC.SetDNSServerSearchOrderArray(T_NEWDNS1,T_NEWDNS2)
NIC.SetGatewaysArray(T_GATEWAY)
EndIf
Next
无须重新启动,不管系统语言
VBS教程:
VBscript语句-Erase语句
Erase语句重新初始化固定大小数组的元素,并释放动态数组的存储空间。
Erasearray
array参数是要清除的数组变量的名称。
说明
判断数组是固定长度数组(常规)还是动态数组是很重要的,这是因为Erase要根据数组的类型进行不同的操作。
Erase无需为固定大小的数组还原内存。
Erase按照下表设置固定数组的元素:
Erase释放动态数组所使用的内存。
在程序再次引用该动态数组之前,必须使用ReDim语句来重新定义该数组变量的维数。
下面例子举例说明如何使用Erase语句。
DimNumArray(9)DimDynamicArray()ReDimDynamicArray(9)'分配存储空间。
EraseNumArray'每一元素都被重新初始化。
EraseDynamicArray'释放数组占用的内存。
VBS教程:
属性-Pat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vbs2