Processbuilder:无法将 2 个路径组合为参数以使用宏执行应用程序
Processbuilder: Cannot combine 2 paths as argument to execute app with a macro
所以为了工作,我想为 minitab 自动化一些东西。我们从显微镜中获得结果,这些结果需要输入到 Minitab 中。现在我想制作一个程序,对文本文件进行一些更改,然后使用宏自动打开 minitab。除了使用 minitab 自动打开宏外,我一切正常。
我可以从 cmd 手动启动它没问题,所以它应该可以工作。
代码可以在下面找到,编译后 运行 我得到这个错误
'C:/Program' is not recognized as an internal or external command,
operable program or batch file.
Process finished with exit code 0
这让我相信 cmd 会做类似的事情:
cmd.exe,/c,c:/Program,Files/..
而不是
cmd.exe,/c,c:/program files/...
String PathExe = "\"C:/Program Files/Minitab/Minitab 17/Minitab 17/Mtb.exe\"";
String Macro = "\"c:/minitAPP/Import.mtb\"";
ProcessBuilder builder;
builder = new ProcessBuilder("cmd.exe", "/c", PathExe + " " + Macro);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
不需要使用cmd.exe来执行另一个.exe文件。直接执行即可,不带引号:
ProcessBuilder builder = new ProcessBuilder(
"C:\Program Files\Minitab\Minitab 17\Minitab 17\Mtb.exe",
"c:\minitAPP\Import.mtb");
通过将整个路径指定为 ProcessBuilder 的单个参数,您可以确保操作系统将其视为单个参数,这就是在普通命令行中使用引号的目的。
所以为了工作,我想为 minitab 自动化一些东西。我们从显微镜中获得结果,这些结果需要输入到 Minitab 中。现在我想制作一个程序,对文本文件进行一些更改,然后使用宏自动打开 minitab。除了使用 minitab 自动打开宏外,我一切正常。
我可以从 cmd 手动启动它没问题,所以它应该可以工作。
代码可以在下面找到,编译后 运行 我得到这个错误
'C:/Program' is not recognized as an internal or external command, operable program or batch file.
Process finished with exit code 0
这让我相信 cmd 会做类似的事情:
cmd.exe,/c,c:/Program,Files/..
而不是
cmd.exe,/c,c:/program files/...
String PathExe = "\"C:/Program Files/Minitab/Minitab 17/Minitab 17/Mtb.exe\"";
String Macro = "\"c:/minitAPP/Import.mtb\"";
ProcessBuilder builder;
builder = new ProcessBuilder("cmd.exe", "/c", PathExe + " " + Macro);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
不需要使用cmd.exe来执行另一个.exe文件。直接执行即可,不带引号:
ProcessBuilder builder = new ProcessBuilder(
"C:\Program Files\Minitab\Minitab 17\Minitab 17\Mtb.exe",
"c:\minitAPP\Import.mtb");
通过将整个路径指定为 ProcessBuilder 的单个参数,您可以确保操作系统将其视为单个参数,这就是在普通命令行中使用引号的目的。