私はWQL検索を使ってVBScriptを使ってWindows検索ユーティリティに代替検索ユーティリティを作成しましたが、それはかなり遅いです。私はそれをスピードアップしたいと思います。私はそれを行うことができますが、私はWQLの検索の後に私の検索フィルターを置き、私のFor Each
声明の前に置く必要があります。これも可能ですか?VBScriptでWMIを検索した後、 "For Each"ステートメントの前に検索フィルタを作成できますか?
私はすでにWQL検索でフィルタリングしてテストしましたが、WQL検索後にフィルタリングすると約40%高速です。私はiFlags
の有無にかかわらずテストしましたが、MSはそれ以外の場合は信じているように見えますが、検索をかなり遅くする傾向があります。
ファイルがFor Each
ステートメントの後にある場合、スクリプトはファイルを列挙するたびに検索フィルターを作成する必要があるため、ユーザーはファイル名、作成日、最終更新日およびファイルサイズで検索できます。私は、検索をしばらく切ることを希望して、一度フィルターを作成したいと思います。
これはおそらく私が投稿したコードのスニペットを見てみると良いでしょう。あなたがしているファイルの名前に依存するため:(現地時間にUTCからの変換、フォーマットのファイルサイズなどIE)
Dim strSearchName, strComputer, objSWbemServices, objFile, colFiles
Dim strFileName, strReturnedFileName, strQueryDriveAndPath
strSearchName = "test" 'Text being searched for - change as needed
strQueryDriveAndPath = "PATH = '\\Drop_RW\\' AND DRIVE = 'D:'" 'Path and drive in which to search - change as needed
strComputer = "."
Set objSWbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFiles = objSWbemServices.ExecQuery("Select * from CIM_DataFile WHERE " & "" & strQueryDriveAndPath & "")
'* I'd like to place the call to "subCreateSearchString" here
On Error Resume Next
For Each objFile in colFiles
strReturnedFileName = objFile.Name
subCreateSearchString ' Search filter - it works when placed here
If strSearchForString Then
MsgBox "File matches:" & vbCrLf & strReturnedFileName
Else
MsgBox "File DOES NOT match" & vbCrLf & strReturnedFileName
End If
Next
Sub subCreateSearchString
'* Set Filename Variable for search:
strFileName = InStr(LCase(strReturnedFileName), LCase(strSearchName))
strSearchForString = strFileName
End Sub
ワウ - あなたは非常に豊富な知識です!すべてのアドバイスをありがとう。私は今、改訂すべきコードをたくさん持っています。 – user7207540
あなたが言うことができるように(ほとんどの場合)、私は先進的なテクニックを使用しようとしている初心者より少し上級です...これは私が学ぶ方法です。私の質問に関しては、おそらく、それはそれが繰り返す各ファイルに検索文字列を作成する必要がないように私のコードを変更する方法はありますか?私はあなたに(または他の誰かに)私のコードを書くよう求めていないことに注意してください。再度、感謝します! – user7207540
ファイル名に文字列が含まれているかどうかをチェックせずに、ファイル名に文字列が含まれているかどうかを確認することはできません。スクリプトをスピードアップするには、おそらくWMIクエリをより具体的にする必要があります。その結果、結果が少なくなります。 –