0

不要な一時ファイルを削除するスクリプトを作成しようとしています。ただし、特に .tmp をターゲットにしたいと考えています。少なくとも今のところ。そのため、FOR EACH ステートメントを使用して C:\Users\\AppData\Local\Temp 内のすべての .tmp を削除できるコレクションを返す WQL クエリを作成しようとしています。最近 VBScript の学習を始めたばかりです。しかし、私は C/C++ でプログラムを書いた経験があります (主に「数学的な」プログラム)。

Cscript はクエリ自体に問題はないようです。しかし、結果のコレクションで Count メソッドを使用しようとすると、cscript はエラーを返します: (17,1) Microsoft VBVScript ランタイム エラー: オブジェクトはこのプロパティまたはメソッドをサポートしていません: 'colTempFiles.Count'.

何らかの理由でコレクションが返されないのではないかと考えて、WQL について少し調べました。しかし、クエリに問題があるようには見えません。FileSystemObject から選択するべきではないのではないかと考えています。しかし、私はそれについて見つけることができるものを読みました.それは正しいことのようです (ただし、MSDN には実際には多くの役立つ情報はありません)。

とにかく、これが私が現在持っているスクリプトです。コメントはありません。2 行目は、現在は使用していませんが、後で使用する予定です。これにより、変数をローカル コンピューターのユーザー名として定義でき、ローカルの一時フォルダーのパスを具体的に指す必要がなくなります。どんな助けでも大歓迎です:

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

2 つの異なる技術を混同していると思います。AFileSystemObjectは、VBScriptを使用してインスタンス化する必要があるCOM クラスです。CreateObject()WQL の場合、クエリでWMI クラスを使用する必要があります。WMI クラスの主要なリストを次に示します。目的のために、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
于 2014-08-04T23:49:39.513 に答える