在Java中运行时设置Windows PATH环境变量

hhh*_*hhh 5 java windows environment-variables runtime.exec

我有一个java程序,使用Runtime.exec()方法触发可执行文件.我使用的变量将一组命令行参数作为一个参数,并将一些环境变量作为另一个参数.

我尝试设置的环境变量是path,所以我传入"PATH = C:\ some\path".这不起作用.这个或任何替代方案都有一些技巧.遗憾的是,我坚持使用Java 1.4.

Ray*_*yek 7

使用http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#getenv%28java.lang.String%29获取环境并修复它然后使用一种风味[ http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String,%20java.lang.String[],%20java. io.File%29] [1]做执行.

这适用于包含路径的批处理文件.

package p;

import java.util.*;

public class Run {
    static String[] mapToStringArray(Map<String, String> map) {
        final String[] strings = new String[map.size()];
        int i = 0;
        for (Map.Entry<String, String> e : map.entrySet()) {
            strings[i] = e.getKey() + '=' + e.getValue();
            i++;
        }
        return strings;
    }

    public static void main(String[] arguments) throws Exception {
        final Map<String, String> env = new HashMap<String, String>(System.getenv());
        env.put("Path", env.get("Path") + ";foo");
        final String[] strings=mapToStringArray(env);
        Runtime.getRuntime().exec("cmd /C start foo.bat",strings);
    }

}
Run Code Online (Sandbox Code Playgroud)


Kit*_*une 2

如果“PATH=C:\some\path”出现在源代码中,那么它将是不正确的,因为它会尝试转义该字符串中的“s”和“p”,您可以使用“PATH=C:\” \some\\path" 代替(转义斜杠)。另外,您不想直接将其作为字符串传递,而是作为字符串数组传递(可能将其作为其中唯一的字符串)。