以递归方式搜索文件以获取字符串

时间:2016-02-24 08:21:58

标签: vbscript hta

我正在使用一些vbscript来搜索目录中的字符串。现在我需要我的脚本在每个文件中搜索多个字符串实例并返回行号或其他一些可识别的信息。我目前的vbscript是: -

Sub ProcessFolder(FolderPath)
    On Error Resume Next
    Set fldr = fso.GetFolder(FolderPath)

    Set Fls = fldr.files
    For Each thing in Fls
        Set contents = thing.OpenAsTextStream
        If err.number = 0 then
            Test = Instr(contents.readall, searchterm) 
            If Isnull(test) = false then If Test > 0 then ObjOutFile.WriteLine thing.path 
            demo.innerHtml = demo.innerHtml & thing.path & "<br>"
        Else
            err.clear
        End If
    Next

    Set fldrs = fldr.subfolders
    For Each thing in fldrs
        ProcessFolder thing.path
    Next
End Sub

我需要遍历每个文件的行以获取包含字符串的行号。

1 个答案:

答案 0 :(得分:1)

读取每一行并搜索每一行。还要记住以前的搜索和目录。

您可以修复两个问题。

  1. 如果通过exe文件,它现在将达到500万语句超时消息esp。

  2. 找不到Unicode文本。

  3. 这是我第三次写这个程序。

    <HTML> 
    <HEAD><TITLE>Simple Validation</TITLE> 
    <SCRIPT LANGUAGE="VBScript">
    Dim Dirname
    Dim Searchterm
    Dim FSO
    Dim objOutFile
    
    
    Sub Browse
        On Error Resume Next
        Set bffShell = CreateObject("Shell.Application")
        Set bff = bffShell.BrowseForFolder(0, "Select the My Documents folder", 9)
        If Err.number<>0 Then
            MsgBox "Error Setting up Browse for Folder"
        Else
            A = bff.ParentFolder.ParseName(bff.Title).Path
            If err.number=424 then err.clear
                    tb2.value = A
        End If
    End Sub
    
    Sub Search
        On Error Resume Next
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.RegWrite "HKCU\Software\StackOverflow\VBS\Searchterm", tb1.value
        WshShell.RegWrite "HKCU\Software\StackOverflow\VBS\Directory", tb2.value
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set objOutFile = fso.CreateTextFile("results.txt",True)
        Dirname = tb2.value
        Searchterm = tb1.value
        ProcessFolder DirName
    End Sub
    
    Sub ProcessFolder(FolderPath)
        On Error Resume Next
        Set fldr = fso.GetFolder(FolderPath)
    
        Set Fls = fldr.files
        For Each thing in Fls
            Set contents = thing.OpenAsTextStream
            If err.number = 0 then
            Linenum = 0
            Do Until contents.AtEndOfStream
                line = contents.readline
                Linenum = Linenum + 1
                    Test = Instr(line, searchterm) 
                    If Isnull(test) = false then If Test > 0 then ObjOutFile.WriteLine LineNum & "  " & thing.path
            Loop
            Else
                err.clear
            End If
        Next
    
        Set fldrs = fldr.subfolders
        For Each thing in fldrs
            ProcessFolder thing.path
        Next
    
    End Sub
    
    Sub Init
        On Error Resume Next
        Set WshShell = CreateObject("WScript.Shell")
        tb1.value = WshShell.RegRead("HKCU\Software\StackOverflow\VBS\Searchterm")
        tb2.value = WshShell.RegRead("HKCU\Software\StackOverflow\VBS\Directory")
    End Sub
    
    </script>
    </head>
    <body Onload=Init>
    <p><INPUT Name=tb1 TYPE=Text Value="Search">
    <p><INPUT Name=tb2 TYPE=Text Value="Folder"> <INPUT NAME="Browse" TYPE="BUTTON" VALUE="Browse" OnClick=Browse>
    <p><INPUT NAME="Search" TYPE="BUTTON" VALUE="Search" OnClick=Search>
    </body>
    </html>