Передача восклицательного знака в Java-программу из командной строки - PullRequest
2 голосов
/ 22 февраля 2009

Я хочу передать строку "! 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:

Мне нужно, чтобы пароль был пропущен как есть. Я пробовал все виды побега, но я не нашел, что мне нужно использовать.

Может кто-нибудь дать подсказку, как это сделать?

Решение, предоставленное Зак Скривена :

Используйте каретку, чтобы избежать восклицательного знака.

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

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

1 Ответ

6 голосов
/ 22 февраля 2009

Проблема вызвана интерпретатором командной строки - он заменяет термин, заключенный в восклицательные знаки !, в соответствующую переменную среды.

Просто перед каждым экранированным символом ставится каретка ^. Это работает как для командной строки, так и для командных файлов:

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

В командной строке вы также можете заключить каждый экранированный символ в двойные кавычки "

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx ""!"changeme"!""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...