0

我正在尝试编写一个脚本来删除不需要的临时文件。不过,我想专门针对.tmp。至少现在。所以我正在尝试编写一个 WQL 查询来返回一个集合,我可以使用该集合使用 FOR EACH 语句删除 C:\Users\\AppData\Local\Temp 中的所有 .tmp。我最近才开始学习 VBScript。但我有用 C/C++ 编写程序的经验(主要是“数学”程序)。

Cscript 似乎对查询本身没有问题。但是当我尝试对生成的集合使用 Count 方法时,cscript 返回错误:(17,1) Microsoft VBVScript 运行时错误:对象不支持此属性或方法:'colTempFiles.Count'。

我已经阅读了一些关于 WQL 的内容,认为可能由于某种原因我没有得到返回的集合。但我似乎找不到查询有什么问题。我在想也许我不应该从 FileSystemObject 中选择。但是我已经阅读了我能找到的关于它的内容,这似乎是正确的做法(尽管 MSDN 上确实没有很多有用的信息)。

无论如何,这是我目前拥有的脚本,没有评论。第二行是我目前没有使用的东西,但稍后会尝试使用,这样我就可以将变量定义为本地计算机的用户名,而不必专门指向本地 Temp 文件夹的路径。任何帮助将不胜感激:

strComputer = "."
strUser="adam"


Set objFSO=CreateObject("Scripting.FileSystemObject")

Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")


Set colTempFiles = objWMIService.ExecQuery _
 ("SELECT * FROM FileSystemObject WHERE Name = '*.tmp' AND "_
 & "NOT Name LIKE 'Prf%' AND Path LIKE 'C:\Users\adam\AppData\Local\Temp\%'")

colTempFiles.Count



For Each objFile in colTempFiles
Wscript.Echo objFile.Name
 'Set objF=objFSO.GetFile("objFile.Path")
 'objF.Delete(True)
Next
4

1 回答 1

3

我认为您混淆了两种不同的技术。AFileSystemObject是一个需要在 VBScript中实例化的COM 类。CreateObject()对于 WQL,您需要在查询中使用WMI 类。这是WMI 类的核心列表。出于您的目的,您将希望使用CIM_DataFile该类来处理文件。

您可以使用任何一种技术。FileSystemObject如果您使用本地文件系统,这是首选方法。如果您需要处理远程计算机上的文件,请使用 WMI 和 WQL。

这是一个使用 a 的示例FileSystemObject

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Users\adam\AppData\Local\Temp")

For Each objFile In objFolder.Files
    If StrComp(objFSO.GetExtensionName(objFile.Path), "tmp", vbTextCompare) = 0 Then
        objFile.Delete    ' This is the Delete() method of the FSO's "File" class
    End If
Next

这是一个使用 WQL 的示例:

strComputer = "."

' Connect to the WMI service on the specified computer...
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

' Build our WQL query...
strQuery = "select * from CIM_DataFile "
strQuery = strQuery & "where Drive='C:' "
strQuery = strQuery & "and Path='\\Users\\adam\\AppData\\Local\\Temp\\' "
strQuery = strQuery & "and Name like '%.tmp'"

' Run the query...
Set colTempFiles = objWMIService.ExecQuery(strQuery)

' Delete each file...
For Each objFile In colTempFiles
    objFile.Delete    ' This is the Delete() method of the WMI "CIM_DataFile" class
Next
于 2014-08-04T23:49:39.513 回答