使用Java中设置的path变量执行外部程序?
我希望通过命令行执行一个外部程序,但我发现只有当程序存在于我调用它的目录中时,我才能这样做。我想能够从任何目录执行该程序 我已经为windows(7)设置了Path变量,并且能够使用命令行从任何目录手动执行程序;但是,我无法通过Java实现这一点 相关代码:使用Java中设置的path变量执行外部程序?,java,variables,path,cmd,external,Java,Variables,Path,Cmd,External,我希望通过命令行执行一个外部程序,但我发现只有当程序存在于我调用它的目录中时,我才能这样做。我想能够从任何目录执行该程序 我已经为windows(7)设置了Path变量,并且能够使用命令行从任何目录手动执行程序;但是,我无法通过Java实现这一点 相关代码: Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP});
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP});
我的问题是,上述程序的输出生成一个通用名为“log.txt”的文件。这将导致线程化程序时出现问题。如果无法使用path变量,我也可以将程序复制到新目录中,然后将其删除。我希望避免这样做
编辑:以上代码的工作方式与GetLog.exe驻留在C:\AutomateKPI中的工作方式相同。我想引用%PATH%,这样我就可以从C:\AutomateKPI\*NewDir*运行GetLog.exe了。尝试使用。它允许您指定工作目录:
String commandPath = "C:" + File.pathSeparator +
AutomateKPI" + File.pathSeparator + "GetLog.exe";
ProcessBuilder pb = new ProcessBuilder(commandPath, "-e", rossIP);
pb.directory(new File("intendedWorkingDirectory"));
Process p = pb.start();
或者,如果C:\AutomateKPI在您的%PATH%
中:
ProcessBuilder pb = new ProcessBuilder("GetLog.exe", "-e", rossIP);
从文档中不清楚,但是,
ProcessBuilder
似乎以类似于系统的方式定位事物,例如在windows上使用%PATH%
。好的,只要您知道要打开的程序的路径,并且不必使用cmd,每次都应该可以:
File file = new File("File Directory");
Desktop dt = Desktop.getDesktop();
try {
dt.open(file);
} catch (IOException e1) {
}
这是正确的吗?Process proc=rt.exec(新字符串[]{“exec cmd/c GetLog.exe”,“-e”,rossIP})使用ProcessBuilder,您可以设置/更改进程的环境变量。@pb2q您可以使用File.pathSeperator构建路径,这是一种与平台无关的方式。我将了解ProcessBuilder。如果我想更改执行GetLog.exe的目录(使用%PATH%),我可以执行以下操作吗?Process proc=rt.exec(新字符串[]{“cmd”,“/c”,“c:\\AutomateKPI\*NEWDIR*\\GetLog.exe”,“-e”,rossIP});请注意,当前将%PATH%设置为GetLog.exe所在的C:\AutomateKPI。@PeterLawrey谢谢,
ProcessBuilder
是更好的解决方案,似乎在windows上可以正常工作。您会遇到什么错误,还有目录C:\AutomateKPI中的GetLog.exe?我没有收到错误,但我想线程我的程序和执行GetLog.exe在不同的目录。C:\AutomateKPI*NewDir*\GetLog.exe不将GetLog.exe复制到新创建的目录中是的,您的问题是提供了GetLog.exe的完整路径,而该路径中不存在该路径。您需要在实际路径中执行getlog.exe,然后提供一个工作目录