从Java传递参数到VBS

时间:2013-02-05 15:53:48

标签: java parameters vbscript runtime parameter-passing

我正在用Java调用VBS这样的

public class CallVBS {
    public static void main(String[] args) {

        try {
            Runtime.getRuntime().exec("wscript C:\\openURL.vbs");
        } catch (IOException e) {

            System.exit(0);
        }
    }
}

如果我的openURL.vbs包含类似

的方法
Sub Test(Name,Age,Sex)

如何使用Java

中的参数调用VBS中的上述方法

3 个答案:

答案 0 :(得分:2)

所以只是对AlexR进行一些改动,因为我认为有一些事情可以用来纠正。

比如说我们有一个名为MyVBScript.vbs的VBS文件

MyVBScript.vbs的内容如下:

name = WScript.Arguments.Item(0)
age = WScript.Arguments.Item(1)
sex = WScript.Arguments.Item(2)

Call Test(name, age, sex)

请记住,集合的索引从0开始,作为第一次出现

现在在Java代码中调用这个VBS文件,我们将拥有以下内容:

Runtime.getRuntime().exec("wscript C:\\MyVBScript.vbs " + name + " " + age + " " + sex

感谢AlexR的原始答案,但我觉得需要一点澄清。我希望这有助于人们。我个人在我的Java测试工具中使用它作为启动Quick Test Professional的方法。

答案 1 :(得分:0)

你的问题主要不是关于java而是关于VBS。看一下这个discussion,它描述了如何在VBS中读取命令行参数。通常,您必须使用内置对象Wscript.Arguments。解析脚本“main”部分中的参数并调用您的subrutine Test,例如

Set name =  Wscript.Arguments(1)
Set age =  Wscript.Arguments(2)
Set sex =  Wscript.Arguments(3)
Call Test(name, age, sex)

现在您可以从java调用脚本,如下所示:

Runtime.getRuntime().exec("wscript C:\\openURL.vbs " + name + " " + age + " " + sex);

答案 2 :(得分:0)

可能的getURL.vbs可能如下所示:

Option Explicit

WScript.Echo "openURL.vbs"

Dim a0 : a0 = "Def. A. Ult"
If 1 <= WScript.Arguments.Count Then a0 = WScript.Arguments(0)
Dim a1 : a1 = "47.11"
If 2 <= WScript.Arguments.Count Then a1 = WScript.Arguments(1)
Dim a2 : a2 = "neuter"
If 3 <= WScript.Arguments.Count Then a2 = WScript.Arguments(2)

Test a0, a1, a2

Sub Test(name, age, sex)
  WScript.Echo """" & Join(Array(name, age, sex), """, """) & """"
End Sub

它查看通过命令行在顶层/'main'/立即执行/退出VBScript代码的Sub / Function部分传递的参数。

为了避免引用/ args包含空格的问题,我会使用这个.exec调用:

String[] parms = {"wscript", "openURL.vbs", "Anna B. Carlson", "12", "fale"};
Runtime.getRuntime().exec(parms);