我有几个文本文件,每个文件都有数千行,这是典型行的示例:
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 文件夹。
我已经看到这已经在 Stack 上用其他语言完成了,但我找不到 VBS 的任何东西。如果我知道如何更好地表达任务,我可能会找到答案。我真的很感激一些关于抓住第二根弦的建议。
作为背景,这是我正在编写的脚本。它会在 C:\scripts\ 中的所有文本文件中查找由 WMI 查询返回的字符串,以查找代码为 28(未安装驱动程序)的设备驱动程序的 CompatibleID:
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