您好,GM。这其实是很简单的事情。我们只需编写一个 WMI 查询,其中需要包含要检查的文件夹的路径和我们打算查找的文件扩展名。例如,下面的脚本可检索位于 C:/Scripts 文件夹中的所有 .txt 文件的集合:
strComputer = "."Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colFiles = objWMIService._ ExecQuery("SELECT * FROM CIM_DataFile WHERE Path = '//Scripts//' " & _ "AND Drive = 'C:' AND Extension = 'txt'")
Wscript.Echo "Number of .txt files found: " & colFiles.Count
如果您仔细观察此脚本(大家对脚本之类的东西一向都看得很仔细的,不是吗?),您会发现一些情况。第一,我们没有将路径指定为 C:/Scripts;而是将驱动器(“C:”)与文件夹(“Scripts”)分开了。为什么这样做呢?因为,不论是好是坏,这就是 CIM_DataFile 类的运行方式,它将我们所说的文件路径分成了驱动器和文件夹。实际上,驱动器参数在此是可选项;我们可以省略它,除非我们还有一个名为 D:/Scripts 的文件夹。如果是这种情况,驱动器参数就成了必选项;如果省略它,查询将返回所有位于路径 Scripts 中的文件夹中的文件。除了 C:/Scripts 外,还有 D:/Scripts(以及 E:/Scripts 和 F:/Scripts 等等)。
第二,您可能已经注意到了我们在路径两边使用了“//”;这样,我们使用的是“//Scripts//”,而不是 /Scripts/(即 C:/Scripts)。为什么?再强调一下,这正是 WMI 的运行方式;无论何时您在 WHERE 子句中包含文件路径,您都需要使用两个 //。如果想检查文件夹 C:/Documents and Settings/Ken Myer/Desktop/Work Files 是否包含 .txt 文件,该怎么办呢?这种情况下,WHERE 子句应类似于:
WHERE Path = '//Documents and Settings//Ken Myer//Desktop//Work Files//
注意,路径结尾同样有两个 //。这很重要;不要忽略它们。(除非您不在乎该脚本是否真的能用。)在我们忙着编写代码的时候,您瞧我们在指定文件扩展名时没有包含句点;所以,扩展名只是“txt”,而不是“.txt”。
获取集合后,我们只需回显该集合的“Count”属性的值。这将告诉我们找到了多少 .txt 文件。如果 Count 为 0,则说明我们没有找到任何 .txt 文件;如果 Count 为 7,我们找到了 7 个 .txt 文件。如果 – 您自己可以推断其他情况。
我们说过这很简单,对吧。嘿,偶尔我们也说到做到呀!