您好,AH。如果我们没搞错的话,您是想知道这个星期日西雅图海鹰队是否真的参加超级投球比赛。对,这是真的:我们钟爱的海鹰队就要与一些二流球队开赛了。这对于住在西雅图的球迷来说真是太棒了:海鹰队进入了超级投球比赛;华盛顿大学男子篮球队在全国排在第 15 位;它的女子排球队在全国锦标赛中取胜;西雅图超音速 -
嗯,我们提到了女子排球队在全国锦标赛取胜了吗?
实际上,进一步思考之后,我们怀疑您可能想要知道如何在单个 WQL 查询中搜索多个文件扩展名。那么,您为什么不这么说:
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_Datafile Where Extension = 'mp3' OR Extension = 'wma'")
For Each objFile in colFiles
Wscript.Echo "Name: " & objFile.Name
Next
正如您所看到的,这差不多是您能获得的最简单的 WMI 脚本。我们首先连接到本地计算机上的 WMI 服务。然后,创建一个查询来搜索两种类型的文件:具有文件扩展名 mp3 的文件和具有文件扩展名 wma 的文件。检索文件之后,我们设置一个 For Each 循环来遍历此集合并回显每个文件的名称。
此处需注意两个问题。第一,WMI 属性的名称为 Extension(是的,我们不知道为什么不称其为 FileExtension)。第二,请注意我们要搜索扩展名为 mp3 的文件,而不是搜索扩展名为 .mp3 的文件。请确保您删除了那个点;否则脚本不会返回任何数据。
|
注意:另外一点是:针对整个文件系统运行查询要花费很长时间,这取决于您机器上的文件数量。这并不意味着您不能或不应该这么做;我们只是想提醒大家,像这样的脚本很可能要花费几分钟(或更多)时间来完成。(编辑附注:现在他告诉我们。) |
那么,到底如何搜索多个文件扩展名呢?嗯,考虑一下您的任务:您希望获得具有文件扩展名 mp3 或 wma 的文件的列表。当您如此编写该任务时,关键字将是 or;在编写 WQL 查询时,也是如此。再让我们看一下该查询:
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_Datafile Where Extension = 'mp3' OR Extension = 'wma'")
您已经找到了答案:Where Extension = 'mp3' OR Extension = 'wma'。关键是记住您想要的文件扩展名为 mp3 或 wma。人们经常会误以为“我想要的是文件扩展名为 mp3 的所有文件以及文件扩展名为 wma 的所有文件。”结果,他们最后编写类似下面的查询:
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_Datafile Where Extension = 'mp3' AND Extension = 'wma'")
虽然我们不知道在您的计算机上存储了什么文件,但是我们已经知道这个查询会找到多少文件:0. 为什么?因为,在此我们要说的是:找到具有文件扩展名 mp3 且具有文件扩展名 wma 的所有文件。不用说,具有两种文件扩展名的文件不会有很多。不要弄混 AND 和 OR。在您想要扩展搜索时使用 OR,想要约束搜索时使用 AND。
还应注意,每次您都需要指定属性:Extension = 'mp3' OR Extension = 'wma'。如果试图投机取巧的话,您的脚本将不会起作用:Extension = 'mp3' OR 'wma'。
最后,我们将指出,您也可以对文件扩展名以外的内容使用 OR 运算符。例如,此处有一个查询,它返回所有已停止或暂停的服务的列表:
Set colFiles = objWMIService.ExecQuery _
("Select * from Win32_Service Where State = 'Stopped' OR State = 'Paused'")
同样,您可以包括两个以上的 OR 子句。如果对带 wav 扩展名的文件也感兴趣,那么就将以下代码添加到查询中:
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_Datafile Where Extension = 'mp3' OR Extension = 'wma' OR Extension = 'wav'")
哦,还有一件事:去看海鹰队!