Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java中设置的path变量执行外部程序?_Java_Variables_Path_Cmd_External - Fatal编程技术网

使用Java中设置的path变量执行外部程序?

使用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});

我希望通过命令行执行一个外部程序,但我发现只有当程序存在于我调用它的目录中时,我才能这样做。我想能够从任何目录执行该程序

我已经为windows(7)设置了Path变量,并且能够使用命令行从任何目录手动执行程序;但是,我无法通过Java实现这一点

相关代码:

 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,然后提供一个工作目录