Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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代码在Runtime/Processbuilder中运行多个命令_Java_Cmd - Fatal编程技术网

使用Java代码在Runtime/Processbuilder中运行多个命令

使用Java代码在Runtime/Processbuilder中运行多个命令,java,cmd,Java,Cmd,我正在尝试做一些非常简单的事情,但它不起作用。 基本上,我有一个程序和一个输入文件位于某个目录下,我们称之为“programDir”。 我正在Eclipse中编写一个插件,它将调用这个程序并在输入文件上运行它 基本上必须完成两个步骤:1)cd到programDir 2)通过调用“idp input.txt”运行程序 我已经在cmd中手动完成了这项工作,它的工作与预期的一样。但是在Java中,我无法让它工作。我尝试了两种方法: Runtime rt = Runtime.getRuntime();

我正在尝试做一些非常简单的事情,但它不起作用。 基本上,我有一个程序和一个输入文件位于某个目录下,我们称之为“programDir”。 我正在Eclipse中编写一个插件,它将调用这个程序并在输入文件上运行它

基本上必须完成两个步骤:1)cd到programDir 2)通过调用“idp input.txt”运行程序

我已经在cmd中手动完成了这项工作,它的工作与预期的一样。但是在Java中,我无法让它工作。我尝试了两种方法:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("cmd.exe /c cd \""+programDir+"\" & \"idp input.txt\"");
在这里,我从错误流中得到以下信息:“idp output.txt”不被识别为intern或extern命令、程序或批处理文件

我不知道为什么。我省略了命令的第二部分,以确保我位于正确的位置。当我添加“开始”时,会弹出一个控制台窗口,它位于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();
现在什么都没有发生,程序也不会终止。 同样,如果我在“command”中添加“start”作为参数之一,控制台窗口会在正确的位置弹出,如果我手动键入“idp input.txt”,它就会工作。所以我不知道为什么代码不起作用

有一件有趣的事情:idp.bat文件调用kbs.exe进程。当我运行第二段代码时,任务管理器中不会出现kbs.exe。然而,一旦我终止程序,它就会短暂地出现。这是否意味着我的代码在某个地方陷入了循环


感谢您的帮助

我的猜测是,引用导致cmd.exe认为可执行命令是
“idp input.txt”
。尝试使用“idp.bat”“input.txt”。这很有效!谢谢你,伙计。