2013-02-16 232 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對象表示的進程的標準輸入流中。 實現注意事項:輸出流被緩衝是一個好主意。

返回: 輸出流連接到子進程的正常輸入。

相關問題