使用运行时api的步骤
echo %PATH%
(输出类似于"c:\windows\system32;d:\test"
)ping
或任何系统命令,输出将成功d:\test
echo %PATH%
(输出将为"%system32%\system32;"
)ping
,那么我会收到“未找到命令。”Plesae注意: - 在同一个java进程中执行的所有步骤
有人建议在这个过程中出错了什么
答案 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
这可能不是你想要的。