首先是这里的新东西,一般的编程。我正在尝试构建一个 hta,它可以从外部文件夹加载各种 vbs 脚本,以使其更加模块化。我目前正试图从我的动态列表中打开 vbs。如何在动态列表中打开文件?还有如何将变量传递给文件? 这是我目前拥有的:
<html>
<head>
<title>My HTML application</title>
<HTA:APPLICATION
APPLICATIONNAME="My HTML application"
ID="MyHTMLapplication"
VERSION="1.0"/>
</head>
<script language="VBScript">
Sub Window_OnLoad
Dim FolderPath
'folder to be searched for files
Dim objFSO
Dim objFolder
Dim colFiles
Dim objFile
Dim objOption
FolderPath = "%PathToScripts%"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(FolderPath)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Set objOption = Document.createElement("OPTION")
objOption.Text = objFile.Name
objOption.Value = objFile.Name
mylistbox.Add(objOption)
Next
End Sub
Sub RunProgram
Set objShell = CreateObject("Wscript.Shell")
objShell.Run objOption
End Sub
</script>
<body bgcolor="white">
<!--Add your controls here-->
<select name="mylistbox" size=10>
</select>
<input type="button" value="SingleSelect" onclick="RunProgram" name="RunScript">
<!--{{InsertControlsHere}}-Do not remove this line-->
</body>
</html>
问题 1:如何在动态列表中打开文件?
首先,您需要从列表中检索所选值。对于单选列表,只需查询 <select>
元素的 Value
属性:
strFile = mylistbox.Value
由于可能没有选择任何内容,因此测试结果以确保您得到某些内容总是一个好主意:
If Len(strFile) > 0 Then
此外,看起来您只是在列表中显示文件名,而不是文件路径,这很好,但是如果您想稍后运行该文件,则需要完整的文件路径。所以你有几个选择,在这里。 Option 1:
FolderPath
设为全局常量而不是局部变量,以便您可以从RunProgram()
例程访问它。 Option 2:
利用 <option>
元素的 Value
属性来存储每个列表项的完整路径,同时仍仅显示文件名。以下是执行后者的方法:
Set objOption = Document.createElement("OPTION")
objOption.Text = objFile.Name
objOption.Value = objFile.Path ' Changed from objFile.Name to objFile.Path
mylistbox.Add(objOption)
Next
现在您已经拥有脚本的完整路径,可以运行它了。这是您的RunProgram()
例程的样子:
Sub RunProgram()
' Get the selected value. This will be a full file path.
strFile = mylistbox.Value
' Make sure something was selected.
If Len(strFile) > 0 Then
' Run the script file.
Set objShell = CreateObject("WScript.Shell")
objShell.Run Chr(34) & strFile & Chr(34)
End If
End Sub
注意:Chr(34)
用于在文件名周围添加双引号,以防文件名包含空格。
问题 2:如何将变量传递给文件?
这就是事情变得有点棘手的地方。虽然您可以使用 Shell.Run
命令直接运行 VBScript(如上所述(,但如果要将参数传递给脚本,则需要使用脚本引擎可执行文件之一显式运行它。
objShell.Run "wscript.exe " & Chr(34) & strFile & Chr(34) & " " & Chr(34) & strParam & Chr(34)
在这里,我们使用wscript.exe
(Windows 脚本主机的"GUI"版本(来显式运行我们的脚本文件。我们用双引号包围我们的文件,就像我们上面所做的那样。最后,我们添加一个空格来分隔"命令"和参数。为了完整起见,我们还在参数周围添加了双引号,以防它也包含空格。