我正在使用VBScript编写一些脚本,我需要将一些变量值传递给HTA,我将用作前端来显示更新。
我该怎么做?
VBScript-------
TestVar1 = "Something 1"
TestVar2 = "Something 2"
wshShell.Run "Updater.hta " & TestVar1 & TestVar2
然后
HTA-------
TestVar1 = Something.Arguments(0)
TestVar2 = Something.Arguments(1)
Msgbox TestVar1
Msgbox TestVar2
我意识到这不完全正确的代码,我只是用它来说明我试图做的事情。
你们可以提供解决方案的任何帮助都会很棒,谢谢!
答案 0 :(得分:3)
将参数括在引号中。由于VBScript使用"
表示字符串文字,因此需要通过将其加倍""
来对其进行转义,或者可以使用Chr()
函数指定引号字符:
TestVar1 = "Something 1"
TestVar2 = "Something 2"
Dim strParams
strParams = strParams & " " & Chr(34) & TestVar1 & Chr(34)
strParams = strParams & " " & Chr(34) & TestVar2 & Chr(34)
wshShell.Run "updater.hta" & strParams
在您的HTA中,Arguments
集合不可用。相反,您必须解析HTA对象的CommandLine
属性。在这种情况下,您的HTA收到的CommandLine
将如下所示:
"updater.hta" "Something 1" "Something 2"
所以你有两个选择来检索你的参数。您可以使用正则表达式来获取引号内的所有内容,也可以Split()
引用CommandLine
。如果你在的某个参数中有引号,事情会变得更加棘手,你可能会考虑使用不同的字符来封闭你的参数。
这是一个使用Split()
提取参数的骨架HTA:
<head>
<HTA:APPLICATION
ID="myhta"
APPLICATIONNAME="HTA Test"
>
</head>
<script language="VBScript">
Sub Window_OnLoad()
a = Split(myhta.CommandLine, Chr(34))
MsgBox "Arg 1 = " & a(3)
MsgBox "Arg 2 = " & a(5)
End Sub
</script>
当您使用Split()
时,您将获得以下内容:
a = Split(myhta.CommandLine, Chr(34))
' a(0) = <blank>
' a(1) = "updater.hta"
' a(2) = " "
' a(3) = "Something 1"
' a(4) = " "
' a(5) = "Something 2"
' a(6) = <blank>
因此a(3)
成为您的第一个参数,a(5)
成为您的第二个参数。
如果你想使用正则表达式,它会变成:
Sub Window_OnLoad()
With New RegExp
.Global = True
.Pattern = """([^""]+)"""
Set c = .Execute(myhta.CommandLine)
End With
For i = 1 To c.Count - 1 ' Skip i = 0 (the HTA filename)
MsgBox "Arg " & i & " = " & c(i).SubMatches(0)
Next
End Sub
这会显示:
Arg 1 = Something 1
Arg 2 = Something 2