我正在尝试编写一个脚本来删除不需要的临时文件。不过,我想要专门针对.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
答案 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