0

可能重复:
如何从我的 Java 应用程序运行批处理文件?

是否有运行 Windows 批处理文件的 Java 类?例如,启动批处理文件并接收批处理运行的结果?

4

5 回答 5

1

Apache Commons Exec是一个不错的选择。解决了使用纯 ProcessBuilder 或 Runtime.exec 时会遇到的几个问题。

从项目描述:

从 Java 执行外部进程是一个众所周知的问题领域。它本质上是平台相关的,需要开发人员了解和测试平台特定的行为,例如在 Windows 上使用 cmd.exe 或有限的缓冲区大小导致死锁。JRE 对此的支持非常有限,尽管新的 Java SE 1.5 ProcessBuilder 类更好。

于 2012-10-24T15:30:10.103 回答
0

如果您想使用本机 Java 而没有 3rd 方包,请尝试使用Runtimeand Process。我不是世界上最好的 Java 编码器,但这应该能得到你想要的。它可能需要一些修改来添加一个循环来从输入流中读取所有内容。

import java.util.*;
import java.lang.*;
import java.io.*;

public class test
{
    public static void main(String args[])
    {
        try
        {
            Runtime rt = Runtime.getRuntime();
            Process batch = rt.exec("test.bat");

            batch.waitFor();

            //exitValue() contains the ERRORLEVEL from batch file
            System.out.println(batch.exitValue());

            //getInputStream will get all output from stdout
            //getErrorStream will get all error output from stderr
            InputStream inStream = batch.getInputStream();
            byte[] text = new byte[inStream.available()];
            inStream.read(text);

            System.out.println(new String(text));
        }
        catch (IOException ex)
        {
        }
        catch (InterruptedException ex)
        {
        }
    }
}
于 2012-10-24T15:46:02.943 回答
0

通常的ProcessBuilder东西适用于批处理文件,Runtime#exec. 您正在执行的命令是cmd.exe,批处理文件名是它的参数。我相信参数序列是cmd.exe, /c, batch_file_name. (编辑:是的,事实上,我在这里发现了一个问题,这个问题在答案中重复出现。)

于 2012-10-24T15:28:33.220 回答
0

Runtime.getRuntime().exec("cmd /c start batFileName.bat");应该管用。但是要从 java 进程中读取输出,请start从上面的命令中删除。

于 2012-10-24T15:29:39.323 回答
0

是的,据我所知,RunTime 类可以。当然,ProcessBuilder 也一样。我已经使用 Java 运行了多个批处理文件。以下是谷歌搜索结果。它具有同样重要的链接

谷歌结果

于 2012-10-24T15:30:23.147 回答