我试图创build一个VBScript代码,可以采取用户input(string,目录)和searchstring的目录。
我的.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页面上显示结果。
下面是我试图创build.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>
也许我可以在列表中显示结果或将其存储在文本文件中并访问它以显示。
你的HTA从根本上被打破了。
如果你正在写一个HTA,你应该包括实际的HTA标签 。
<HTA:APPLICATION ID="oHTA" APPLICATIONNAME="Test" ...>
VBScript代码块只包含一个过程定义( Sub Submit_OnClick
)。 在这个过程中你可以调用ProcessFolder
(两次),但是你永远不会在任何地方定义它。 您需要在Submit_OnClick
定义之前或之后放置该过程定义,否则您将无法调用它:
Sub Submit_OnClick ... End Sub Sub ProcessFolder(FolderPath) ... End Sub
下面的行有一个虚假的尾随双引号:
If InStr(contents.ReadAll, searchterm) Then Set FileName = thing.Path"
在同一行中,不能使用Set
语句将字符串(路径)分配给变量。 该关键字保留用于将对象分配给变量,并且在确定原始数据类型时必须省略。
WScript.Echo
在HTA中不起作用,因为HTA脚本宿主不提供WScript
对象。 如果需要显示消息,请使用MsgBox
函数。
打开objOutFile
时使用objFS
,但实际的FileSystemObject
实例变量是fso
。
要在HTML中显示搜索结果,您需要修改HTML元素的值,例如:
demo.innerHtml = demo.innerHtml & thing.Path & "<br>"