Используете ли вы 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")
с.