我想从我的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文件所在的目录。
如果有人知道这个问题,请解决错误。
答案 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。我只是建议这个,因为我以前使用过这个方法没有任何问题。)