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

问:
您好,脚本专家!如何运行脚本取消隐藏文件夹中的所有文件?
-- 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 会将开关由关转为开。)因此在开始转换开关前,应检查每个文件的值。
运行此脚本 – 找到你们了,都出来吧!– 之前隐藏的所有文件都会重新出现。然后轮到您藏起来,看看这些文件能否找到您。

(0)

相关推荐

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

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

  • 用vbs实现按创建日期的顺序列出一个文件夹中的所有文件

    问: 你好,脚本专家!如何按创建日期的顺序列出一个文件夹中的所有文件? -- CL 答: 你好,CL.您知道,如果我们雄心勃勃并且努力工作,我们会坐下来为您写一个脚本,以使用 WMI 返回一个文件夹中的所有文件.该脚本将获取有关所有这些文件的信息,并将该数据存储在未连接的记录集中.然后,在该记录集中设置排序顺序以按创建日期和时间对文件进行排列.(接着,我们进行大量的重复性工作,以将 WMI 的日期时间值转换为易读的日期时间格式.)最后,我们将记录集中的所有值回显到屏幕上.它需要花费大量时间并编写

  • Append打开指定文件夹中的数据文件就象这些文件在当前文件夹中一样

    允许程序打开指定文件夹中的数据文件就象这些文件在当前文件夹中一样.如果在没有参数的情况下使用,则 append 命令显示附加的目录列表. 语法 append [;] [[Drive:]Path[;...]][/x:{on|off}][/path:{on|off}] [/e] 参数 取消附加文件夹列表. [Drive:}Path 指定要附加到当前文件夹的驱动器和文件夹.如果未指定驱动器,将默认使用当前驱动器.可以指定 [Drive:]Path 的多个项,各项之间要用分号隔开. /x:{on | o

  • 浅谈Python批处理文件夹中的txt文件

    1 文件处理形式  近期由于处理大量数据,所以对于采用python进行处理文件的一些操作也打算整理一下:接下来主要说一下如何处理目录下的一系列txt文件.首先看一下我们将要处理目录下的15个类似的数据文件,其中提取的数据如图所示,以及在读写文件时所需要的关键词,可以让程序正确读写相应的数据 2.代码段-python 接下来就是贴出相应的python代码,具体一些关键的注释我已经标注好了,具体数据结果就不展示了,如果大家想拿我的数据进行测试联系我就好,但是一般情况下在我标注的地方进行相应的修改就好

  • 使用Python实现从各个子文件夹中复制指定文件的方法

    之前用来整理图片的小程序,拿来备忘,算是使用Python复制文件的一个例子. # -*- coding: utf-8 -*- #程序用来拷贝文件并输出图片采集日期等其他信息到Excel中 #文件夹结构: #2016_07_07 # -Data_07_07_001 # -Random1 # -image001_co.pgm # -image001_c1.pgm # -image002_co.pgm # -image002_c1.pgm # --- # -Random2 # --- # -Data_

  • Java如何通过File类方法删除指定文件夹中的全部文件

    前言 对delete的解说 那么问题来了!!! (②中的问题,怎么删除文件夹里所有文件,想必很多同学也和我一样懵,) 别着急(往下看) 要用到的方法 (递归思想) 如果文件夹里面还有文件夹,就继续往下找(可能不太官方,个人理解) 接下来 代码展示 方法一: package com.study; import java.io.File; import java.io.IOException; /** 1. 应用场景 2. delete删除只能删除空文件夹 和文件 3. 删除指定文件夹 */ pub

  • java如何读取某个文件夹中的全部文件(包括子文件夹)

    目录 java读取某个文件夹中的全部文件 主要思路 示例 java获取文件夹下指定的文件 java读取某个文件夹中的全部文件 主要思路 使用file.listFiles()函数可以获取到某文件夹下的所有文件信息,如果需要访问子文件夹下的文件,则需要对获取到的文件信息进行递归遍历,如果是目录则继续统计,如果是文件则加入文件列表中 示例 例如我想读取该java项目中所有的文件(包括子文件夹中的文件) 则将第十一行的basePath修改为该文件夹所在路径,运行结果如下图所示 代码 package cn

  • Shell脚本实现从文件夹中递归复制文件

    需求 前两天碰到需要在十层左右的文件夹中提取文件的需求,于是写了此脚本. 如下面这样的文件结构: 复制代码 代码如下: dir1     ├── a     │   ├── b     │   │   └── file1     │   └── file2     ├── c     │   └── d     │       ├── e     │       │   └── file4     │       └── file3     └── file5 我们需要将其中的file1~fil

  • Powershell小技巧--将文件夹中的大文件分成若干份

    朋友有一文件夹,全部是EML文件,约20G.他需要把这20G文件按每个文件夹2G分成10个.于是乎写了以下脚本: #目标文件夹 $scrfile = "d:\test" #起始目录名 $directory = 0 #1825361100 #76547428 #判断当目录的文件数大于0时while循环为真 while( (dir -Path $scrfile -Filter *.eml ).count -gt 0) { #起始目录名为1 $directory++ #建立目录 New-It

  • JAVA遍历一个文件夹中的所有文件的小例子

    复制代码 代码如下: import java.io.File;import java.util.ArrayList; public class FileTest { private static ArrayList<String> filelist = new ArrayList<String>(); public static void main(String[] args) throws Exception { String filePath = "E://Strut

随机推荐