在命令行上通过感叹号给java程序


2

我想传递字符串“!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

每个转义字符是什么环境中,你在多数民众赞成更换! FOO! ?我强烈怀疑这个问题与Java没有任何关系,并且与你所处的任何shell环境有关。 22 2月. 092009-02-22 12:27:45

  0

使用Windows XP。 Windows中没有任何东西可以做这种替换。我相信这是JVM,但如果有解决方案,我很高兴被证明是错误的。 22 2月. 092009-02-22 13:05:36

6

的问题是由命令行解释引起---它替换括在感叹号!与相应的环境变量的术语。

只需在每个转义字符前加上一个插入符号^即可。这既适用于命令行和批处理文件:

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

在命令行,你也可以用双引号括"

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

--passwd“”!“changeme”!“”不起作用(=“单个双引号),但是--passwd”^!changeme ^!“确实会导致所需的字符串谢谢 22 2月. 092009-02-22 13:08:57

  0

什么是%FOO%和!FOO!之间的区别 06 7月. 092009-07-06 08:45:57