查询以选择所有非基本临时文件

时间:2014-08-04 21:42:51

标签: vbscript filesystemobject wql

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

Cscript似乎对查询本身没有任何问题。但是当我尝试在结果集合上使用Count方法时,cscript会返回错误:(17,1)Microsoft VBVScript运行时错误:对象不支持此属性或方法:' colTempFiles.Count&#39 ;

我已经读了一下WQL,认为我可能因为某种原因没有收到回复的信息。但我似乎无法发现查询有任何问题。我想,也许我不应该从FileSystemObject中选择。但是我已经阅读了我能找到的内容,这似乎是正确的做法(虽然在MSDN上确实没有很多有用的信息)。

无论如何,这里是我目前拥有的剧本,没有评论。第二行是我目前没有使用的,但我将稍后尝试使用,以便我可以将变量定义为本地计算机的用户名,而不必指向本地Temp文件夹' s路径具体。任何帮助将不胜感激:

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

1 个答案:

答案 0 :(得分:3)

我认为你混淆了两种不同的技术。 FileSystemObject COM类,需要在VBScript中使用CreateObject()进行实例化。对于WQL,您需要在查询中使用 WMI类。这是a core list of WMI classes。出于您的目的,您将要使用CIM_DataFile类来处理文件。

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

以下是使用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