使用java的环境变量问题

时间:2010-10-21 11:21:07

标签: java runtime exec

使用运行时api的步骤

  1. echo %PATH%(输出类似于"c:\windows\system32;d:\test"
  2. 执行ping或任何系统命令,输出将成功
  3. 删除d:\test
  4. 等路径的一个值
  5. echo %PATH%(输出将为"%system32%\system32;"
  6. 现在,如果我执行步骤2中执行的相同命令,如ping,那么我会收到“未找到命令。”
  7. Plesae注意: - 在同一个java进程中执行的所有步骤

    有人建议在这个过程中出错了什么

3 个答案:

答案 0 :(得分:1)

第二次显示PATH时,看起来没有展开变量(步骤4)。在步骤3中删除一个值时,可能是在破坏路径。

向我们展示一个演示此问题的代码段。

答案 1 :(得分: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")

答案 2 :(得分:1)

我的问题不清楚,但我确实看到了一些问题:

%System32%通常是c:\ windows \ system32。

在您的示例中,假设环境设置为%system32%,步骤(4)“%system32%\ system32;”将解析为c:\ windows \ system32 \ system32

这可能不是你想要的。