首先关注新的和一般的编程。我正在尝试构建一个可以从外部文件夹加载各种vbs脚本以使其更加模块化的hta。我目前正试图从我的动态列表中打开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>
答案 0 :(得分:0)
问题1:如何在动态列表中打开文件?
首先,您需要从列表中检索所选值。对于单选列表,您只需查询Value
元素的<select>
属性:
strFile = mylistbox.Value
由于没有可能被选中,因此测试结果以确保获得某些东西总是一个好主意:
If Len(strFile) > 0 Then
此外,您似乎只是在列表中显示文件名称,而不是文件路径,这很好,但是您可以&#39;如果您想稍后运行该文件,则需要完整的文件路径。所以你有几个选择,在这里。 Option 1:
使FolderPath
成为全局常量而不是局部变量,以便您可以从RunProgram()
例程访问它。 Option 2:
利用Value
元素的<option>
属性来存储每个列表项的完整路径,同时仍然只显示文件名。以下是如何做到后者:
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
(&#34; GUI&#34;版本的Windows Scripting Host)来显式运行我们的脚本文件。正如我们上面所做的那样,我们用双引号包围我们的文件。最后,我们要添加一个空格来分隔&#34;命令&#34;从参数。为了完整起见,我们还在参数周围添加双引号,以防它也包含空格。