可能重复:
如何从我的 Java 应用程序运行批处理文件?
是否有运行 Windows 批处理文件的 Java 类?例如,启动批处理文件并接收批处理运行的结果?
可能重复:
如何从我的 Java 应用程序运行批处理文件?
是否有运行 Windows 批处理文件的 Java 类?例如,启动批处理文件并接收批处理运行的结果?
Apache Commons Exec是一个不错的选择。解决了使用纯 ProcessBuilder 或 Runtime.exec 时会遇到的几个问题。
从项目描述:
从 Java 执行外部进程是一个众所周知的问题领域。它本质上是平台相关的,需要开发人员了解和测试平台特定的行为,例如在 Windows 上使用 cmd.exe 或有限的缓冲区大小导致死锁。JRE 对此的支持非常有限,尽管新的 Java SE 1.5 ProcessBuilder 类更好。
如果您想使用本机 Java 而没有 3rd 方包,请尝试使用Runtime
and 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)
{
}
}
}
通常的ProcessBuilder
东西适用于批处理文件,Runtime#exec
. 您正在执行的命令是cmd.exe
,批处理文件名是它的参数。我相信参数序列是cmd.exe
, /c
, batch_file_name
. (编辑:是的,事实上,我在这里发现了一个问题,这个问题在答案中重复出现。)
Runtime.getRuntime().exec("cmd /c start batFileName.bat");
应该管用。但是要从 java 进程中读取输出,请start
从上面的命令中删除。
是的,据我所知,RunTime 类可以。当然,ProcessBuilder 也一样。我已经使用 Java 运行了多个批处理文件。以下是谷歌搜索结果。它具有同样重要的链接