在命令行上将感叹号传递给java程序

时间:2009-02-22 12:24:25

标签: java command-line

我想传递字符串“!changeme!”到命令行上的java程序,如:

java -cp "!AXIS2_CLASS_PATH!" ClientJava --userid admin --passwd "!changeme!"

使用Windows XP,Java jdk 1.6.0_07。

AXIS2_CLASS_PATH正常替换,我假设是java运行时。但密码是!changeme!似乎也被替换为空字符串。我假设这个替换是某种JVM功能。

使用以下程序:

static int Run(String[] aArgs) {
    for (String s: aArgs) {
        System.out.println("arg: " + s);
    }
    return 0;
}

我得到以下结果:

"C:\Program Files\Java\jdk1.6.0_07\bin\java" -cp "!AXIS2_CLASS_PATH!"
    ClientJava --userid admin --passwd "!changeme!"
arg: --userid
arg: admin
arg: --passwd
arg:

我需要密码才能通过。我尝试了各种各样的逃避,但我还没找到我需要使用的东西。

任何人都可以提供有关如何执行此操作的提示吗?

Zach Scrivena提供的解决方案是:

使用插入符号来移除感叹号。

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx "^!changeme^!"

arg: --userid
arg: admin
arg: --passwd
arg: !changeme!

1 个答案:

答案 0 :(得分:6)

问题是由命令行解释器引起的 - 它用相应的环境变量替换感叹号!中包含的术语。

简单地在每个转义字符前面加一个插入符号^。这适用于命令行和批处理文件:

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx "^!changeme^!"

在命令行中,您还可以将每个转义字符括在双引号"

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx ""!"changeme"!""