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

bro*_*eld 2 java command-line

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

java -cp "!AXIS2_CLASS_PATH!" ClientJava --userid admin --passwd "!changeme!"
Run Code Online (Sandbox Code Playgroud)

使用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;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

"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:
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以提供如何做到这一点的提示吗?

Zach Scrivena提供的解决方案是:

使用插入符号来逃避感叹号.

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

arg: --userid
arg: admin
arg: --passwd
arg: !changeme!
Run Code Online (Sandbox Code Playgroud)

Zac*_*ena 6

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

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

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx "^!changeme^!"
Run Code Online (Sandbox Code Playgroud)

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

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx ""!"changeme"!""
Run Code Online (Sandbox Code Playgroud)