我试图在这里做一些非常简单的事,但它不起作用。 基本上我有一个程序和一个输入文件坐在某个目录,让我们称之为" programDir"。 我在Eclipse中编写了一个插件,它将调用该程序并在输入文件上运行它。
基本上必须完成两个步骤:1)cd to programDir 2)通过调用" idp input.txt"
运行程序我已在cmd中手动完成此操作,它按预期工作。但是在Java中,我无法使用它。我尝试了两种方法:
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("cmd.exe /c cd \""+programDir+"\" & \"idp input.txt\"");
这里我从errorStream中得到以下内容:" idp output.txt"不被识别为实习生或外部命令,程序或批处理文件
我不确定为什么。我遗漏了命令的第二部分,以确保我在正确的位置。当我添加" start"时,会弹出一个控制台窗口,它位于programDir文件夹中。如果我然后手动输入" idp input.txt"我得到了预期的行为。
第二种方法:
在谷歌搜索主题之后,我也使用了ProcessBuilder。我尝试了这段简单的代码:
String[] command = {"CMD", "/C", "idp input.txt"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.directory(new File(programDir));
Process proc = pb.start();
现在没有任何反应,程序也没有终止。 再次,如果我添加"开始"作为"命令"中的参数之一,控制台窗口会弹出正确的位置,如果我然后手动输入" idp input.txt",它就可以工作。所以我不知道代码为什么不起作用。
一件有趣的事:idp.bat文件调用kbs.exe进程。当我运行第二段代码时,我的任务管理器中没有出现kbs.exe。但是,一旦我终止该程序,它就会暂时出现。这是否意味着我的代码卡在某个地方的某个循环中?
任何帮助表示赞赏!