【问题标题】:Pass arguments to VBS from Java从 Java 向 VBS 传递参数
【发布时间】:2013-02-05 15:53:47
【问题描述】:

我从 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 中的上述方法

【问题讨论】:

    标签: java parameters vbscript runtime parameter-passing


    【解决方案1】:

    所以只是对 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 开始作为第一次出现

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

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

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

    【讨论】:

      【解决方案2】:

      您的问题主要不是关于 java 而是关于 VBS。看看这个discussion,它描述了如何在 VBS 中读取命令行参数。通常你必须使用内置对象Wscript.Arguments。解析脚本“主要”部分中的参数并调用您的子程序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);
      

      【讨论】:

      • +1 如果您让 WScript.Arguments 的索引以 0 开头并删除 Set(仅用于分配对象)。
      • "main" 部分与函数 Main() 中的一样。你说的是这个吗?
      【解决方案3】:

      可能的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);
      

      【讨论】:

        猜你喜欢
        • 2012-12-02
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 2022-10-21
        相关资源
        最近更新 更多