2016-02-24 3 views
1

Я использую некоторые 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 

мне нужно перебирать строк каждого файла, чтобы получить номера строк, содержащих строку.

+0

Полный HTA файл можно найти здесь https://gist.github.com/SanjeetSk/268b293682c14fa5ac7a – user2816085

+0

Do While Not thing.AtEndOfStream strLine = objFile.readline может быть, я могу использовать этот – user2816085

+0

Получить вдохновение от этого код ==> http://stackoverflow.com/questions/22854627/is-it-possible-to-peform-a-windows-explorer-search-using-javascipt-for-a-hta?answertab=active#tab- top – Hackoo

ответ

1

Считывает каждую строку и выполняет поиск по каждой строке. Также запоминает предыдущий поиск и каталог.

Два вопроса, которые вы можете исправить.

  1. Теперь он будет отображать 5 миллионов сообщений тайм-аута сообщения esp, если вы будете проходить через exe-файлы.

  2. Он не найдет текст в Юникоде.

Это уже третий раз, когда я написал программу.

<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> 
+0

Спасибо @bgalea, что касается vbscript для первого раза .. так что застрял почти во всем .. – user2816085

Смежные вопросы