在远程服务器上运行Java批处理文件
我正在尝试使用Java与一个大型批处理文件接口,该文件使用psexec在远程服务器上执行命令 我可以使用process builder启动该文件,它可以很好地用于大多数命令,但似乎挂断了 批处理文件中的一个特定命令如下所示:在远程服务器上运行Java批处理文件,java,batch-file,processbuilder,psexec,Java,Batch File,Processbuilder,Psexec,我正在尝试使用Java与一个大型批处理文件接口,该文件使用psexec在远程服务器上执行命令 我可以使用process builder启动该文件,它可以很好地用于大多数命令,但似乎挂断了 批处理文件中的一个特定命令如下所示: ECHO . Echo Which would you like to reboot? Echo 1-10. For computers, enter computer number. Echo E. Exit set /p userinp=choose a number(
ECHO .
Echo Which would you like to reboot?
Echo 1-10. For computers, enter computer number.
Echo E. Exit
set /p userinp=choose a number(0-22):
但是从Java我得到:
.
您想重新启动哪个?
1-10. 对于计算机,输入计算机编号。
E.出口
然后它就挂了
它显然没有读取设置行,但更重要的是,我还没有弄清楚如何将输入传递回子流程
String[] command = {"cmd", "/c", "batchfile", "restart"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\"));
Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
任何输入都将不胜感激。您的批处理作业要求您实际提供输入才能继续,这就是它看起来“挂起”的原因。您需要通过流程的输出流将此输入提供给流程。高度简化的示例:
PrintWriter writer = new PrintWriter(process.getOutputStream());
writer.println("10");
writer.flush();
您的进程没有挂起,它只是在命令行等待一些输入,然后再继续 当您通过
process.getInputStream()
读取进程的输出时,您可以使用将输入发送回进程
公共抽象OutputStream getOutputStream()
获取子流程的输出流。流的输出通过管道传输到由该流程对象表示的流程的标准输入流中。
实现说明:最好对输出流进行缓冲
返回:
连接到子流程正常输入的输出流
String[] command = {"cmd", "/c", "batchfile", "restart"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\"));
Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}