使用Runtime调用bat文件处理外部脚本时一般使用Runtime.getRuntime.exec(command)就可以了
如果批处理是使用db2的db2cmd时,dos窗口则会弹出db2命令窗口执行相关的处理脚本,如果需要等待此批处理命令执行完成后再执行下面的流程就会出现相应的问题。
如下例流程,将客户端将生成数据备份文件上传至服务器
因waitFor() 只能控制第一个dos窗口的进程,而无法控制下一个窗口,程序则会同步执行,当数据还没生成时就已经进行压缩处理了,当然会出现错误。 所以在执行批处理时将批出理文件隐式执行
/** * 执行批处理 * @param command */ public void runBat(String command) { Process child = null; try { Runtime rt = Runtime.getRuntime(); child = rt.exec(command); //以下代码为控制台输出相关的批出理 String line = null ; BufferedReader reader = new BufferedReader(new InputStreamReader(child.getInputStream())); while ((line = reader.readLine()) != null ) { System.out.println(line); } reader.close(); // 等待刚刚执行的命令的结束 while ( true ) { if (child.waitFor() == 0 ) break ; } } catch (Exception ex) { child.destroy(); ex.printStackTrace(); } }
批处理代码如下: runBat中执行db2cmd时需加上 -c -w -i script
@echo off rem rem This is a Windows Shell Script that invokes a DB2 Command Window that rem performs a database backup by calling the DB2 backup database command. rem set DB2INSTANCE=DB2 set DB2DATABASE=SAMPLE db2 connect to %DB2DATABASE% user Administrator using Administrator db2 export to "d:\employee.csv" of del modified by coldel, select * from EMPLOYEE db2 disconnect %DB2DATABASE% db2 terminate