2013-02-16 236 views
0

我正尝试使用Java与使用psexec在远程服务器上执行命令的大批处理文件进行交互。在远程服务器上以Java运行批处理文件

我可以使用进程生成器启动文件,它对大多数命令都可以正常工作,但似乎会挂起。从批处理文件

一个特定的命令如下:

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-1035。对于电脑,输入电脑号码。 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); 
    } 

任何输入,将不胜感激。

回答

0

您的批处理作业需要您实际提供输入才能继续,这就是为什么它会“挂起”。您需要通过其输出流将此输入提供给流程。一个高度简化的例子:

PrintWriter writer = new PrintWriter(process.getOutputStream()); 
writer.println("10"); 
writer.flush(); 
0

过程不挂,它只是在等待在命令行输入一些之前进行。

当您通过Process.getInputStream()读取过程的输出时,可以使用Process.getOutputStream()将输入发回给它。

公共抽象的OutputStream的getOutputStream()

获得子的输出流。输出到流被输入到由此Process对象表示的进程的标准输入流中。 实现注意事项:输出流被缓冲是一个好主意。

返回: 输出流连接到子进程的正常输入。

相关问题