2016-02-23 4 views
2

Я пытаюсь создать код VBScript, который может принимать пользовательский ввод (строка, каталог) и искать в каталоге строку.Строка поиска в каталоге

Мой .vbs файл здесь:

On Error Resume Next 
Set fso = CreateObject("Scripting.FileSystemObject") 
Dirname = InputBox("Enter Dir name") 
Searchterm = Inputbox("Enter search term") 

ProcessFolder DirName 

Sub ProcessFolder(FolderPath) 
    Set fldr = fso.GetFolder(FolderPath) 

    Set Fls = fldr.Files 
    For Each thing In Fls 
     Set contents = thing.OpenAsTextStream 
     If Instr(contents.readall, searchterm) Then WScript.Echo thing.Path 
    Next 

    Set fldrs = fldr.subfolders 
    For Each thing In fldrs 
'  WScript.Echo thing.name 
     ProcessFolder thing.path 
    Next 
End Sub 

Это работает разумно. Однако, когда я пытаюсь обернуть его в HTA-файл, я не могу понять, как передать значения формы, а затем показать результат на странице HTML.

Вот как я пытался создать файл .hta:

<HTML> 
<HEAD><TITLE>Simple Validation</TITLE> 
<SCRIPT LANGUAGE="VBScript"> 
Sub Submit_OnClick 
    Dim TheForm 
    Set TheForm = Document.ValidForm 
    Dim FileName 

    On Error Resume Next 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    strTemp = "result.txt" 
    Dirname = TheForm.Text1.Value 
    Searchterm = TheForm.Text2.Value 
    Set objOutFile = objFS.CreateTextFile(strTemp,True) 

    ProcessFolder DirName 

    ProcessFolder(FolderPath) 
    Set fldr = fso.GetFolder(FolderPath) 
    Set Fls = fldr.files 
    For Each thing In Fls 
     Set contents = thing.OpenAsTextStream 
     If InStr(contents.ReadAll, searchterm) Then Set FileName = thing.Path" 
    Next 

    Set fldrs = fldr.subfolders 
    For Each thing In fldrs 
'  WScript.Echo thing.Name 
     ProcessFolder thing.Path 
    Next 
End Sub 
</SCRIPT> 
</HEAD> 
<BODY> 
<H3>Simple Validation</H3><HR> 
<FORM NAME="ValidForm" align = "center"> 
Enter String to Serach: 
<INPUT NAME="Text1" TYPE="TEXT"> 
</br> 
</br> 
Enter Directory: 
<INPUT NAME="Text2" TYPE="TEXT"> 
</br> 
</br> 
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="Submit"> 
</FORM> 

<p id = "demo"></p> 

</BODY> 
<script LANGUAGE = "javascript"> 
//document.getElementById('demo').innerHTML = FileName; 
</script> 
</HTML> 

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

ответ

2

Ваш HTA в основном нарушен.

  1. Если вы пишете HTA вы должны включать в себя фактический HTA tag.

    <HTA:APPLICATION ID="oHTA" APPLICATIONNAME="Test" ...> 
    
  2. Блочный код VBScript содержит только одну процедуру Definiton (Sub Submit_OnClick). В ней вы вызываете процедуру ProcessFolder (дважды), но вы никогда ее не определяете нигде. Вы должны поместить это определение процедуры до или после определения Submit_OnClick или вы не сможете назвать его:

    Sub Submit_OnClick 
        ... 
    End Sub 
    
    Sub ProcessFolder(FolderPath) 
        ... 
    End Sub 
    
  3. Следующая строка имеет паразитный трейлинг двойные кавычки:

    If InStr(contents.ReadAll, searchterm) Then Set FileName = thing.Path" 
    
  4. В той же строке вы не можете использовать оператор Set для назначения строки (пути) переменной. Это ключевое слово зарезервировано для назначения объектов переменным и должно быть опущено при определении примитивных типов данных.

  5. WScript.Echo не работает в ОНТ, поскольку хост сценария HTA ​​не предоставляет объект WScript. Вместо этого используйте функцию MsgBox, если вам нужно отображать сообщения.

  6. При открытии objOutFile использовании objFS, но фактическая переменная FileSystemObject экземпляр fso.

  7. Для отображения результатов поиска в HTML вам необходимо изменить значение какого-либо элемента HTML, например:

    demo.innerHtml = demo.innerHtml & thing.Path & "<br>" 
    
+0

Спасибо .... Я начал с VB-скрипт только сегодня ..: -) изменение моего файла hta в соответствии с вашими предложениями ... – user2816085

+0

Спасибо @Ansgar Wiechers – user2816085

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