それぞれ数千行のテキストファイルがいくつかあり、これは典型的な行の例です。
PCI\VEN_10EC&DEV_8168&REV_09 Realtek\5x64\FORCED\PCIe_5.810.1218.2012\ Netrtle.inf Realtek 1 12/18/2012,5.810.1218.2012 Realtek PCIe GBE Family Controller
私が取り組んでいるスクリプトは、テキストの最初のセグメントの文字列検索を行います。
PCI\VEN_10EC&DEV_8168&REV_09
私のスクリプトは、この文字列を含むファイルを絞り込みますが、本当に必要なのは、同じ行の次の文字列を返すことです。
Realtek\5x64\FORCED\PCIe_5.810.1218.2012\
この文字列を取得したら、7zip から Realtek フォルダーを抽出するスクリプトの残りの部分を続行できます。
これがスタック上の他の言語で行われているのを見たことがありますが、VBS については何も見つかりません。タスクをより適切に表現する方法を知っていれば、おそらく答えを見つけることができたでしょう. その2番目の文字列をつかむためのアドバイスをいただければ幸いです。
背景として、これは私が取り組んでいるスクリプトです。C:\scripts\ 内のすべてのテキスト ファイルを調べて、コード 28 (ドライバーがインストールされていない) のデバイス ドライバーの CompatibleID を求める WMI クエリによって返される文字列を探します。
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Wscript.Shell")
Set objNet = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PnPEntity " _
& "WHERE ConfigManagerErrorCode = 28")
For Each objItem in colItems
Dim arrCompatibleIDs
aarCompatibleIDs = objItem.CompatibleID
for each objComp in aarCompatibleIDs
Dim FirstID
FirstID = objComp
Exit For
Next
Next
strSearchFor = firstID
objStartFolder = "C:\scripts"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
'Wscript.Echo objFile.Name
strFile = "C:\scripts\" & objFile.Name
set objFile = objFSO.getFile(strFile)
if objFile.size > 0 then
If InStr(objFSO.OpenTextFile(strFile).ReadAll, strSearchFor) > 0 Then
msgbox(objfile.name)
Else
WScript.Sleep (100)
End If
End If
Next