我正在尝试从 Java 程序运行批处理文件。例如:我在“程序文件”的文件夹中有一批“abc.bat”。
我想从我的 Java 程序中执行这个批处理。我正在使用 CommandLine 类,Commons-exec jar。
CommandLine cmdLine = CommandLine.parse("cmd");
cmdLine.addArgument("/c start \"\" \"C:\\Program Files\\abc.bat\"");
DefaultExecutor exec = new DefaultExecutor();
Process p = Runtime.getRuntime().exec(cmdLine.toString());
exec.execute(cmdLine);
上面的代码会抛出一个错误,提示“Windows 找不到文件。请确保您输入了正确的名称,然后再试一次”。而且,那是因为路径中的空格。
所以,我尝试了@brso05 在此处提供的答案,并且有效。但我希望它在未来课程中。请在下面找到我的代码并帮助我修复它。
final CommandLine cmdLine = CommandLine.parse("cmd.exe");
cmdLine.addArgument("/c");
cmdLine.addArgument("start");
cmdLine.addArgument("\""+ batchFileExecute.getParent().toString() + "\"");
ExecutorService es = Executors.newFixedThreadPool(1);
Future<?> future = es.submit(new Runnable() {
public void run() {
DefaultExecutor exec = new DefaultExecutor();
try {
Process p = Runtime.getRuntime().exec(cmdLine.toString());
exec.execute(cmdLine);
System.out.println(p.waitFor());
}
catch (IOException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
});
String thread_status = null;
try
{
thread_status = future.get().toString();
System.out.println(thread_status+" completed the execution");
}
catch (NullPointerException e)
{
System.out.println("The execution of the received project is complete.");
// In here I want to do some processing again.
}
我提到的代码有效,但如果我的批处理文件在路径中有空格,它就不起作用。你能帮我解决这个问题吗?
因为你给出的代码片段有效,但我不能把它放到未来。它不能以所需的方式工作。
提前致谢!