Utilice Java para ejecutar el comando bat. Si la operación bat tarda demasiado, puede causar problemas de bloqueo y bat no se ejecutará hasta que se apague el servidor.
como:
Copie el código de código de la siguiente manera:
Tiempo de ejecución r=Runtime.getRuntime();
Proceso p=nulo;
intentar{
Ruta de cadena = "D:/test.bat";
p = r.exec("cmd.exe /c "+ruta);
p.waitFor();
}catch(Excepción e){
System.out.println("Error de ejecución:"+e.getMessage());
e.printStackTrace();
}
Generalmente, el ejecutivo de Java no le ayuda a lidiar con los problemas de bloqueo de subprocesos y debe manejarse manualmente.
Después del procesamiento:
Copie el código de código de la siguiente manera:
Tiempo de ejecución r=Runtime.getRuntime();
Proceso p=nulo;
intentar{
Ruta de cadena = "D:/test.bat";
p = r.exec("cmd.exe /c "+ruta);
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");
errorGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");
outGobbler.start();
p.waitFor();
}catch(Excepción e){
System.out.println("Error de ejecución:"+e.getMessage());
e.printStackTrace();
}
La clase StreamGobbler es la siguiente:
Copie el código de código de la siguiente manera:
paquete com.test.tool;
importar java.io.BufferedReader;
importar java.io.IOException;
importar java.io.InputStream;
importar java.io.InputStreamReader;
importar java.io.OutputStream;
importar java.io.PrintWriter;
/**
* Se utiliza para manejar el flujo de errores y el flujo de salida generado por Runtime.getRuntime().exec
*/
la clase pública StreamGobbler extiende el hilo {
Flujo de entrada es;
Tipo de cadena;
Sistema operativo OutputStream;
StreamGobbler (InputStream es, tipo cadena) {
esto (es, tipo, nulo);
}
StreamGobbler (InputStream es, tipo de cadena, redirección de OutputStream) {
this.is = es;
este.tipo = tipo;
this.os = redirigir;
}
ejecución pública vacía() {
InputStreamReader isr = nulo;
BufferedReader br = nulo;
PrintWriter pw = nulo;
intentar {
si (os != nulo)
pw = nuevo PrintWriter(os);
isr = nuevo InputStreamReader(es);
br = nuevo BufferedReader(isr);
Línea de cadena = nula;
mientras ((línea = br.readLine()) != nulo) {
si (pw! = nulo)
pw.println(línea);
System.out.println(tipo + ">" + línea);
}
si (pw! = nulo)
pw.flush();
} captura (IOException ioe) {
ioe.printStackTrace();
} finalmente{
intentar {
pw.cerrar();
br.cerrar();
isr.close();
} captura (IOException e) {
e.printStackTrace();
}
}
}
}
Ejecute bat y no será bloqueado.