[转载]如何才能验证文件夹中是否有文件?如果有文件,如何删除这些文件?
<P>信息来源:脚本中心</P><DIV class=QBlock>
<P>您好,脚本专家!如何才能验证某一文件夹 (C:\TestLog) 中是否有文件?如果有文件,如何删除所有这些文件?</P>
<P>-- DC</P></DIV>
<H5 style="PADDING-BOTTOM: 5px; COLOR: #999999">答:</H5>
<DIV class=ABlock>
<P>您好,DC。在开始回答问题之前,我们首先应说明一点,即在使用 WMI 时,不用考虑文件夹中是否有文件。您尽可以告诉 WMI 删除该文件夹中的所有文件。如果没有此类文件,也丝毫不会使 WMI 分阶段运行。为什么我们要让您知道这一点呢?只是想指明,如果您只关心如何删除文件,则不必对验证文件中实际是否<I>有</I>文件担心。您只需删除即可。</P>
<P>当然,您也许是出于其他原因才想知道文件夹中是否有文件。考虑到这一点,我们编写出下面的脚本:</P><PRE class=codeSample>strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\TestLog'} Where " _
& "ResultClass = CIM_DataFile")
If colFileList.Count = 0 Then
Wscript.Echo "There were no files in the folder."
Else
Wscript.Echo "There were " & colFileList.Count & " files in the folder."
For Each objFile In colFileList
objFile.Delete
Next
End If
</PRE>
<P>该脚本首先连接本地计算机上的 WMI 服务。如果您想知道我们为什么选用 WMI 执行这项任务(而不选用其他对象,例如 FileSystemObject),以下就是原因:尽管此脚本原本应在本地计算机环境下运行,但我们可以轻松地将它改为在我们拥有本地“管理员”权限的<I>任意</I>计算机环境下运行。我们只需将变量 strComputer 的值从一个圆点(表示本地计算机的 WMI 值)改为远程计算机的名称即可。若使用 FileSystemObject,就无法做到这一点,至少不会轻易做到。</P>
<P>连接 WMI 服务后,我们就使用下列这行代码检索文件夹 C:\TestLog 中所有文件的集合:</P><PRE class=codeSample>Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\TestLog'} Where " _
& "ResultClass = CIM_DataFile")
</PRE>
<P>是的没错,<B>Associators Of</B> 查询看上去有点可笑,但不要去管它。您真正需要知道的是:使用其他任何文件夹(例如 D:\Logfiles)就像用路径 D:\Logfiles 替换路径 C:\TestLog 一样简单:</P><PRE class=codeSample>Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='D:\Logfiles'} Where " _
& "ResultClass = CIM_DataFile")
</PRE>
<P>当然,这样就已经很令人满意了,但我们如何才能知道 C:\TestLog 中是否有文件呢?在本例中,我们的查询会返回一个文件集合,这个集合由文件夹 C:\TestLog 中的所有文件(<B>CIM_DataFile</B> 类的实例)组成。事实上,WMI 集合有一个名为 <B>Count</B> 的属性,此属性可返回集合中的项目数。我们只需检查 Count 是否等于 0 就可确定文件夹中是否有文件。</P><PRE class=codeSample>If colFileList.Count = 0 Then
</PRE>
<P>如果 Count <I>等于</I> 0,则表明文件夹中没有任何文件,这样我们就回显一条消息,说明文件夹中没有文件。如果 Count <I>不等于</I> 0,那么我们要做两件事情。首先,我们利用这行代码发回报告,报告文件夹中<I></I>文件的数量:</P><PRE class=codeSample>Wscript.Echo "There were " & colFileList.Count & " files in the folder."
</PRE>
<P>然后,我们建立一个 For Each 循环,以遍历该文件集合。对集合中的每个文件我们都调用 <B>Delete</B> 方法,删除该文件:</P><PRE class=codeSample>For Each objFile In colFileList
objFile.Delete
Next
</PRE>
<P>当我们完成了 For Each 循环之后,所有文件都将被删除,从此以后,每个文件都将过上安逸的生活。(当然,除了那些被我们破坏的可怜文件。但愿它们都能有一个更好的归宿。)</P></DIV>
页:
[1]
