Passer le point d'exclamation au programme java sur la ligne de commande


2

Je veux passer la chaîne "! Changeme!" à un programme Java sur la ligne de commande comme:

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

Sous Windows XP, Java jdk 1.6.0_07.

Le serveur AXIS2_CLASS_PATH est remplacé normalement, je suppose par le moteur d'exécution Java. Cependant le mot de passe de! Changeme! semble également être remplacé par une chaîne vide. Je suppose que ce remplacement est une sorte de fonctionnalité JVM.

Le programme suivant:

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

Je reçois les résultats suivants:

"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: 

J'ai besoin du mot de passe pour être transmis tels quels. J'ai essayé toutes sortes de fuites mais je n'ai pas trouvé ce dont j'avais besoin.

Quelqu'un peut-il donner un indice sur la façon de procéder?

Solution tel que fourni par Zach Scrivena est:

Utilisez le curseur pour échapper le point d'exclamation.

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

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

Quel environnement êtes-vous dans c'est le remplacement! foo! ? Je soupçonne fortement que cette question n'a rien à voir avec Java, et tout à voir avec l'environnement shell dans lequel vous vous trouvez. 22 févr.. 092009-02-22 12:27:45

  0

Utilisation de Windows XP. Il n'y a rien dans Windows qui fait ce genre de remplacement. Je crois que c'est la JVM mais je suis heureux d'avoir tort si une solution existe. 22 févr.. 092009-02-22 13:05:36

6

Le problème est causé par l'interpréteur de ligne de commande --- qu'il remplace le terme enfermé dans des points d'exclamation ! avec la variable d'environnement correspondant.

Il suffit de précéder chaque caractère échappé d'un signe ^. Cela fonctionne à la fois la ligne de commande et les fichiers batch:

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

Sur la ligne de commande, vous pouvez également joindre chaque échappèrent caractère des guillemets doubles "

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

--passwd ""! "Changeme"! "" Ne fonctionne pas (= "une seule double citation), mais --passwd" ^! Changeme ^! "Entraîne la chaîne désirée Merci 22 févr.. 092009-02-22 13:08:57

  0

la différence entre% FOO% et! FOO!? 06 juil.. 092009-07-06 08:45:57