帮助会很棒,因为我很无能为力。 VBscripts的新手,并创建一个VBscripts,它会找到一个名称中带有通配符的文件,并在其中查找模式并将该信息复制到它创建的另一个文件中。但我得到的是一个空白文件
Const ForReading = 1
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "DETECTION"
Const ForWriting = 2
strFolderName = "c:"
strTargetFile = "C:\race\master.txt"
strFileNameConstant = "Master"
strComputer = "."
objregex.global = true
objregex.ignorecase = true
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSubfolders = objWMIService.ExecQuery ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
& "Where AssocClass = Win32_Subdirectory " & "ResultRole = PartComponent")
arrFolderPath = Split(strFolderName, "\")
strNewPath = ""
For i = 1 to Ubound(arrFolderPath)
strNewPath = strNewPath & "\\" & arrFolderPath(i)
Next
strPath = strNewPath & "\\"
Set colFiles = objWMIService.ExecQuery ("Select * from CIM_DataFile where Path = '" & strPath & "'")
For Each objFile in colFiles
If InStr(Lcase(objFile.Name),LCase(strFileNameConstant)) Then
Set objFile = objFSO.OpenTextFile(objFile.Name, 1)
strSearchString = objFile.ReadAll
objFile.Close
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = "DETECTION"
strNewText = objRegEx.Replace(strSearchString,VBCrlf & "DETECTION" & VBCrLf)
End If
Next
'Writes Target file
Set objFile = objFSO.OpenTextFile(strTargetFile, ForWriting, true)
objFile.WriteLine(strNewText)
objFile.Close
**更新:代码的作用是它读取一个日志文件(master),它有时会在其名称中使用通配符(master-123.123.txt)并查找Pattern(检测)然后创建另一个包含其中包含短语“detection”的行的文件。它目前正在做的是它创建文件但不包括具有短语“在其中检测”的行。我不确定我做错了什么,因为我没有错误和代码。它创建了文件,即使文件中包含通配符,也可以找到主文件。
答案 0 :(得分:0)
这里我做了什么。请注意,某些部分已被更改。 strFolderName是我们放置主文件的路径。此代码将读取主文件并获取"检测"单词出现并将这些行写入一个名为master.txt的新文件(这就是我从你的问题得到的)。如果您需要做其他事情,请尝试更改正则表达式。
Const ForReading = 1
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "DETECTION"
Const ForWriting = 2
strFolderName = "D:\Vbs\StackOverflow"
strTargetFile = "master.txt"
strFileNameConstant = "Master"
strComputer = "."
objregex.global = true
objregex.ignorecase = true
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSubfolders = objWMIService.ExecQuery ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
& "Where AssocClass = Win32_Subdirectory " & "ResultRole = PartComponent")
arrFolderPath = Split(strFolderName, "\")
strNewPath = ""
For i = 1 to Ubound(arrFolderPath)
strNewPath = strNewPath & "\\" & arrFolderPath(i)
Next
strPath = strNewPath & "\\"
Set colFiles = objWMIService.ExecQuery ("Select * from CIM_DataFile where Path = '" & strPath & "'")
For Each objFile in colFiles
If InStr(Lcase(objFile.Name),LCase(strFileNameConstant)) Then
Set objFile = objFSO.OpenTextFile(objFile.Name, 1)
strSearchString = objFile.ReadAll
objFile.Close
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = ".*detection+.*"
set strNewText = objRegEx.Execute(strSearchString)
End If
Next
'Writes Target file
Set objFile = objFSO.OpenTextFile(strTargetFile, ForWriting, true)
for each maches in strNewText
objFile.Write maches
next
objFile.Close