在目录中搜索字符串
Search string in a directory
我正在尝试创建一个可以接受用户输入(字符串、目录)并在目录中搜索字符串的 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>
也许我可以在列表中显示结果或将其存储在文本文件中并访问它以显示。
你的 HTA 根本就坏了。
如果你正在写 HTA you should include the actual HTA tag.
<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
语句将字符串(路径)分配给变量。该关键字保留用于将 objects 分配给变量,并且在分配原始数据类型时必须省略。
WScript.Echo
在 HTA 中不起作用,因为 HTA 脚本宿主不提供 WScript
对象。如果需要显示消息,请改用 MsgBox
函数。
打开objOutFile
时你用的是objFS
,但是你实际的FileSystemObject
实例变量是fso
.
要在 HTML 中显示搜索结果,您需要修改 HTML 元素的值,例如:
demo.innerHtml = demo.innerHtml & thing.Path & "<br>"
我正在尝试创建一个可以接受用户输入(字符串、目录)并在目录中搜索字符串的 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>
也许我可以在列表中显示结果或将其存储在文本文件中并访问它以显示。
你的 HTA 根本就坏了。
如果你正在写 HTA you should include the actual HTA tag.
<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
语句将字符串(路径)分配给变量。该关键字保留用于将 objects 分配给变量,并且在分配原始数据类型时必须省略。WScript.Echo
在 HTA 中不起作用,因为 HTA 脚本宿主不提供WScript
对象。如果需要显示消息,请改用MsgBox
函数。打开
objOutFile
时你用的是objFS
,但是你实际的FileSystemObject
实例变量是fso
.要在 HTML 中显示搜索结果,您需要修改 HTML 元素的值,例如:
demo.innerHtml = demo.innerHtml & thing.Path & "<br>"