我想传递字符串“!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!
答案 0 :(得分:6)
问题是由命令行解释器引起的 - 它用相应的环境变量替换感叹号!
中包含的术语。
简单地在每个转义字符前面加一个插入符号^
。这适用于命令行和批处理文件:
java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx "^!changeme^!"
在命令行中,您还可以将每个转义字符括在双引号"
java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx ""!"changeme"!""