从java执行.exe文件

时间:2016-08-19 20:40:36

标签: java windows cmd

我想从我的java代码中运行一个.exe文件,并将一些参数/选项传递给.exe文件。

基本上,我做了以下事情:

BufferedReader br = null;
OutputResult out = new OutputResult();

String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin";
Process p = Runtime.getRuntime().exec(commandStr);

br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
    out.add(line.trim());
}

注意:此处A-B是xyz.exe所在目录的名称。

但是当打印变量out时,它实际上表明它没有任何内容。

因此,我将其修改为以下代码而不是代码:

BufferedReader bre = null;
OutputResult oute = new OutputResult();

String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin";
Process p = Runtime.getRuntime().exec(commandStr);

bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
while ((line = bre.readLine()) != null) {
    oute.add(line.trim());
}

现在,当打印变量oute时,它会显示消息

'A-B'不被识别为内部或外部命令,可操作程序或批处理文件。

所以我的问题是为什么不将A-B视为实际.exe文件所在的目录。

如果有人知道这个问题,请解决错误。

2 个答案:

答案 0 :(得分:1)

你应该使用目标xyz.exe的完整路径 - 当你执行这样的cmd.exe时,它与Java程序的文件夹无关,它与C:\Windows\System32相关,因此无法看到你的AB文件夹。

所以,例如: cmd.exe /C C:/A-B/xyz.exe health -U admin -P admin

正如@CSK正确注意到的那样,您可以直接执行.exe而不使用cmd.exe。例如:

Process process = new ProcessBuilder("C:/A-B/xyz.exe", "health", "-U", "admin", "-P", "-admin").start();

答案 1 :(得分:0)

我知道,例如,Raspbian上的Java无法访问带有空格的目录(例如/ New Folder)。我想它是关于Raspbian如何在创建目录时考虑''char的问题。可能,Windows可能与' - '字符有相同的问题。您是否可以在没有任何此类字符的情况下重命名目录,然后重试?

(我使用Mac,所以我无法重新创建问题。另一个选项可能是,如果这实际上不是chars的问题,那么创建一个从中执行exe的shell脚本,而不是运行这个脚本是通过Java。我只是建议这个,因为我以前使用过这个方法没有任何问题。)

相关问题