如何使用普通变量传递系统变量以在命令行批处理脚本中调用java程序

Posted

技术标签:

【中文标题】如何使用普通变量传递系统变量以在命令行批处理脚本中调用java程序【英文标题】:How to pass system variable with normal variable to call java program in command line batch script 【发布时间】:2021-08-03 14:50:09 【问题描述】:
java -cp %EPM_JAVA_CLASSPATH% -DEPM_ORACLE_INSTANCE=%1 -DHFM_CLUSTER=%2 -DHFM_APPLICATION=%3 runConsoltesting %4 %5 %6 %7

当我尝试访问第 5 个参数时,它显示:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at runConsoltesting.main(runConsoltesting.java:42)

它只接受到类名的参数

【问题讨论】:

尝试引用所有% 参数。 您只向主类传递 四个 参数:%4 %5 %6 %7(如果非空)将分别为 args[0] args[1] args[2] args[3]-Dname=value before 类名是参数,更准确地说是选项到 JVM 但不是到主类 @dave_thompson_085 感谢您的解释!它工作.. 【参考方案1】:

在主类 runConsoltesting 之后给出的都是主方法参数,总共有 4 个(%4,%5,%6,%7)。因此,当您尝试访问第五个元素时,您会收到 ArrayOutOfBoundException。

%1、%2 和 %3 是 JVM 参数,而不是 java 主方法参数。所以这些可以在下面的代码中读取。

System.getProperty(String property),这里的属性是你的 -D 参数的名称。

例如,System.getProperty("EPM_ORACLE_INSTANCE") 将返回为 %1 位置设置的值。

【讨论】:

以上是关于如何使用普通变量传递系统变量以在命令行批处理脚本中调用java程序的主要内容,如果未能解决你的问题,请参考以下文章

在 argparse 中从变量而不是命令行获取值

将变量传递给从命令行运行的 PHP 脚本

如何转义变量中的特殊字符以在 bash 中提供命令行参数

powershell.exe 命令行变量

如何将多个变量从 VBS 传递到批处理脚本?

喜欢在变量中获取 powershell 脚本的输出以在批处理文件中使用