[转载]确定一台计算机上最大的 20 个文件
<P>信息来源:脚本中心</P><P>理论上,只使用 WMI 即可确定计算机上最大的 20 个文件,但是编写相应的脚本却有些棘手,并且还可能花上数十万年时间运行。(这刚好相当于从您用餐完毕到巴黎侍者送上帐单之间的时间。)如果 WMI 是能找到最大的 20 个文件的唯一方法的话,我们只好硬着头皮这样做了。但是,还有更好、更容易的方法可做到这一点:下载、安装并使用 <A href="http://www.microsoft.com/technet/scriptcenter/tools/logparser/default.mspx"><B>Log Parser 2.2</B></A>。</P>
<P>如果您不熟悉 Log Parser 2.2,可以看看<A href="http://www.microsoft.com/technet/community/columns/scripts/sg0105.mspx"><B><I>脚本故事</I></B></A>专栏。Log Parser 是一个极好的小实用程序。顾名思义,它能快捷地分析纯文本日志文件。但是,Log Parser 同样能快捷地分析事件日志、文件系统、注册表,甚至 Active Directory。安装 Log Parser 后,检索(和筛选)计算机上最大的 20 个文件只需要几分钟的处理时间以及一个复杂不过如此的脚本:</P><PRE class=codeSample>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
</PRE>
<P>今天,我们不详述此脚本,详细信息请参阅<I>脚本故事</I>专栏。但是,我们应注意此脚本先创建了 <B>MSUtil.LogQuery</B> 对象的一个实例,然后用下行代码表示我们要处理文件系统中的项目。</P><PRE class=codeSample>Set objInputFormat = CreateObject("MSUtil.LogQuery.FileSystemInputFormat")
</PRE>
<P>然后,我们将 <B>Recurse</B> 属性的值设置为 -1,这会告诉 Log Parser 我们要往复搜索指定路径中的所有文件夹。(哦,对啦,我们还没有指定路径;我们马上就指定。)</P>
<P>前几行代码用于设置输入参数;接着,我们再用下两行代码设置输出参数:</P><PRE class=codeSample>Set objOutputFormat = CreateObject("MSUtil.LogQuery.NativeOutputFormat")
objOutputFormat.rtp = -1
</PRE>
<P>同样,我们在此只进行简要说明,第一行代码告诉 Log Parser 将数据输出到命令窗口;将 <B>rtp</B> 属性设置为 -1 告诉 Log Parser 立即写入所有数据,而不在完成每屏后停顿并等待用户按任意键继续。Log Parser 的用途不仅限于向命令窗口输出数据,但这似乎是当前最简单、最直观的方法。</P>
<P>设置好输入和输出参数后,我们接着创建 Log Parser 查询:</P><PRE class=codeSample>strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
</PRE>
<P>如果您有编写 SQL 查询的经验,此行代码应该十分简单。在此,我们要做的是找到最大的 20 个文件;为此,我们请求“Top 20”文件,按文件大小以降序排列。做出请求后,Log Parser 会捕获<I>所有</I>文件并按降序排列;但是,由于我们只请求前面(最大)的 20 个文件,所以屏幕上只显示最大的 20 个文件。如果需要最大的 50 个文件怎么办?那我们可以寻找最大的 50 个文件:</P><PRE class=codeSample>strQuery = "SELECT Top 50 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
</PRE>
<P>如果需要<I>最小的</I> 20 个文件怎么办?如果这样,我们把文件按升序排列,最小的文件会放在列表顶端:</P><PRE class=codeSample>strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size ASC"
</PRE>
<P>看到了吗?我们告诉过您这很容易。</P>
<P>正如您所看到的,我们只寻找了文件路径和大小;不用说,我们同样能获得文件的其他相关信息。(详细信息请参阅 Log Parser 文档。)另外,需要注意的是,我们必须指定要搜索的每个驱动器,驱动器之间用逗号分隔:</P><PRE class=codeSample>strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.*, D:\*.*' ORDER BY Size DESC"
</PRE>
<P>顺便说一下,<B>*.*</B> 是文件系统的标准通配符,其含意为“所有文件,无论文件名和扩展名如何”。如果我们只对最大的 20 个 Microsoft Word 文档感兴趣,需将查询修改如下:</P><PRE class=codeSample>strQuery = "SELECT Top 20 Path, Size FROM 'C:\*.doc, D:\*.doc' ORDER BY Size DESC"
</PRE>
<P>将脚本保存为 .vbs 文件并运行,您会惊讶地发现获得计算机上最大的 20 个文件的相关信息是多么快捷。</P>
页:
[1]
