灵活利用脚本搜索计算机上的特定文件

理论上,只使用 WMI 即可确定计算机上的文件,但是编写相应的脚本却有些棘手,并且还可能花上数十万年时间运行。(这刚好相当于从您用餐完毕到巴黎侍者送上帐单之间的时间。)如果 WMI 是能找到最大的文件的唯一方法的话,我们只好硬着头皮这样做了。但是,还有更好、更容易的方法可做到这一点:下载、安装并使用 Log Parser 2.2。

如果您不熟悉 Log Parser 2.2,可以看看脚本故事专栏。Log Parser 是一个极好的小实用程序。顾名思义,它能快捷地分析纯文本日志文件。但是,Log Parser 同样能快捷地分析事件日志、文件系统、注册表,甚至 Active Directory。安装 Log Parser 后,检索(和筛选)计算机上的文件只需要几分钟的处理时间以及一个复杂不过如此的脚本:

CODE:
Set objLogParser = CreateObject("MSUtil.LogQuery")
Set objInputFormat = CreateObject("MSUtil.LogQuery.FileSystemInputFormat")
objInputFormat.Recurse = -1

Set objOutputFormat = CreateObject("MSUtil.LogQuery.NativeOutputFormat")
objOutputFormat.rtp = -1

strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
objLogParser.ExecuteBatch strQuery, objInputFormat, objOutputFormat
[Copy to clipboard]


今天,我们不详述此脚本,详细信息请参阅脚本故事专栏。但是,我们应注意此脚本先创建了 MSUtil.LogQuery 对象的一个实例,然后用下行代码表示我们要处理文件系统中的项目。


CODE:
Set objInputFormat = CreateObject("MSUtil.LogQuery.FileSystemInputFormat")
[Copy to clipboard]


然后,我们将 Recurse 属性的值设置为 -1,这会告诉 Log Parser 我们要往复搜索指定路径中的所有文件夹。(哦,对啦,我们还没有指定路径;我们马上就指定。)

前几行代码用于设置输入参数;接着,我们再用下两行代码设置输出参数:

CODE:
Set objOutputFormat = CreateObject("MSUtil.LogQuery.NativeOutputFormat")
objOutputFormat.rtp = -1
[Copy to clipboard]


同样,我们在此只进行简要说明,第一行代码告诉 Log Parser 将数据输出到命令窗口;将 rtp 属性设置为 -1 告诉 Log Parser 立即写入所有数据,而不在完成每屏后停顿并等待用户按任意键继续。Log Parser 的用途不仅限于向命令窗口输出数据,但这似乎是当前最简单、最直观的方法。

设置好输入和输出参数后,我们接着创建 Log Parser 查询:

CODE:
strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
[Copy to clipboard]


如果您有编写 SQL 查询的经验,此行代码应该十分简单。在此,我们要做的是找到最大的 20 个文件;为此,我们请求“Top 20”文件,按文件大小以降序排列。做出请求后,Log Parser 会捕获所有文件并按降序排列;但是,由于我们只请求前面(最大)的 20 个文件,所以屏幕上只显示最大的 20 个文件。如果需要最大的 50 个文件怎么办?那我们可以寻找最大的 50 个文件:

CODE:
strQuery = "SELECT Top 50 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
[Copy to clipboard]


如果需要最小的 20 个文件怎么办?如果这样,我们把文件按升序排列,最小的文件会放在列表顶端:

CODE:
strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size ASC"
[Copy to clipboard]

看到了吗?我们告诉过您这很容易。

正如您所看到的,我们只寻找了文件路径和大小;不用说,我们同样能获得文件的其他相关信息。(详细信息请参阅 Log Parser 文档。)另外,需要注意的是,我们必须指定要搜索的每个驱动器,驱动器之间用逗号分隔:

CODE:
strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
[Copy to clipboard]

顺便说一下,*.* 是文件系统的标准通配符,其含意为“所有文件,无论文件名和扩展名如何”。
如果我们只对最大的 20 个 Microsoft Word 文档感兴趣,需将查询修改如下:

CODE:
strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.doc, D:\*.doc' ORDER BY Size DESC"
[Copy to clipboard]

将脚本保存为 .vbs 文件并运行~
从此您会惊讶地发现搜索你的计算机上的特定文件是多么快捷。
其实方法还有很多,比如把计算机里的文件信息建成一张Sql表,放在数据库里,然后用sql语句写个存储过程,需要的时候就用exec 存储过程名(必要的参数) 调用下就OK了~!