VBScript - 将参数传递给HTA

时间:2015-08-02 16:27:30

标签: variables vbscript hta

我正在使用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

我意识到这不完全正确的代码,我只是用它来说明我试图做的事情。

你们可以提供解决方案的任何帮助都会很棒,谢谢!

1 个答案:

答案 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