当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs实现取消隐藏文件夹中的所有文件

VBScript
一个实现VBS倒计时的代码
用vbs实现将剪切板的unix格式的内容处理成pc格式的代码
用vb和vbs 破解flashxp的密码的代码
用VBS实现的批量gb2312转utf-8,支持拖动
用vbs实现的XP序列号替换器
VBS可以做什么的简单说明
用vbs实现cmd功能的代码
VBS基础编程教程 (第1篇)
VBS基础编程教程 (第3篇)
VBS基础编程教程 (第4篇)
VBS基础编程教程 (第5篇)
VBS基础编程教程 (第6篇)
利用vbscript的for命令实现定时关机
在桌面右下角出现温馨提示的vbs冒泡程序
利用VBS发送邮件 挑选速度快的肉鸡做VPN 的vbs代码
vbs教程 chm下载
用vbs实现的简单的服务器文件备份办法压缩文件名自动按日期命名
输入mdb数据库即可将打包的mdb文件解包
VBS编程教程第一部
vbs脚本 加密 几个小细节小结下

VBScript 中的 用vbs实现取消隐藏文件夹中的所有文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 51 ::
收藏到网摘: n/a

问:
您好,脚本专家!如何运行脚本取消隐藏文件夹中的所有文件?
-- GA
答:
您好,GA。您知道我们中的一位脚本专家在年少时和邻居家的其他小孩花费无数的时间玩各种捉迷藏。事实上,这位脚本专家仍清晰地记得躺在浅沟中,让其他组的人从他身上走过,却不知道他就在那儿。(这种方法如此奏效,以致于他正认真考虑在自己的办公室挖一条浅沟,这样有人找他的时候就可以躲在浅沟里了。)
回到那些日子,您不会想要一种能自动取消隐藏一切的脚本;这种脚本可能很有用,但却没什么乐趣。但作为系统管理员,您大概并不愿意与文件玩捉迷藏。您或许乐意接受能自动取消隐藏文件夹中所有文件的脚本,也就是类似如下的脚本:
复制代码 代码如下:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set FileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='c:\Scripts'} Where " _
& "ResultClass = CIM_DataFile")
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objFile In FileList
Set objFile = objFSO.GetFile(objFile.Name)
If objFile.Attributes AND 2 Then
objFile.Attributes = objFile.Attributes XOR 2
End If
Next
此脚本有些不同寻常,因为我们同时使用了 WMI 和 FileSystemObject。(当然,这听起来很危险,其实不然:毕竟,我们是经过专门训练的专业人员。)首先连接到本地计算机的 WMI 服务(我们马上就会谈到这一点),然后使用以下查询检索 C:\Scripts 文件夹下所有文件的集合(也就是 CIM_DataFile 类的所有实例):
Set FileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='c:\Scripts'} Where " _
& "ResultClass = CIM_DataFile")
我们使用 WMI 检索文件的集合,因为使用它十分快捷,并且在多数情况下可以使用同一脚本向外从远程计算机检索文件的集合。然而遗憾的是,WMI 无法用于取消隐藏文件;CIM_DataFile 类确实包括一个名为 Hidden 的属性,但它是只读属性。这就是我们必须同时使用 WMI 和 FileSystemObject 的原因:我们使用 WMI 获取文件的集合,然后使用 FileSystemObject 取消隐藏这些文件。
令人沮丧的是,这也意味着此脚本必须在本地计算机上运行;因为与 WMI 不同,FileSystemObject 无法远程工作。真是差劲。
不管怎样,获得文件集合后,我们创建一个 FileSystemObject 实例然后建立一个 For Each 循环以遍历此组文件。在 For Each 循环内,使用下行代码绑定到每个文件:
Set objFile = objFSO.GetFile(objFile.Name)
正如您所见,我们只是调用了 GetFile 方法,为其传递 Name 属性的值(使用 WMI 获得)。Name 属性相当于文件路径;因此文件“名”至少在 WMI 中类似于 C:\Scripts\My_file.txt。
绑定到给定文件后,检查文件是否隐藏;隐藏或未隐藏正好是文件属性的一部分。使用下行代码检查是否打开了隐藏属性的“开关”。如果开关打开、文件隐藏,则此语句为 True。如果开关关闭、文件未隐藏,此语句为 False:
If objFile.Attributes AND 2 Then
注意。文件属性是作为 bitmask 属性存储的。在本专栏中,我们不详细说明 bitmask 属性的详细内容,但您可以在 Microsoft Windows 2000 脚本指南 中找到 bitmask 的详细解释和使用方法。
为什么要关心文件是否已隐藏?取消对隐藏文件的隐藏最简单的方法是将开关由开转为关,事实上,下行代码就起到这一作用:
objFile.Attributes = objFile.Attributes XOR 2
但是,XOR 运算符并非特别聪明:它只是将开关由一种状态转为另一状态。如果开关为开,就将其关闭;如果开关为关,就将其打开。这就是我们检查文件当前状态的原因。如果文件被隐藏,则要使用 XOR 将开关由打开转为关闭。但是,如果文件未被隐藏,应该怎么办呢?这种情况下,不需要转换开关;这样做会隐藏文件。(因为 XOR 会将开关由关转为开。)因此在开始转换开关前,应检查每个文件的值。
运行此脚本 – 找到你们了,都出来吧!– 之前隐藏的所有文件都会重新出现。然后轮到您藏起来,看看这些文件能否找到您。