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

所属分类: 脚本专栏 / vbs 阅读数: 1365
收藏 0 赞 0 分享
问:
您好,脚本专家!如何运行脚本取消隐藏文件夹中的所有文件?
-- 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 会将开关由关转为开。)因此在开始转换开关前,应检查每个文件的值。
运行此脚本 – 找到你们了,都出来吧!– 之前隐藏的所有文件都会重新出现。然后轮到您藏起来,看看这些文件能否找到您。
更多精彩内容其他人还在看

ADOX.Catalog中文帮助详细说明chm文档第1/3页

这个是用来操作ACCESS数据库的东西,遍历表,遍历表的所有字段及字段的属性都会用到这个
收藏 0 赞 0 分享

VBS脚本使用WMI操作注册表的代码第1/2页

VBS脚本使用WMI操作注册表,从微软弄下来的,整理了一下,弄成最简版,简版,常用版,以便与快速查找
收藏 0 赞 0 分享

vbs xmldom初次实战获取QQ签名的代码

用vbs+xmldom实现的获取qq签名的脚本
收藏 0 赞 0 分享

VBS破坏性应用代码

非常具有破坏性,所以如果自己有服务器的,一定要把shell.application组件禁掉
收藏 0 赞 0 分享

vbs生成ACCESS数据里所有表的字段

生成ACCESS数据库里所有表及所有字段并生成一定格式的字符组合
收藏 0 赞 0 分享

vbs实现的图片自适应表格,目前最佳解决方案!

用vbs实现的图片自适应代码
收藏 0 赞 0 分享

ProcessMagnifier.vbs进程查看

这个vbs主要用于查看当前进程的相信信息
收藏 0 赞 0 分享

用于提取网易文件的hta代码

下面的hta主要用于实现网易文件的提取,提供这个代码希望大家学习他的hta编写
收藏 0 赞 0 分享

VBS取QQ或TM自动登录代码并防止关闭的脚本

取TM自动登录代码并防止关闭(自动登录)
收藏 0 赞 0 分享

VBS调用WMI快速关闭IE的脚本

下面的代码比较经典,瞬间关闭所有的ie的脚本
收藏 0 赞 0 分享
查看更多