《VBS脚本编程简明教学教育资料.doc》由会员分享,可在线阅读,更多相关《VBS脚本编程简明教学教育资料.doc(92页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第一章第一章 VBS 脚本编程简明教程脚本编程简明教程第一节第一节 Vbs 脚本编程简明教程之一脚本编程简明教程之一为什么要使用为什么要使用 Vbs?在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复 性劳动,例如你每周也许需要对一些计算机文件进行复制、粘贴、改名、删除, 也许你每天启动计算机第一件事情就是打开 WORD,切换到你喜爱的输入法进 行文本编辑,同时还要播放优美的音乐给工作创造一个舒心的环境,当然也有可 能你经常需要对文本中的某些数据进行整理,把各式各样的数据按照某种规则排 列起来。这些事情重复、琐碎,使人容易疲劳。 第三方软件也许可以强化计算机的某些功能,
2、但是解决这些重复劳动往往事 倍功半,我也尝试过使用计算机语言编写程序来解决这些问题,但是随之而来的 命令、语法、算法、系统框架和类库常常让我觉得这样是否有必要,难道就是因 为猪毛比较难拔,所以我就要去学习机械,为自己设计一个拔猪毛机(?)吗? Vbs 是一种 Windows 脚本,它的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化 BASIC 脚本版),VBS 是 Visual Basic 的的一个抽象子集, 是系统内置的,用它编写的脚本代码不能编译成二进制文件,直接由 Windows 系统执行(实际是一个叫做宿主 host 的解释源代码并执
3、行) ,高效、易学,但是 大部分高级语言能干的事情,它基本上都具备,它可以使各种各样的任务自动化, 可以使你从重复琐碎的工作中解脱出来,极大的提高工作效率。 我个人认为 Vbs 脚本其实就是一种计算机编程语言,但是由于缺少计算机程 序设计语言中的部分要素,对于事件的描述能力较弱,所以称为脚本,它最方便 的地方就是提供了对 COM 对象的简便支持。那么什么是 COM 对象呢? 我这样理解,COM 对象就是一些具有特定函数功能项程序模块,他们一般 以 ocx 或者 dll 作为扩展名,你只要找到包含有你需要的功能的模块文件,并在 脚本中规范的引用,就可以实现特定的功能,也就是说 Vbs 脚本就是调
4、用现成的 “控件”作为对象,用对象的属性和方法实现目的,完全免去了编写代码、设计算 法等等麻烦。说白了,我不是觉得拔猪毛麻烦么?我发觉 xx 机(比如真空离心 器)有一个功能可以实现脱毛,ok,我把它拿来给猪脱毛。什么?大材小用?太 浪费资源了?天哪,那是计算机芯片的事情,死道友不死贫道,反正我的事情是 方便快速的解决了,这就行了。 最方便的是它甚至不需要专门的开发环境,在你的计算机中,只要有 notepad,就可以编写 Vbs 脚本了,并且可以直接执行。第二节第二节 Vbs 脚本编程简明教程之二脚本编程简明教程之二如何开始第一个如何开始第一个 Vbs脚本?脚本?就像多数计算机教程一样 ,我们
5、从“Hello World!”程序开始我们的练习。 什么?不知道是什么意思?就是说大部分的计算机程序设计教程开篇入门都是编 写一个小程序,执行这个程序的结果就是在计算机的屏幕上或者 dos 窗口中显示 一行文字:Hello World!好了,我们开始吧。 打开你的“记事本”程序,在编辑窗口填写:msgbox “Hello World!“ 然后用鼠标单击“文件”菜单,单击“保存”,把“保存在”一栏设为桌面,在“文 件名”一栏中填写 kk.vbs,单击“保存”就可以了。然后最小化“记事本”窗口,在桌 面上寻找你刚刚保存的 kk.vbs,然后双击。看到弹出的对话框了没有,单击“确 定”,对话框消失了
6、。难看了点,不过确实是你编写的第一个脚本程序。 说 明之一:上面的操作中,保存位置放在桌面,仅仅是为了执行方便,你 保存到其他的地方完全没有问题,只要你知道你保存在什么地方就可以了,什么? 是废话,自 己保存的当然知道保存在那里了。不,自己保存的文件自己找不到 的人我见的多了去了。文件名你可以随意填写,不一定非要写 kk,只要符合 Windows 的文件命名规则就可以了,但是扩展名必须是 vbs,什么?不知道什么是 扩展名?就是文件名中“.”后的那部分,简单说,就是 vbs 脚本文件命名时必须是: xxx.vbs,其中 xxx 你随意。 说明之二:在记事本编辑窗口中写的这行是什么意思? Msg
7、box 是 VBS 内 建的函数,每一个函数都可以完成一定的功能,你只需 要按照语法要求,在函数的相应部分填写相应的内容就可以了,这部分内容我们 称为参数,当然函数执行的结 果我们称为返回值,一个函数可以有返回值也可 以没有,可以有参数也可以没有。你不用了解函数是怎么运作的,只要了解这个 函数能干什么就行了。 Msgbox 语法:msgbox “对话框内容“, , “对话框的标题“ 你不妨用记事本打开刚才的文件在编辑窗口中输入: msgbox “Hello World!“ , , “系统提示“ 执行一下,看看效果和位置。 说明之三:如果执行失败,看看你的标点符号,所有的标点符号必须是在英 文状
8、态下输入的。 当然,这个脚本实在是太简单了,甚至连最简单的交互都没有,所以你可以 把脚本这样修改一下: Dim name name=Inputbox(“请输入你的名字:“,“名称“) Msgbox name, , “您的名字是“ 保存执行一下,看到弹出的对话框了么?填入你的名字,点确定,看到结果 了吗? 说明之一:第一句是定义变量,dim 是定义变量的语句 其格式为:dim 变量 1,变量 2, Vbs 只有一种变量类型,所以不用声明变量类型。系统会自动分辨变量类型。说明之二:inputbox 是 VBS 内建的函数,可以接受输入的内容,其语法格 式为: Inputbox(“对话框内容“,“对
9、话框标题“) 第二句的意思是接受用户的输入,并把输入结果传递给变量 name。 好了,到此脚本基本的输入输出函数都有了,已经可以完成一些比较简单的 功能了,你可以编写一个简单的脚本,然后拷贝的“程序”“启动”中,然后重 新启动计算机看看结果。第三节第三节 Vbs 脚本编程简明教程之三脚本编程简明教程之三Vbs 的基本语法的基本语法(牢记)(牢记)VBScript 基础知识 一、变量 1、所有单引号后面的内容都被解释为注释。 2、在 VBScript 中,变量的命名规则遵循标准的命名规则,需要注意的是: 在 VBScript 中对变量、方法、函数和对象的引用是不区分大小写的。在申明变 量时,要显
10、式地申明一个变量,需要使用关键字 DIm 来告诉 VBScript 你要创 建一个变量,并将变量名称跟在其后。申明多个同类型变量,可以用逗号分隔。 注意:VBScript 中不允许在申明变量的时候同时给变量赋值。但是允许在一行 代码内同时对两个变量进行赋值,中间用冒号分隔。 3、你可以使用 OptionExplicit 来告诉宿主变量必须先声明后使用。 4、VBScript 在定义时只有一种变量类型,在实际使用中需要使用类型转换 函数来将变量转换成相应的变量类型。 Cbool 函数将变量转换成布尔值; Cbyte 函数将变量转换为 0 到 255 之间的整数。 Ccur 函数、Cdbl 函数和
11、 Csng 函数将变量转换为浮点数值,前者只精确到 小数点后四位,后两者要更加精确,数值的范围也要大的多。 Cdate 函数将变量转换为日期值。 Cint 函数和 Clng 函数将变量转换为整数,后者的范围比前者要大的多。 Cstr 函数将变量转换为字符串。 二、数组 数组的定义与变量非常类似,只需要在变量后描述这个数组的个数和维数。 需要注意的是:数组的下标总是从 0 开始,而以数组定义中数值减一结束。也 就是说你以要定义一个有十个数据的数组,将这样书写代码:dImarray(9) , 同样,当你要访问第五个元素时,实际的代码是 array(4)。当然,你可以通过不 指定数组的个数和维数来申
12、明动态数组。等到数组的个数和维数固定后,使用 关键字 redim 来改变数组。注意,在改变数组的大小时,数组的数据会被破坏, 使用关键字 preserve 来保护数据。例如: RedIm 空格 preserve 空格 array 括号个数逗号维数括号 三、操作符 在 VBScript 运算符中,加减乘除都是我们常用的符号,乘方使用的是 , 取模使用的 Mod。 在比较操作符中,等于、小于、大于、小于等于、大于等于都与我们常用 的符号是一致的,而不等于是小于和大于连用。 逻辑运算符为:和操作AND 非操作NOT 或操作OR; 你可以使用操作符 +和操作符 Data Source=d:shujuk
13、u.mdb“ Set tbl=createobject(“ADOX.Table“) tbl.Name =“MyTable“ tbl.Columns.Append “姓名“, 202 adInteger tbl.Columns.Append “性别“, 3 adInteger tbl.Columns.Append “工作单位“, 202 ,50 adVarWChar cat.Tables.Append tbl 不过你要操纵数据库就连一个数据库也不建,未免懒惰了点,用代码虽然可 以完成,但是我觉得对数据约束完成的比较困难,本代码也就是示范个例子,并 不推荐使用此类方法。 2、打开数据库 Provi
14、der=Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=“ Set Objconn = createobject(“ADODB.Connection“) Objconn.Open Provider & “数据库名称“ 3、创建记录集 Set Objrs = CreateObject(“ADODB.Recordset“) 4、执行 SQL 查询语句 Sql=“SQL 查询语句“ 例如:Select count(*) from table1 Set objrs = objconn.execute(sql)一般情况下,我们将绝大多数的操作转化为 SQL
15、语句完成。 常用的 SQL 语句 在学习 SQL 语句之前,让我们先来对数据库做一个基本的了解。一个数据 库中可能包含了很多个基本单位叫做表。表格被分为“行”和“列”。每一行代表表 的一个单独组成部分,每一列代表相同性质的一组数据。举例来说,如果我们有 一个记载顾客资料的表格,行包括姓、名、地址、城市、国家、生日等。而一列 则代表了所有的地址或者国家等。 一、建立数据表,我们前边说过利用 ADOX.Catalog 建立数据库和数据表的 方法,但是用的似乎不是很多,一般情况下,如果我们需要在数据库中动态建立 一个表,我们将工作交给 SQL 语句来做,其基本语法是: CREATE TABLE 表格
16、名(列名 1 数据类型 , 列名 2 数据类型,. ) 例如我们要建立一个基本顾客表: Create table 顾客表(姓名 text(8), 性别 text(2) ,住址 text(30) 二、插入数据项 insert into 数据表名称 (数据项 1,数据项 2,.) values (值 1,值 2,.) insert into 语句用来添加新的数据到数据库中的指定表。通过(数据项 1,数据 项 2,.) values (值 1,值 2,.)来为新添加的数据赋初值。 三、删除数据项 delete from 数据表名称 where 数据项 1 like 值 1 and/or 数据项 2
17、like 值 2 . 四、更新数据项 update 数据表名称 set 数据项 1=值 1,数据项 2=值 2,. where 数据项 1 like 值 1 and/or 数据项 2 like 值 2 . 该语句可以修改数据库中指定数据表内的指定数据,如果不是用 where 限定 条件就表示修改该表内所有的数据条目。 五、查询数据项 select 数据内容 from 数据表名称 where 数据项 1 like 值 1 and/or 数据 项 2 like 值 2 . order by 数据项 asc/desc 数据内容部分表示所要选取的表格中的数据项,使用*表示选取全部。数 据表名称表示要从
18、哪一个表格中选取,如果你没有接触过数据库可能很难了解 什么是数据表格,没关系,我将在后面用到它的时候再说明。where 表示选取的 条件,使用 like 表示相等,也支持=这样的判断符号,同时使用多个条件进行选 取时中间要使用 and 进行连接。order by 决定数据的排列顺序,asc 表示按照数据项中的数据顺序排列,desc 表 示倒序,默认情况为顺序。select 语句中除 select 和 from 之外其它均为可选项, 如果都不填写表示选取该数据表中的全部数据。例如:下面的语句查询某数据库 中表名称为:testtable 中姓名为“张三”的 nickname 字段和 email 字
19、段。 SELECT nickname,email FROM testtable WHERE name=张三 (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、 变量(包括局部变量和全局变量)等构成。1、选择所有列 例如,下面语句显示 testtable 表中所有列的数据: SELECT * FROM testtable 2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选 择列表中所指定的列名排列顺序相同。 例如:SELECT nickname,email FROM testtable 3、更改列标题 在选择列表中,可重新指定列
20、标题。定义格式为:列标题=列名 列名 列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界 符,例如,下列语句使用汉字显示列标题: SELECT 昵称=nickname,电子邮件=email FROM testtable (二) FROM 子句指定 SELECT 语句查询的表。 最多可指定 256 个表,它们之间用逗号分隔。如果选择列表中存在同名列, 这时应使用对象名限定这些列所属的表或视图。例如在 usertable 和 citytable 表中 同时存在 cityid 列,在查询两个表中的 cityid 时应加以限定。 (三) WHERE 子句设置查询条件 WHERE 子句设置查询
21、条件,过滤掉不需要的数据行。例如下面语句查询年 龄大于 20 的数据: SELECT * FROM usertable WHERE age20 WHERE 子句可包括各种条件运算符: 比较运算符(大小比较):、=、=、!、!=10 AND age这个文件夹可以被确定为本地路径(C:Script)或者 为 UNC 路径 (helpdeskscripts)。目标文件夹-这个文件夹也可以是本地文件夹和 UNC 路径。如果目标文件夹不存在,那么将自动创建一个文件夹。此外这个方法有个可选的参数: Overwrite,当这个参数存在时,默认的情况下脚本会覆盖已经存在的目标文件夹。 Note:CopyFol
22、der 方法会在遇到错误时停止,即使这个脚本中包含有 On Error Resume Next 语句。例如你用脚本用来拷贝 100 的子文件夹,当成功拷贝三个之后,遇到一个错误。这 时脚本会中止,它不去尝试剩下的 97 的文件夹。作者:临汾市外事旅游局薛靖澜,转载请 注明出处 在下例中用 CopyFolder 的方法来复制文件夹 C:scripts 到 c:FSO 并且复写目标文件夹。 注意,这个的结果不是 C:FSOScripts 而是 C:FSO 下有和 C:Scripts 有同样的文件。如果 你想更改文件夹叫 C:FSOScripts,你应该将目标文件夹改为 C:FSOScripts 1
23、 Const OverWriteFiles = True 2 Set objFSO = CreateObject(“Scripting.FileSystemObject“) 3 objFSO.CopyFolder “C:Scripts“ , “C:FSO“ , OverWriteFiles Note:因为这个 CopyFolder 是一个单独的操作,你没有办法来跟踪它的进程。你只是需要 简单的等待操作的结束。如果你想监视 copy 命令的过程,你应该用 shell 应用程序。 使用通配符(Wildcards)复制文件夹 用这个 CopyFolder 命令也可以拷贝所有文件夹和子文件夹下的文件。
24、这样可能导致一个问 题,如果只是想拷贝 C:FSO 下的文件,而不是想拷贝 C:FSOSubfolder1,C:FSOSubfolder2,C:FSOSbufolder3 下的文件。 作者:临汾市外事 旅游局薛靖澜,转载请注明出处 可是,不幸的是这里没有直接的办法来不拷贝子文件夹中的文件而只是拷贝父文件夹中的文 件,你可以用通配符来限制子文件夹的拷贝。例如如下的脚本代码只是拷贝以 log 字母开 头的文件夹。但是,你用通配符的时候就只是拷贝那些符合特定要求的文件夹才被拷贝: objFSO.CopyFolder “C:ScriptsLog*“ , “C:Archive“, True当上面的脚本代
25、码执行的时候,C:Scriptslogs,C:ScriptsLogfiles 被拷贝了,包括它们的文 件和子文件夹中的文件。但是,在 C:Scripts 的文件没有被拷贝。当你用 CopyFolder 方法 的时候,你不能只是拷贝文件夹中的文件,而不拷贝子文件夹中的蚊子。如果你想只是拷贝 文件而不拷贝子文件夹的文件,你可以应用 CopyFile 方法。 移动文件夹作者:临汾市外事旅游局薛靖澜,转载请注明出处 当你复制一个文件夹从一个地方到另外一个地方的时候,你以复制结束而告终。有时候这个 正是你想要的,但是有的时候,你不需要两份文件的信息,你或许希望将文件夹从计算机 A 移动到计算机 B,或者
26、从硬盘 C 移动到硬盘 D。移动工作总会移动到特定磁盘的剩余空间 上。例如你或许会周期的将很少访问的文件夹移动到存档磁盘中。此外你或许有一个脚本来 监视本地计算机的信息,当监视结束的时候,你需要将它上传到服务器,然后将本地文件删 除,然后本地计算机就开始下一次的监视。 作者:临汾市外事旅游局薛靖澜,转载请注明 出处 MoveFolder 需要两个参数: 1、Source folder 源文件夹,可以是本地路径或者是 UNC 路径。 2、Destination folder 目标文件夹,这个文件系也可是本地或者 UNC 路径。 作者:临汾市 外事旅游局薛靖澜,转载请注明出处 如果你的目标文件夹不
27、存在,那么移动是成功的。如果目标文件夹存在,那么不成功。你不 能用这个 MoveFolder 的方法来覆盖一个文件夹。 作者:临汾市外事旅游局薛靖澜,转载 请注明出处 下例脚本中,移动本地的文件夹 C:Scripts 到一个共享的文件夹 helpdeskmanagement 1 Set objFSO = CreateObject(“Scripting.FileSystemObject“) 2 objFSO.MoveFolder “C:Scripts“ , “helpdeskmanagement“ 注意用 MoveFolder 方法当脚本失败后不能循环操作。例如,假如你的网络连接在脚本将文 件从
28、一个计算机移动到另外一个计算机完成前失败了,那么很有可能你一些文件在计算机 A 上,另外一些文件在计算机 B 上,也有可能在移动的过程中丢失一些文件。因为这个 MoveFolder 的方法无法让脚本恢复到以前状态。 因为如此,你或许需要两个方法来完成文件在网络中的移动:CopyFolder 和 DeleteFolder。 你可以用 CopyFolder 来将文件从计算机 A 移动到计算机 B。当复制的操作结束之后,你 用 DeleteFolder 来删除计算机 A 上的文件,当复制操作失败的时候,你可以确保你的文件 还在你的计算机上。 作者:临汾市外事旅游局薛靖澜,转载请注明出处 重命名文件夹
29、作者:临汾市外事旅游局薛靖澜,转载请注明出处 在 FSO 中没有提供 RenameFolder 方法重新命名文件夹。但是可以用 MoveFolder 方法来将 文件夹移动到相对同样的位置,例如假如有文件夹路径如下:作者:临汾市外事旅游局薛靖 澜,转载请注明出处 C:ScriptsPerformanceMonitoringServersDomain ControllersCurrent Logs 如果你用 Windows 浏览器来更改文件夹的名字,那么文件夹还是它本身作者:临汾市外事 旅游局薛靖澜,转载请注明出处 C:ScriptsPerformanceMonitoringServersDoma
30、in ControllersArchived Logs MoveFolder 的方法可以让你完成同样任务,你将 C:ScriptsPerformanceMonitoringServersDomain ControllersCurrent Logs 作为源路径,将 C:ScriptsPerformanceMonitoringServersDomain ControllersArchived Logs 作为目标路径。这 样的结果和在 windows 浏览器中更改文件夹的名字效果是样的。作者:临汾市外事旅游局 薛靖澜,转载请注明出处 例如,下例中的脚本将文件夹 C:FSOSamples 更改为 C:
31、FSOScripts 在脚本运行之前,Sample 是 C:Scripts 的文件夹,在脚本运行之后,就是 C:FSO 的子文件夹了。此外 Scripts (FSO 下的)含有原来 Sample 所有的文件和子文件。作者:临汾市外事旅游局薛靖澜, 转载请注明出处 1 Set objFSO = CreateObject(“Scripting.FileSystemObject“) 2 objFSO.MoveFolder “C:FSOSamples“ , “C:FSVBS 脚本运行库手册之五(文件夹属性)脚本运行库手册之五(文件夹属性)获得文件夹属性作者:临汾市外事旅游局薛靖澜,转载请注明出处 因为
32、文件夹是一个 COM 对象,它们的属性可以被获得和列举出来,为了列举详细的文件 夹信息,你可以用文件夹对象,它是 FSO 的组件之一。文件夹对象的属性列举在了下表中。Attributes 关于文件夹的属性信息。 DateCreated 文件夹创建的日期 DateLastAccessed 用户最后访问这个文件夹的日期 DateLastModified 用户最后更改文件夹属性的日期 Drive 磁盘信息包括拖尾符号(比如,C:)标识文件夹所在的磁盘 作者:临 汾市外事旅游局薛靖澜,转载请注明出处 Files 存储在这个文件夹中所有文件的信息。 IsRootFolder Boolean 值来表明这个
33、文件夹是否是根文件夹 Name 文件夹的名字但不包括路径信息 ParentFolder 文件夹存放的父文件夹的名字 Property Description Path 文件夹的路径 ShortName MS-DOS 类型的文件夹的名字,遵循 8.3 的命名规则。 ShortPath MS-DOS 类型的文件夹的名字,遵循 8.3 的命名规则。 Size 文件夹的大小,单位是 bytes,包含子文件和子文件夹的大小在 内。 作者:临汾市外事旅游局薛靖澜,转载请注明出处 SubFolders 第一层的子文件夹。在 Subfolders 中的子文件夹不在此列中。 作者:临汾市外事旅游局薛靖澜,转载请
34、注明出处 Type 对于文件夹的描述 列举文件夹的属性 为了得到一个文件夹的属性,一个脚本必须: 1.创建一个 FSO 实例 2.用 GetFolder 的方法绑定特定文件夹 3.用 Echo 的方法显示属性。 当你对一个文件夹的属性进行操作的时候,注意文件的属性和子文件夹的属性是以集合的形 式返回的,不是单独返回一个的。此外 Attributes 属性返回一个属性值。 作者:临汾市外 事旅游局薛靖澜,转载请注明出处 1 Set objFSO = CreateObject(“Scripting.FileSystemObject“) 2 Set objFolder = objFSO.GetFol
35、der(“C:FSO“) 3 Wscript.Echo “Date created: “ & objFolder.DateCreated 4 Wscript.Echo “Date last accessed: “ & objFolder.DateLastAccessed5 Wscript.Echo “Date last modified: “ & objFolder.DateLastModified 6 Wscript.Echo “Drive: “ & objFolder.Drive 7 Wscript.Echo “Is root folder: “ & objFolder.IsRootFol
36、der 8 Wscript.Echo “Name: “ & objFolder.Name 9 Wscript.Echo “Parent folder: “ & objFolder.ParentFolder 10 Wscript.Echo “Path: “ & objFolder.Path 11 Wscript.Echo “Short name: “ & objFolder.ShortName 12 Wscript.Echo “Short path: “ & objFolder.ShortPath 13 Wscript.Echo “Size: “ & objFolder.Size 14 Wscr
37、ipt.Echo “Type: “ & objFolder.Type 管理文件夹的属性作者:临汾市外事旅游局薛靖澜,转载请注明出处 文件系统支持属性的定义。就是文件夹中和文件夹名字和文件夹大小无关的信息。例如如果 你在 Windows 浏览器中右击某个数据夹的时候,点 Properties 你就可以访问文件夹的属性 了。 FSO 可以返回几个关于文件夹信息的重要属性。这些属性和相应的值,列举在下表中:作 者:临汾市外事旅游局薛靖澜,转载请注明出处 Hidden 2 隐藏,就是在 Windows 浏览器中不可见 System 4 表示它是一个系统文件夹。建议不要更改系统文件夹的内容。 Direc
38、tory 16 应用到所有的文件夹的标准值。所有可以被 FSO 访问的文件 作者:临汾市外事旅游局薛靖澜,转载请注明出处 夹读有这个值,最小位 16。 Archive 32 存盘的属性用在备份程序中,用来决定文件是否需要备份。如果这个值 enabling 表示文件夹在下一次增量备份中会备份。如果 是 disabling 表示不在下一次增量备份中备份 Compressed 2048 表明这个文件夹是否是压缩的 虽然这些看起来很简单,但是从 FSO 返回的数据看起来会让你感到很迷惑。例如,你返回 一个文件夹的属性值,你或许会看到 20,但是这个值并不是像上面一样的标准值。此外, 你可能会获得一个单
39、独的值,虽然这个文件夹有说有的属性。这种情况是,脚本并不是返回 如 2,4,16,32,2048 这样的值,而只是返回一个 2102。这是因为这些值是以位图的形式显示 的。作者:临汾市外事旅游局薛靖澜,转载请注明出处VBS 脚本运行库手册之六(文件夹属性)脚本运行库手册之六(文件夹属性)Note:对于属性值,它返回和存储的数据是以位图的形式的。对于位图你应该不会奇怪,比 如后缀名为.bmp 的图形文件 Working with Bitmaps 作者:临汾市外事旅游局薛靖澜,转载请注明出处 位图看起来就是一系列的开关。如果特定的开关是关闭的,那么这个开关的值就是 0,如果 是开启的,比如文件夹对
40、象吧,它就具有上表中所列出的值。而位图的值就是这些开关的值 的总和。如果你用脚本查询这个文件夹的属性,脚本就返回一个值为 16. 与其相反,如果有三个开关是开启的:隐藏(值是 2),Directory(值是 16) ,压缩(值是 2048).那么这个位图的值应该是 2+16+2048,或者值是 2066。这个也是用脚本查询的时候返 回的值。位图被设计成只是有一种办法来获取特定的值。得到值 2066 的方法只有一个就是压缩和隐藏。你不可能通过别的数学方法来算得这样的值。作者:临汾市外事旅游局薛靖澜, 转载请注明出处 这个设计可以返回值并且决定哪个开关没有开哪个没有开。这个可以允许你来判断文件夹的
41、 哪个属性设定了。如果你得到了这个 2066 的值,那么它的属性就是隐藏压缩的文件夹。幸 运的是,你不必去作任何单独的数字运算,你可以用逻辑与 AND 操作来决定哪个开关是否 是 on 还是 off。例如如下代码查询文件夹是否是隐藏的,如果是回显一个信息框: Hidden folder If objFolder.Attributes AND 2 Then Wscript.Echo “Hidden folder.“ End If 或者: If objFolder.Attributes AND 16 Then 下列脚本先绑定文件夹 C:FSO,然后回显文件夹属性: (译者注:这个其实是挨个匹配的,
42、所以你要是测试了两个属性,它都会显示出来的。 ) 1 Set objFSO = CreateObject(“Scripting.FileSystemObject“) 2 Set objFolder = objFSO.GetFolder(“C:FSO“) 3 If objFolder.Attributes AND 2 Then 4 Wscript.Echo “Hidden folder.“ 5 End If 作者:临汾市外事旅游局薛靖澜,转载请注明出处 6 If objFolder.Attributes AND 4 Then 7 Wscript.Echo “System folder.“ 8 E
43、nd If 作者:临汾市外事旅游局薛靖澜,转载请注明出处 9 If objFolder.Attributes AND 16 Then 10 Wscript.Echo “Folder.“ 11 End If 作者:临汾市外事旅游局薛靖澜,转载请注明出处 12 If objFolder.Attributes AND 32 Then 13 Wscript.Echo “Archive bit set.“ 14 End If 作者:临汾市外事旅游局薛靖澜,转载请注明出处 15 If objFolder.Attributes AND 2048 Then 16 Wscript.Echo “Compresse
44、d folder.“ 17 End If 作者:临汾市外事旅游局薛靖澜,转载请注明出处 改变文件夹属性 文件夹的每个属性可以看成一个个开关,如果关于隐藏的开关是 ON 的,那么这个文件夹就 是隐藏的,如果这个开关是 OFF 的,那么这个文件夹就不是隐藏的,你可以选择打开或者 关掉它们,对于文件夹的属性也是如此:对于其它的开关,你可以将属性设置为开或者设置 为关,你可以用脚本来控制这些开关的,最简单的控制属性开关的办法是用如下的程序: 作者:临汾市外事旅游局薛靖澜,转载请注明出处 1. 用 GetFolder 的方法来绑定到一个文件夹。 2. 检查你需要更改的值。例如你想隐藏一个文件夹,看这个文
45、件夹是否是已经隐藏了作者: 临汾市外事旅游局薛靖澜,转载请注明出处 3. 如果这个文件夹是隐藏的,用 XOR 操作来将开关转换成非隐藏的。如果这个文件夹不 是隐藏的,注意不要用 XOR,如果你用了,开关会被触发,文件夹会中止于隐藏。例如, 下列脚本用 AND 来判断文件夹 C:FSO 的隐藏属性开关是否开着。如果它是开的,脚本用 XOR 操作来将开关关闭来显示文件夹。 1 Set objFSO = CreateObject(“Scripting.FileSystemObject“)2 Set objFolder = objFSO.GetFolder(“C:FSO“) 3 If objFolde
46、r.Attributes AND 2 Then 4 objFolder.Attributes = objFolder.Attributes XOR 2 5 End If 作者:临汾市外事旅游局薛靖澜,转载请注明出处 除非很少的一些情况以外,文件夹用来作为单独存放文件的地方。有时候,这些文件夹是系 统需要的。例如操作系统希望在特定的文件夹内找到特定的文件。在其它的一些时候,文件 夹是系统管理员管理计算机的一种工具也是用户管理文件的工具。系统管理员可能希望将脚 本放在叫做 Scripts 的文件夹,将一些 trouble-shooting 的工具放在叫做 Diagnostic Tools 的 文件
47、夹。用户或许将他们预算信息放在叫做 Budgets 的文件夹,而将薪水的信息放在叫做 Timecards 的文件夹。当然,文件夹一般是限制使用的,你必须知道这个文件夹是存放的是 什么文件。系统管理员需要知道是不是有个特定的脚本存在 C:Scripts 文件夹中,用户需要 知道是不是有个特定的窗体存在 C:Budgets 的文件夹中。文件夹对象包含了一些属性可用 来返回存储在文件夹内文件集合的信息,为了得到这些信息,你的脚本必须: 1. 创建一个 FSO 对象实例。作者:临汾市外事旅游局薛靖澜,转载请注明出处 2. 用 GetFolder 的方法来绑定到一个适当的文件夹。 3. 设置一个对象 reference 来指向文件夹的属性 4. 用 For Each 循环来列举出所有的文件和他们的属性。脚本不必去绑定到每一个单独的文 件去获得文件的信息。 在下列脚本中返回在文件夹 C:FSO 下所有文件的信息并且回显他们的名字和大小: 1 Set objFSO = CreateObject(“Scripting.FileSystemObject“) 2 Set objFolder =
限制150内