VBscripts和通配符

时间:2014-12-02 21:37:22

标签: vba vbscript vb6

帮助会很棒,因为我很无能为力。 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”的行的文件。它目前正在做的是它创建文件但不包括具有短语“在其中检测”的行。我不确定我做错了什么,因为我没有错误和代码。它创建了文件,即使文件中包含通配符,也可以找到主文件。

1 个答案:

答案 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
相关问题