2010-10-21 2 views
0

шагов с использованием среды выполнения APIпеременной среды проблема с использованием Java

  1. echo %PATH% (выход будет что-то вроде "c:\windows\system32;d:\test")
  2. выполнить ping или любую системную команду, вывод будет успех
  3. удалить одно значение для путь, как d:\test
  4. echo %PATH% (выход будет "%system32%\system32;")
  5. Теперь, если я выполните ту же команду, выполненную на шаге 2, например ping, после чего я получаю команду «не найден».

Plesae Примечание: - все шаги выполняются в одном процессе Java

кто-нибудь предложить, что идет не так в этом процессе

+0

Какова команда, которую вы используете на шаге 2? –

+0

команда вроде ipconfig, ping –

+1

@ user482914 - где здесь java? Показать ваш код будет полезно. –

ответ

1

выглядит как переменные не расширяется во второй раз, когда вы показать PATH (шаг 4). Вероятно, вы нарушаете путь, когда вы удаляете одно значение на шаге 3.

Покажите нам фрагмент кода, демонстрирующий проблему.

1

Вы используете ProcessBuilder для этого? Это обеспечивает простой доступ к переменным среды, переданным подпроцессам. Похоже, вы пытаетесь изменить глобальную среду, что, скорее всего, не то, что вы хотите сделать.

Вот пример:

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(); 
// ... 

Потому что это звучит, как вы на Windows, вы должны быть немного более осторожным о поиске переменной пути в среде, так как среда Windows, является регистру нечувствительный, но Map.get() чувствителен к регистру. Наверное, лучше всего перебирать ключи, ищущие equalsIgnoreCase("PATH").

Кроме того, вы можете очистить путь, прежде чем положить его обратно в карту (убедитесь, что он не содержит дополнительных System.getProperty("path.separator") с.

1

Ваш вопрос не ясно для меня, но я вижу некоторые проблемы :

% System32%, как правило, C: \ Windows \ system32

В вашем примере, предполагая, что среда установлена ​​в% system32% правильно, стадия (4) "% system32% \ system32;" будет. разрешить c: \ windows \ system32 \ system32

Это может не то, что вы хотите.

Смежные вопросы