2010-10-21 14 views
0

étapes en utilisant l'exécution apiproblème variable d'environnement en utilisant Java

  1. echo %PATH% (sortie sera quelque chose comme "c:\windows\system32;d:\test")
  2. exécuter ping ou toute commande système, la sortie sera le succès
  3. supprimer une valeur pour la chemin comme d:\test
  4. echo %PATH% (sortie sera "%system32%\system32;")
  5. maintenant, si je exécuter la même commande exécutée à l'étape 2 comme ping, puis je reçois "commande introuvable".

plesae Note: - toutes les étapes exécutées dans le même processus java

Tout le monde suggèrent ce qui se passe mal dans ce processus

+0

Quelle est la commande que vous utilisez à l'étape 2? –

+0

commande comme ipconfig, ping –

+1

@ user482914 - où est java ici? Montrer votre code serait utile. –

Répondre

1

On dirait que les variables ne sont pas en cours d'extension de la deuxième fois que vous montrer le chemin (étape 4). Vous endommagez probablement le chemin lorsque vous supprimez une valeur à l'étape 3.

Montrez-nous un extrait de code illustrant le problème.

1

Utilisez-vous ProcessBuilder pour cela? Cela permet un accès simple aux variables d'environnement passées aux sous-processus. Il semble que vous essayez de modifier l'environnement global, ce qui n'est probablement pas ce que vous voulez faire.

Voici un exemple:

ProcessBuilder pb = new ProcessBuilder(); 
Map<String, String> env = pb.environment(); 
System.out.println("Current environment: " + env.toString()); 
String path = env.get("PATH"); 
path = path.substring(0, path.indexOf("d:\\test")) + path.substring(path.indexOf("d:\\test") + "d:\\test".length()); 
env.put("PATH", path); 
pb.command("ping"); 
Process p = pb.start(); 
// ... 

Parce qu'il semble que vous êtes sous Windows, vous aurez besoin d'être un peu plus prudent de trouver la variable de chemin dans l'environnement, étant donné que l'environnement Windows est Case- insensible, mais Map.get() est sensible à la casse. Probablement préférable de faire une boucle à travers les touches à la recherche d'un equalsIgnoreCase("PATH").

En outre, vous voudrez peut-être nettoyer le chemin avant de le remettre dans la carte (assurez-vous qu'il ne contient pas System.getProperty("path.separator") supplémentaires s.

1

Votre question n'est pas clair pour moi, mais je ne vois un problème :

% System32% est généralement c: \ windows \ system32

Dans votre exemple, en supposant que l'environnement est un ensemble de%% system32 correctement, l'étape (4) "% system32% \ system32;" sera. résoudre à c: \ windows \ system32 \ system32

Ce qui ne peut pas ce que vous voulez.