首页 VBS脚本运行库手册

VBS脚本运行库手册

举报
开通vip

VBS脚本运行库手册VBS脚本运行库手册 ◎感谢钱峰 学习Vbs,当然是看微软网站上推出的官方教程比较原汁原味,可惜中国vbs学友里看过的恐怕不多,原因很简单,微软的官方原著是英文版的,看起来很费力。 当时,我刚刚发现vbs的妙处,可是除了一本微软的《Microsoft Windows脚本技术.CHM》之外,什么学习资料也找不到,看到网上介绍有一本《windows2000脚本编程实用大全》的书,就跑到各个书店去订书,因为出版的时间太久了,那里都订不到,又跑到各个技术网站上去发帖,希望那位有电子版给我发一份,我愿意用其他方面的技术资料交...

VBS脚本运行库手册
VBS脚本运行库手册 ◎感谢钱峰 学习Vbs,当然是看微软网站上推出的官方教程比较原汁原味,可惜中国vbs学友里看过的恐怕不多,原因很简单,微软的官方原著是英文版的,看起来很费力。 当时,我刚刚发现vbs的妙处,可是除了一本微软的《Microsoft Windows脚本技术.CHM》之外,什么学习资料也找不到,看到网上介绍有一本《windows2000脚本编程实用大全》的书,就跑到各个书店去订书,因为出版的时间太久了,那里都订不到,又跑到各个技术网站上去发帖,希望那位有电子版给我发一份,我愿意用其他方面的技术资料交换,结果如同石沉大海,一点消息也没有,在这里小小鄙视他们一下。 后来偶然在网络上遇到钱峰先生,慷慨赠送了他翻译的微软的官方教程给我,让我迈进了vbs的大门,真是惭愧,由于计算机感染病毒,钱峰先生的邮件地址我也找不到了,只有他的一个qq号码,却从来不见他上线,多次留言,也没有见到他回应,在此对钱峰先生的翻译工作及无偿赠予表示衷心的感谢! 今后一段时间,我将逐步将钱峰先生翻译的微软官方教程贴出,与大家共同温习。 有英文好的朋友可能会发觉这份翻印的教程与微软官方原版并不是完全相同,一是因为钱峰先生翻译的时候大约并没有想到要出版或者与人交流,仅仅是自己学习,所以翻译的比较粗糙,我刚刚得到的时候,很多地方都看的不是很懂,在与微软英文官方教程比较后,按照自己的理解修改了其中的一部分(对其中的有些地方,其实到现在我也还是弄不明白);二是因为外国人行文和思维的方式与中国人有着很大的差别,读起来颇为费力,所以我对其中一些表达方式进行了修改,删除了其中一些我认为无关紧要的东西。各位学友如发现其中的错误请不吝指出,我会尽快修改,语意不祥的地方请参考官方网站: http://www.microsoft.com/technet/scriptcenter/guide/default.mspx ◎VBS脚本运行库手册之一(磁盘操作) 文件系统管理是系统管理的一个关键性任务。WSH 和 VB 脚本在这个领域都没有提供相关的功能。幸运的是,你可以通过 script runtime 库来管理这些关键的系统组件,比如磁盘,文件夹和文件。此外,script runtime 库提供了从 text 文件读写的方法,可以用来创建 dictionary和编译脚本。 两种主要的脚本语言,VB 脚本语言和 JS 脚本语言起初的时候都是 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 给客户端来编写 IE 的。正是因为如此,这两个脚本语言都有一些局限性。例如VB 脚本和 JS 脚本内部都没有提供访问文件管理的一些任务,比如:复制、移动、删除文件等。这样做的目的是为了保护消费者。大多数的的网站不可能让用户通过网页去删除它们硬盘上的东西。尽管如此,脚本已经从类似的 HTML 的按钮之类的开始迅速的发展了。随着 ASP 的到来,浏览器的编写者 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 在 server 上管理文件。而随着 WSH 的到来,系统管理员要求有在 web 浏览器外来管理文件了。 为了满足这个要求,微软发布的了 Script Runtime Library。它是一个单独的 DLL 文件,scrrun.dll 文件,用来给脚本的编写者们提供一些文件管理的能力,包括以下内容: 1、获取文件系统的信息,包括获得磁盘、文件和文件夹上的信息。 2、复制,移动和删除文件及文件夹 3、创建和读写文本文件。 除了这些功能之外,Script Runtime Library 提供了创建字典的能力。也可以用来对脚本进行编译,使脚本成为加密的。 Note:这章只是讨论 FileSystemObject 和 Dictionary 的部分,对于 Encode 部分不作讨论,Script Runtime Library 也是 windows 2000 的一部分,它在你安装或者升级微软的应用程序的时候也随着升级和安装了:这些应用程序有以下几个: 1、WSH 2、VB 脚本 3、IE 浏览器 4、Microsoft Office 5、FileSystemObject 正如它的名字一样,FSO 设计用来帮助你管理文件系统,FSO 允许你获取重要的文件组件信息,包括硬盘、文件夹、文件;也提供一般的系统管理的任务,比如复制、删除、移动文件和文件夹。此外FSO 允许你读写文本文件。 用 FSO 其实有些用词不当,因为实际上 FSO 包含很多个对象,每个对象被设计成用来完成特定的目的。组成 FSO 的对象列在了下表中: Drive 代表系统中磁盘或者磁盘的集合 File 代表系统中的一个文件或者文件的集合 Folder 代表文件系统中的一个文件夹或者多个文件夹 TextStream 代表文本文件中的读取、写入或者提交字符串 ※磁盘管理 磁盘管理是系统管理的一个重要的部分。作为一个系统管理员,知道安装在这个计算机上磁盘是十分重要的,当然,知道这个磁盘的属性、磁盘类型、子盘大小、总共和剩余空间也是同等重要的。作为一个脚本的编写者,你有两个主要的选择来管理磁盘:WMI & FSO。一般来讲,WMI 更是管理磁盘的首选项,主要有以下几个原因: 1、WMI 能返回一些 FSO 无法返回的属性,比如磁道、扇面等。 2、FSO 不能返回一个目标磁盘。而是返回所有的磁盘,然后进行筛选出你感兴趣的磁盘。而你可以用 WMI 通过磁盘符号来返回特定的磁盘,WMI 可以用来返回远程计算机上磁盘的信息,但是 FSO 不可以,除非它用 wshcontroller对象。 虽然 WMI 或许是获得磁盘信息的最好工具。但是这里至少有两个原因使你必须去熟悉 FSO。 第一:因为有些低端的操作系统无法安装 WMI,所以只能使用 FSO; 第二:最重要的一点是因为:脚本的编写者们在想到获取磁盘信息的时候就会用到 FSO,而你作为系统管理员,可能会来看其它人的脚本,这样就需要了解 FSO。 注:外国人写的真是拗口,我理解这句话的意思就是说FSO比WMI应用的更广泛一些。 ※如何返回磁盘信息 在你管理计算机的磁盘之前,你需要知道你的计算机上实际上有多少磁盘可以使用。FSO 允许你管理安装在计算机上的所有磁盘,包括移动硬盘和网络硬盘(就是只要是有盘符的就可以了)为了返回这个集合,你需要首先创建一个 FSO 实例,然后创建磁盘属性的对象。当这个集合返回后,你可用一个 For Each 的循环来重述这个集合。 例如,下面的脚本就是要返回安装在本地计算机上的磁盘集合然后返回它们的盘符: Set objFSO = CreateObject("Scripting.FileSystemObject") Set colDrives = objFSO.Drives For Each objDrive in colDrives Wscript.Echo "Drive letter: " & objDrive.DriveLetter Next ◎VBS脚本运行库手册之二(磁盘操作) ※如何绑定指定磁盘 如果你事先知道要绑定的磁盘(例如C 盘或一个共享文件夹\\accounting\receivables),你可以用 GetDrive 的方法来直接绑定磁盘。这样你可以不用去筛选就获得特定磁盘的信息。GetDrive 需要一个单独的参数:磁盘符号或者是共享文件夹的 UNC 路径。你可以用如下的几种格式:C C: C:\ 在下面的脚本中首先创建一个 FSO 对象,然后用 GetDrive 的方法来直接绑定C盘,然后回显可用的磁盘空间: Set objFSO = CreateObject("Scripting.FileSystemObject") Set objDrive = objFSO.GetDrive("C:") Wscript.Echo "Available space: " & objDrive.AvailableSpace 注意,这里没有 For Each 循环,你就可以获得磁盘的属性。因为脚本是返回一个单独的磁盘对象,而不是所有对象的集合。因此也就不用筛选了。 ※如何列举磁盘驱动器的属性 磁盘集合的作用总是用来监视和列举的。作为一个系统管理员,你需要知道计算机上的可用磁盘,也需要知道磁盘的序列号、可用空间等信息。在你获得当前磁盘的集合或者单个磁盘的时候,你就可以获得下表列出的所有属性。 1、AvailableSpace——报告磁盘上可以使用的空间,单位是 bytes。如果想以 kb 为单位返回,除以 1024,如果想以 M 为单位返回,则除以 1.048,576。这个属性返回的是可用的磁盘空间的总数。如果一个磁盘启用了磁盘限额,那么他返回的数字可能比实际的要小。 2、DriveLette——返回特定磁盘的盘符。这个盘符不包含那个冒号。例如软盘返回的是A,而不是A: 3、DriveType——整数的值代表不同的磁盘类型:1:移动硬盘 2:硬盘 3:网络硬盘4:CD-ROM 5:RAM 磁盘 4、FreeSpace——返回磁盘剩余空间的总额。单位是 bytes,如果是返回的单位是 kb,就除以 1024,如果是以 M 为单位,除以 1,048,576。注意:这个和磁盘可用空间不一样,剩余的磁盘空间不会考虑磁盘限额。 5、FileSystem——返回文件系统的类型(FAT,FAT32,NTFS) 6、IsReady——标识磁盘是否可以访问。这个值来判断软盘和CD-ROM是否为空 7、Path——磁盘路径。对于本地磁盘,返回盘符和脱尾符(就是那个冒号),比如A:对于网络磁盘,就返回它的 UNC 路径。 8、RootFolder——返回磁盘根目录下的文件夹。 9、SerialNumber——磁盘的生产商给磁盘分配的序列号。对于软盘和网络硬盘来说,它们的值是 0。 10、ShareName——分配给网络驱动去的共享名称。 11、TotalSize——报告整个的磁盘空间,单位是 bytes,如果想以 kb 为单位,除以 1024,如果想以 M 为单位返回,则单位为 1,048,576。 12、VolumeName——分配给磁盘的卷名。 为了列举安装在计算机里的磁盘的属性,创建一个 FSO 实例,然后创建一个 FSO 属性的对象,用 For Each 循环,来重现各个磁盘的配置。对于集合当中的每个磁盘,你可以返回一个或者的属性。如下列脚本列举出安装在计算机上所有磁盘的所有属性。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set colDrives = objFSO.Drives For Each objDrive in colDrives Wscript.Echo "Available space: " & objDrive.AvailableSpace Wscript.Echo "Drive letter: " & objDrive.DriveLetter Wscript.Echo "Drive type: " & objDrive.DriveType Wscript.Echo "File system: " & objDrive.FileSystem Wscript.Echo "Is ready: " & objDrive.IsReady Wscript.Echo "Path: " & objDrive.Path Wscript.Echo "Root folder: " & objDrive.RootFolder Wscript.Echo "Serial number: " & objDrive.SerialNumber Wscript.Echo "Share name: " & objDrive.ShareName Wscript.Echo "Total size: " & objDrive.TotalSize Wscript.Echo "Volume name: " & objDrive.VolumeName Next 上述脚本有个潜在的缺点,就是如果没有软盘或者光驱里面没有光盘,会产生一个 disk not ready 的错误出来。当磁盘没有准备好的时候用 FSO 来访问会有些错误的。虽然 FSO 可以标识那些没有准备好的磁盘,但是你访问它的一些属性的时候会报错出来,比如 AvailableSpace 或 FreeSpace。如果磁盘没有准备好,你只可以访问如下的四个属性:DriveLetter、DriveType、IsReady、ShareName。所有尝试访问其它属性都会报错。 幸运的是,IsReady 属性允许你用脚本来检查一个磁盘是否准备好了。IsReady 返回一个 Boolean 值,如果这个值是true,则磁盘准好了,你可以访问它的所有属性,否则如果这个值是false,则磁盘没有准备好,只能返回上面的四个属性了。可以对每个磁盘,用 IsReady 属性来保证磁盘是准备好的。如果是就返回磁盘的盘符和剩余空间,如果不是就只返回磁盘的盘符。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set colDrives = objFSO.Drives For Each objDrive in colDrives If objDrive.IsReady = True Then Wscript.Echo "Drive letter: " & objDrive.DriveLetter Wscript.Echo "Free space: " & objDrive.FreeSpace Else Wscript.Echo "Drive letter: " & objDrive.DriveLetter End If Next Note:这个问题不会发生在 WMI 上(如果软盘或者光驱中没有盘,脚本就会失败),WMI 只是认为返回的空间为 Null ◎VBS脚本运行库手册之三(管理文件夹) ※管理文件夹 磁盘的属性比如磁盘的剩余空间,磁盘的总额提供了一个全局的信息给系统管理员。但是,对于系统管理而言,磁盘的信息虽然是必须的,但是还不够。知道文件存储在哪个盘固然重要,但是你也需要知道文件是存储在哪个文件夹下的。此外许多的系统管理任务都是发生在文件夹级别的,比如复制,移动,删除和列举文件夹的内容。 FSO 可以返回一个磁盘上文件夹的全部信息。此外,FSO 提供了一系列的方法来完成诸如:复制、移动、删除文件夹的操作。 ※如何绑定指定的文件夹 在微软的调用文件中,文件夹是 COM 对象。这就是说在你访问一个单独的文件夹的属性时,你必须去创建一个文件夹的对象reference,这个过程叫做绑定。你可以用FSO和GetObject的方法来绑定到一个文件夹。 当用 GetFolder 的时候,你必须:路径既可以写成本地路径也可以写成 UNC 路径(例如:\\accounting\receivables)。但是通配符不能出现在路径当中。此外,你不可以创建一个单独的对象 reference 来同时绑定到多个文件夹。例如,如下的脚本代码会产生一个错误: objFSO.GetFolder("C:\FSO", "C:\Scripts") 如果你想针对多个文件夹同时工作,你要么用 WMI 或者用针对每个文件夹创建单独的对象reference。 在设置的时候 Set 这个关键词是必须的,因为你要标识这个对象 reference 变量。 例如下面的脚本绑定文件夹 C:\FSO Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\FSO") 虽然通配符是不允许的,但是你可以用点来关联到当前的文件夹(.),你可以用点点(..)来绑定到父文件夹,用 \ 绑定到根文件夹。例如如下代码语句绑定到当前的文件夹: Set objFolder = objFSO.GetFolder(".") ※检验文件夹是否存在 许多的文件夹的操作包括复制、移动、删除需要特定的文件夹存在才可以对其进行操作。毕竟,脚本不能复制、移动、删除这些不存在的文件夹,如果一个脚本尝试去对一个不存在的文件夹执行类似的操作,那么会报错“path not found”。为了避免这样的问题发生,你可以用 FolderExists 方法来在你绑定一个文件夹之前检查文件夹是否存在。FolderExists 用一个简单的参数(文件夹路径)来返回一个 Boolean 值,如果文件夹存在,返回的值为 True,否则返回的值为 False。 例如,下例中列出的脚本,FolderExists 方法来检查文件夹 C:\FSO 是否存在。如果存在,脚本用 GetFolder 方法来绑定文件夹。如果不存在,脚本就弹出一个 message box 说:Folder does not exist. Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists("C:\FSO") Then Set objFolder = objFSO.GetFolder("C:\FSO") Wscript.Echo "Folder binding complete." Else Wscript.Echo "Folder does not exist?" End If ※如何建立文件夹 你不可能永远都使用你现有的文件系统结构,从来不去更改你的文件系统结构。而事实上,文件系统是动态的,因为需要变动,现存的文件夹可能被删除,新的文件夹可能被创建。例如,你的单位在 file servers 上给用户提供空间,你需要在每个新用户来的时候创建一个新的文件夹给他。 FSO给脚本编写者提供了这样的能力,可以让你通过脚本来创建文件夹。例如在上例中脚本检查特定的文件夹是否存在,如果存在,脚本用 GetFolder 的的方法来绑定到这个特定的文件夹,如果不存在,脚本弹出一个消息框。虽然这个方法避免了脚本的失败,但是你或许更希望在文件夹不存在的时候来创建一个文件夹,而不是简单的报告说文件夹不存在。为了做到这点,首先创建一个 FSO 对象实例,然后用CreateFolder 方法,将文件夹的完成路径作为参数,例如,下面脚本用这个方法来创建一个新的文件夹 C:\FSO Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.CreateFolder("C:\FSO") 如果文件夹存在,那么会报错说”file exists”。基于此,你需要在创建文件夹的之前检查文件对象是否存在。 Note:FSO 只能在本地创建文件夹。如果你想在远程的计算机上创建文件夹,你需要用到 wshcontroller 对象。你可以在本地创建文件夹然后用 WMI 来将文件夹移动到远程的计算 机上。(这个文件夹只能先创建再用WMI 移动,因为 WMI 不支持创建文件夹的方法。) ※删除文件夹 当你要删除文件夹时,例如你用文件服务器存储每一个员工的数据,当这个员工离开单位时,他的文件夹将被删除。这保证了文件服务器上的磁盘空间,同样,你或许用一个脚本来创建一个文件夹来存储临时文件,当脚本执行完毕的时候,你会删除这个临时的文件。DeleteFolder方法使你可以删除文件夹和文件夹下的所有文件。DeleteFolder需要一个单独的参数:文件夹的完全路径。例如下面脚本用来删除 C:\FSO 和其它所有的东西。 Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder("C:\FSO") 这个方法会立即删除所有的文件,它不会让你确认是否需要删除就将其扔到垃圾筒。 ※使用通配符(Wildcards)删除文件夹 脚本的最大的一个优点就是作为一个管理工具,脚本操作可以同时删除许多个项目。例如你可以用脚本的一个单独的操作就可以删除所有的文件和文件夹,而不用一个一个去删除了。 FSO 允许你用通配符来删除一些特定的文件。例如你希望删除某文件夹下所有以 s 开头的文件夹,这可以用下面的命令来完成。当用类似这样的文件夹结构来运行这个的时候,那么文件夹subfolder1,subfolder2,scripts 都会被删除。 objFSO.DeleteFolder("C:\FSO\S*") 下面这个脚本用来删除以 su 开头的文件夹,就是说 subfolder1,subfolder2 会被删除。 objFSO.DeleteFolder("C:\FSO\Su*") 通配符只能放在文件路径的最末尾。 例如如下代码将通配符放在路径的中间,会报错:path not found objFSO.DeleteFolder("C:\*\Subfolder1") ◎VBS脚本运行库手册之四(管理文件夹) ※复制文件夹及文件夹下的内容 复制文件夹和文件夹当中所有数据能力的对于系统管理任务来说非常重要。有时你需要复制文件夹来创建备份,在计算机 A 和计算机 B 上有同样的文件夹,如果计算机 B 意外的down 掉之后,你就不怕数据丢失了。在其它的时候,你或许希望将含有特定文件的文件夹复制到很多台计算机上。用脚本来向各个计算机复制这个文件夹比手工复制高效的多。 1、CopyFolder 方法允许你复制一个文件夹到另外一个地方。当不用通配符的时候,这个CopyFolder 的方法和命令 Xcopy /E 命令一样:它拷贝所有的文件和子文件夹,包括空的文件夹。这个命令需要两个参数:源文件夹->这个文件夹可以被确定为本地路径(C:\Script)或者为 UNC 路径 (\\helpdesk\scripts)。目标文件夹->这个文件夹也可以是本地文件夹和 UNC 路径。如果目标文件夹不存在,那么将自动创建一个文件夹。此外这个方法有个可选的参数:Overwrite,当这个参数存在时,默认的情况下脚本会覆盖已经存在的目标文件夹。 Note:CopyFolder 方法会在遇到错误时停止,即使这个脚本中包含有 On Error Resume Next语句。例如你用脚本用来拷贝 100 的子文件夹,当成功拷贝三个之后,遇到一个错误。这时脚本会中止,它不去尝试剩下的 97 的文件夹。 在下例中用 CopyFolder 的方法来复制文件夹 C:\scripts 到 c:\FSO 并且复写目标文件夹。注意,这个的结果不是 C:\FSO\Scripts 而是 C:\FSO 下有和 C:\Scripts 有同样的文件。如果你想更改文件夹叫 C:\FSO\Scripts,你应该将目标文件夹改为 C:\FSO\Scripts Const OverWriteFiles = True Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFolder "C:\Scripts" , "C:\FSO" , OverWriteFiles Note:因为这个 CopyFolder 是一个单独的操作,你没有办法来跟踪它的进程。你只是需要简单的等待操作的结束。如果你想监视 copy 命令的过程,你应该用 shell 应用程序。 ※使用通配符(Wildcards)复制文件夹 用这个CopyFolder 命令也可以拷贝所有文件夹和子文件夹下的文件。这样可能导致一个问题,如果只是想拷贝 C:\FSO 下的文件,而不是想拷贝C:\FSO\Subfolder1,C:\FSO\Subfolder2,C:\FSO\Sbufolder3 下的文件。 可是,不幸的是这里没有直接的办法来不拷贝子文件夹中的文件而只是拷贝父文件夹中的文件,你可以用通配符来限制子文件夹的拷贝。例如如下的脚本代码只是拷贝以 log 字母开头的文件夹。但是,你用通配符的时候就只是拷贝那些符合特定要求的文件夹才被拷贝: objFSO.CopyFolder "C:\Scripts\Log*" , "C:\Archive", True 当上面的脚本代码执行的时候,C:\Scripts\logs,C:\Scripts\Logfiles 被拷贝了,包括它们的文件和子文件夹中的文件。但是,在 C:\Scripts 的文件没有被拷贝。当你用 CopyFolder 方法的时候,你不能只是拷贝文件夹中的文件,而不拷贝子文件夹中的蚊子。如果你想只是拷贝文件而不拷贝子文件夹的文件,你可以应用 CopyFile 方法。 ※移动文件夹 当你复制一个文件夹从一个地方到另外一个地方的时候,你以复制结束而告终。有时候这个正是你想要的,但是有的时候,你不需要两份文件的信息,你或许希望将文件夹从计算机 A 移动到计算机 B,或者从硬盘 C 移动到硬盘 D。移动工作总会移动到特定磁盘的剩余空间上。例如你或许会周期的将很少访问的文件夹移动到存档磁盘中。此外你或许有一个脚本来监视本地计算机的信息,当监视结束的时候,你需要将它上传到服务器,然后将本地文件删除,然后本地计算机就开始下一次的监视。 MoveFolder 需要两个参数: 1、Source folder 源文件夹,可以是本地路径或者是 UNC 路径。 2、Destination folder 目标文件夹,这个文件系也可是本地或者 UNC 路径。 如果你的目标文件夹不存在,那么移动是成功的。如果目标文件夹存在,那么不成功。你不能用这个 MoveFolder 的方法来覆盖一个文件夹。 下例脚本中,移动本地的文件夹 C:\Scripts 到一个共享的文件夹 \\helpdesk\management Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.MoveFolder "C:\Scripts" , "\\helpdesk\management" 注意用 MoveFolder 方法当脚本失败后不能循环操作。例如,假如你的网络连接在脚本将文件从一个计算机移动到另外一个计算机完成前失败了,那么很有可能你一些文件在计算机 A 上,另外一些文件在计算机 B 上,也有可能在移动的过程中丢失一些文件。因为这个 MoveFolder 的方法无法让脚本恢复到以前状态。 因为如此,你或许需要两个方法来完成文件在网络中的移动:CopyFolder 和 DeleteFolder。你可以用 CopyFolder 来将文件从计算机 A 移动到计算机 B。当复制的操作结束之后,你用DeleteFolder 来删除计算机 A 上的文件,当复制操作失败的时候,你可以确保你的文件还在你的计算机上。 ※重命名文件夹 在FSO中没有提供RenameFolder 方法重新命名文件夹。但是可以用 MoveFolder方法来将文件夹移动到相对同样的位置,例如假如有文件夹路径如下: C:\Scripts\PerformanceMonitoring\Servers\Domain Controllers\Current Logs 如果你用 Windows 浏览器来更改文件夹的名字,那么文件夹还是它本身 C:\Scripts\PerformanceMonitoring\Servers\Domain Controllers\Archived Logs MoveFolder 的方法可以让你完成同样任务,你将 C:\Scripts\PerformanceMonitoring\Servers\Domain Controllers\Current Logs作为源路径,将 C:\Scripts\PerformanceMonitoring\Servers\Domain Controllers\Archived Logs 作为目标路径。这样的结果和在 windows 浏览器中更改文件夹的名字效果是样的。 例如,下例中的脚本将文件夹C:\FSO\Samples更改为C:\FSO\Scripts在脚本运行之前,Sample 是 C:\Scripts的文件夹,在脚本运行之后,就是C:\FSO的子文件夹了。此外Scripts (FSO 下的)含有原来 Sample 所有的文件和子文件。 Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.MoveFolder "C:\FSO\Samples" , "C:\FSO\Scripts" ◎VBS脚本运行库手册之五(文件夹属性) ※获得文件夹属性 因为文件夹是一个 COM 对象,它们的属性可以被获得和列举出来,为了列举详细的文件夹信息,你可以用文件夹对象,它是 FSO 的组件之一。文件夹对象的属性列举在了下表中。 Attributes 关于文件夹的属性信息。 DateCreated 文件夹创建的日期 DateLastAccessed 用户最后访问这个文件夹的日期 DateLastModified 用户最后更改文件夹属性的日期 Drive 磁盘信息包括拖尾符号(比如,C:)标识文件夹所在的磁盘 Files 存储在这个文件夹中所有文件的信息。 IsRootFolder Boolean 值来表明这个文件夹是否是根文件夹 Name 文件夹的名字但不包括路径信息 ParentFolder 文件夹存放的父文件夹的名字 Property Description Path 文件夹的路径 ShortName MS-DOS 类型的文件夹的名字,遵循 8.3 的命名规则。 ShortPath MS-DOS 类型的文件夹的名字,遵循 8.3 的命名规则。 Size 文件夹的大小,单位是 bytes,包含子文件和子文件夹的大小在内。 SubFolders 第一层的子文件夹。在 Subfolders 中的子文件夹不在此列中。 Type 对于文件夹的描述 ※列举文件夹的属性 为了得到一个文件夹的属性,一个脚本必须: 1.创建一个 FSO 实例 2.用 GetFolder 的方法绑定特定文件夹 3.用 Echo 的方法显示属性。 当你对一个文件夹的属性进行操作的时候,注意文件的属性和子文件夹的属性是以集合的形式返回的,不是单独返回一个的。此外Attributes 属性返回一个属性值。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\FSO") Wscript.Echo "Date created: " & objFolder.DateCreated Wscript.Echo "Date last accessed: " & objFolder.DateLastAccessed Wscript.Echo "Date last modified: " & objFolder.DateLastModified Wscript.Echo "Drive: " & objFolder.Drive Wscript.Echo "Is root folder: " & objFolder.IsRootFolder Wscript.Echo "Name: " & objFolder.Name Wscript.Echo "Parent folder: " & objFolder.ParentFolder Wscript.Echo "Path: " & objFolder.Path Wscript.Echo "Short name: " & objFolder.ShortName Wscript.Echo "Short path: " & objFolder.ShortPath Wscript.Echo "Size: " & objFolder.Size Wscript.Echo "Type: " & objFolder.Type ※管理文件夹的属性 文件系统支持属性的定义。就是文件夹中和文件夹名字和文件夹大小无关的信息。例如如果你在 Windows 浏览器中右击某个数据夹的时候,点 Properties 你就可以访问文件夹的属性了。 FSO 可以返回几个关于文件夹信息的重要属性。这些属性和相应的值,列举在下表中: Hidden 2 隐藏,就是在 Windows 浏览器中不可见 System 4 表示它是一个系统文件夹。建议不要更改系统文件夹的内容。 Directory 16 应用到所有的文件夹的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 值。所有可以被 FSO 访问的文件夹读有这个值,最小位 16。 Archive 32 存盘的属性用在备份程序中,用来决定文件是否需要备份。 如果这个值 enabling 表示文件夹在下一次增量备份中会备份。如果是disabling 表示不在下一次增量备份中备份 Compressed 2048 表明这个文件夹是否是压缩的 虽然这些看起来很简单,但是从 FSO返回的数据看起来会让你感到很迷惑。例如,你返回一个文件夹的属性值,你或许会看到20,但是这个值并不是像上面一样的标准值。此外,你可能会获得一个单独的值,虽然这个文件夹有说有的属性。这种情况是,脚本并不是返回如 2,4,16,32,2048 这样的值,而只是返回一个 2102。这是因为这些值是以位图的形式显示的。 ◎VBS脚本运行库手册之六(文件夹属性) Note:对于属性值,它返回和存储的数据是以位图的形式的。对于位图你应该不会奇怪,比如后缀名为.bmp 的图形文件 Working with Bitmaps 位图看起来就是一系列的开关。如果特定的开关是关闭的,那么这个开关的值就是 0,如果是开启的,比如文件夹对象吧,它就具有上表中所列出的值。而位图的值就是这些开关的值的总和。如果你用脚本查询这个文件夹的属性,脚本就返回一个值为 16. 与其相反,如果有三个开关是开启的:隐藏(值是2),Directory(值是16),压缩(值是 2048).那么这个位图的值应该是 2+16+2048,或者值是 2066。这个也是用脚本查询的时候返回的值。位图被设计成只是有一种办法来获取特定的值。得到值 2066 的方法只有一个就是压缩和隐藏。你不可能通过别的数学方法来算得这样的值。 这个设计可以返回值并且决定哪个开关没有开哪个没有开。这个可以允许你来判断文件夹的哪个属性设定了。如果你得到了这个 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,然后回显文件夹属性: (译者注:这个其实是挨个匹配的,所以你要是测试了两个属性,它都会显示出来的。) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\FSO") If objFolder.Attributes AND 2 Then Wscript.Echo "Hidden folder." End If If objFolder.Attributes AND 4 Then Wscript.Echo "System folder." End If If objFolder.Attributes AND 16 Then Wscript.Echo "Folder." End If If objFolder.Attributes AND 32 Then Wscript.Echo "Archive bit set." End If If objFolder.Attributes AND 2048 Then Wscript.Echo "Compressed folder." End If ※改变文件夹属性 文件夹的每个属性可以看成一个个开关,如果关于隐藏的开关是ON 的,那么这个文件夹就是隐藏的,如果这个开关是 OFF 的,那么这个文件夹就不是隐藏的,你可以选择打开或者关掉它们,对于文件夹的属性也是如此:对于其它的开关,你可以将属性设置为开或者设置为关,你可以用脚本来控制这些开关的,最简单的控制属性开关的办法是用如下的程序: 1. 用 GetFolder 的方法来绑定到一个文件夹。 2. 检查你需要更改的值。例如你想隐藏一个文件夹,看这个文件夹是否是已经隐藏了 3. 如果这个文件夹是隐藏的,用 XOR 操作来将开关转换成非隐藏的。如果这个文件夹不是隐藏的,注意不要用 XOR,如果你用了,开关会被触发,文件夹会中止于隐藏。例如,下列脚本用 AND 来判断文件夹 C:\FSO 的隐藏属性开关是否开着。如果它是开的,脚本用 XOR 操作来将开关关闭来显示文件夹。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\FSO") If objFolder.Attributes AND 2 Then objFolder.Attributes = objFolder.Attributes XOR 2 End If 除非很少的一些情况以外,文件夹用来作为单独存放文件的地方。有时候,这些文件夹是系统需要的。例如操作系统希望在特定的文件夹内找到特定的文件。在其它的一些时候,文件夹是系统管理员管理计算机的一种工具也是用户管理文件的工具。系统管理员可能希望将脚本放在叫做Scripts 的文件夹,将一些 trouble-shooting 的工具放在叫做 Diagnostic Tools 的文件夹。用户或许将他们预算信息放在叫做 Budgets 的文件夹,而将薪水的信息放在叫做 Timecards 的文件夹。当然,文件夹一般是限制使用的,你必须知道这个文件夹是存放的是什么文件。系统管理员需要知道是不是有个特定的脚本存在 C:\Scripts 文件夹中,用户需要知道是不是有个特定的窗体存在C:\Budgets 的文件夹中。文件夹对象包含了一些属性可用来返回存储在文件夹内文件集合的信息,为了得到这些信息,你的脚本必须: 1. 创建一个 FSO 对象实例。 2. 用 GetFolder 的方法来绑定到一个适当的文件夹。 3. 设置一个对象 reference 来指向文件夹的属性 4. 用 For Each 循环来列举出所有的文件和他们的属性。脚本不必去绑定到每一个单独的文件去获得文件的信息。 在下列脚本中返回在文件夹 C:\FSO 下所有文件的信息并且回显他们的名字和大小: Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\FSO") Set colFiles = objFolder.Files For Each objFile in colFiles Wscript.Echo objFile.Name, objFile.Size Next 对于大多数返回的集合来说,你不能控制输出信息的顺序。就是说你不能将输出的格式定义为按照名字,按照大小或者其它别的原则。如果你想让输出的东西按照特定的格式,你就必须将他们拷贝到数组,目录或者一个 disconnected recordset 然后将他们分类排列。 为了需要知道文件夹中存放的文件,你需要知道文件夹子文件夹,这样,你才能更好的了解文件夹的整体结构。文件夹对象包含了一个 Subfolders 属性,用来放会在文件夹下的 top-level 子文件夹的信息。 Top-level 子文件夹是直接在文件夹下面的。在子文件夹中的子文件夹不在这个范围之内。例如,在下例中,只有 Subfolder1 Subfolder2 是文件夹 scripts 的 top-level 的子文件夹。所以,如果用 Subfolders 这个属性来返回值的话,就只是会返回 Subfolder1 和Subfolder2 ◎VBS脚本运行库手册之八(管理文件) Managing Files 管理文件系统的最终任务还是归结为管理单独的文件。作为一个系统管理员,你的工作是跟踪存储在计算机上的文件。例如,你需要知道正确的诊断工具是否被复制到了 server 上,你需要知道特定的文件(比如游戏文件或者音乐文件)是否被复制到了文件服务器上了,尽管你用了组策略去阻止他们将文件拷贝到文件的 server。你需要知道是否有的文件放在计算机上已经有几个月没有去访问了,而这些功能通过类似知道磁盘的剩余空间这样的操作是无法知道的。此外为了跟踪这些文件,你也需要动态的管理他们:需要复制,需要移动,需要重新命名,需要删除。FSO 提供了一些方法来帮助你完成这些管理任务。 Binding to a File FSO 给你提供了一些方法,比如 CopyFile,DeleteFile 允许你的脚本不用绑定一个特定的文件就可以对文件实例进行操作。而其它的任务,就需要文件对象。比如,为了获得一些属性,你的脚本首先就需要绑定到一个文件,然后再获得文件的属性。GetFile 方法允许你绑定到一个独立的文件。为了做到这点,你先创建一个 FSO 实例,然后创建一个文件对象。当你用 GetFile 方法的时候,你必须:1、确定文件的路径:这个路径可以是一个本地路径,也可以是一个 UNC 路径(例如:\\accounting\receivables\scriptlog.txt)在路径当中你不能用通配符也不能有多个文件。用 GetFile 方法你在同一个时刻只能绑定一个单独的文件。2、当绑定的对象分配给一个变量的时候就要用到 Set 这个关键词。 例如,下面脚本绑定到了文件:C:\FSO\Scriptlog.txt Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.GetFile("C:\FSO\ScriptLog.txt") 一般来讲,你最好用绝对路径来作 GetFile 的参数。这样确保脚本总是可以在文件中运行。但是,用相对路径也是可以的。例如,如下的脚本代码会绑定到 Scriptlog.txt 会成功,因为脚本和这个文件在同一个文件夹里面: objFSO.GetFile("ScriptLog.txt") 同样,下面的代码实例如果这个脚本和这个文件在同一个文件夹也会绑定到 Scriptlog.txt: objFSO.GetFile(".\ScriptLog.txt") 注意:FSO 不会用路径环境信息去搜索文件。例如,你可以在命令行中敲如 calc.exe 来打开计算机,而无论你当前的目录是在哪里,因为操作系统默认的情况下去搜索所有的文件的。但是用这个GetFile方法的时候,它不是这样的工作的。 如下脚本除非是在文件夹C:\Windows\System32 的文件夹下,否则都不会运行成功的。 objFSO.GetFile("calc.exe") 有时知道文件是否存在是十分重要的,这个可以作为软件清单的一部分。例如你或许希望检查所有的邮件服务器来看特定的脚本是否存在。用脚本来实现系统管理任务来说,知道脚本存在与否很重要的。比如你或许希望当你复制、移动、删除或者操作不存在的文件的时候,脚本报错。为了避免出现错误,你可以用 FileExists方法来检查文件是否存在。FileExists 方法要求一个单独的参数:文件的路径,然后返回一个特定的 Boolean 值:如果文件存在,返回的是 True,如果文件不存在,返回的是 False。 如下面脚本用 FileExists 方法来检查文件 C:\FSO\Scriptlog.txt 是否存在,如果存在,用 GetFile 方法来绑定到这个文件,如果不存在,脚本回显一个 message“file does not exist” Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists("C:\FSO\ScriptLog.txt") Then Set objFile = objFSO.GetFile("C:\FSO\ScriptLog.txt") Else Wscript.Echo "File does not exist.? End If 你不能用通配符来检查文件夹中特定类型的文件是否存在,你也不能用通配符拉来检查文件夹中所有的文件。如下面脚本,无论在文件夹 C:\FSO\下存在多少文件,都不会报错出来,而是总是返回一个 False. WScript.Echo objFSO.FileExists("C:\FSO\*.*") 如果你希望遵循一些条件原则检查一些文件而不是基于路径,你有下面两个选择: 1、用 GetFolder 对象来绑定一个文件夹,然后返回文件的属性,这样重复操作直到筛选出你感兴趣的。例如,你可以列举出所有的文件和文件的扩展名,然后跟踪看有多少个后缀名 为.doc 的文件。 2、用 WMI,它允许你创建更多的目标查询。比如选出所有后缀名为.doc 的文件。你可以用计数的办法来返回你要的特定的条目。如果数值是 0,那么,最少有一个是.doc 的文件。 Deleting a File 用 FSO 来创建脚本删除文件让你可以自动执行类似与磁盘清理之类的操作。例如,你可以用脚本定期查询和删除所有的临时文件。你也可以依照一些规则来删除文件,比如删除六个月都没有被访问的文件,或者特定的后缀名的文件,比如(.bmp 或者.mp3)你可以首先创建 FSO 对象实例,然后调用 DeleteFile 方法来删除文件,输入文件路径作为参数。 如下面脚本删除了文件 C:\FSO\Scriptlog.txt Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile("C:\FSO\ScriptLog.txt") 默认的情况下,DeleteFile 方法不会删除只读文件。事实上,当你尝试删除一个只读文件时,脚本会报错出来。为了避免这样的错误出现,如想删除只读文件的话,需添加强制参数,当强制参数设成 True 的时候,那么 DeleteFile 可以删除任何文件。如下面这行代码可以删除文件 Scriptlog.txt,即使它只是一个只读文件。 objFSO.DeleteFile("C:\FSO\ScriptLog.txt", True) Deleting a Set of Files 有时候你希望删除特定的、单独的文件。更有可能的是你可能想用脚本来删除一系列的文件。如在周末你或许想删除一些存盘了的日志文件或所有的临时文件。你可以通过通配符来删除一个文件夹之内的一些文件。但是你不能用 DeleteFile 方法来直接删除多个文件夹内部的文件。你可以通过用筛选每个数据夹的办法来逐个删除每个文件夹内部的文件。如果你想删除多个文件夹内部的特定类型的文件(比如删除计算机上全部的.TMP 文件)你应该用 WMI 而不是用 FSO。为了删除一系列文件,调用 DeleteFile 方法,根据文件的名字或者后缀名添加通配符来提供文件夹的路径。例如,下面的代码用来删除文件夹 C:\FSO 文件夹下的所有后缀名为.doc 的文件。 objFSO.DeleteFi
本文档为【VBS脚本运行库手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_962034
暂无简介~
格式:doc
大小:197KB
软件:Word
页数:47
分类:互联网
上传时间:2010-11-14
浏览量:36