2013-07-17 35 views
2

我正在使用java Process類來執行一些批處理文件。我使用ProcessBuilder來創建過程,並且此部分運行正常。我的問題是在我正在運行的批處理文件中處理pause命令。 pause命令當前掛起批處理的執行,但我需要完成批處理,以便我可以恢復掛起的操作。目前,我開始代碼相當於一個批處理這樣的:從java進程批量跳過暫停命令

import java.io.BufferedReader; 
import java.io.File; 
import java.io.InputStreamReader; 
import java.util.Arrays; 
import java.util.List; 


public class BatchEnter { 

    public static void main(String[] args) throws Exception { 
     List<String> params = Arrays.asList(new String[]{"cmd", "/C", "C:/test/test.bat"}); 
     ProcessBuilder builder = new ProcessBuilder(params); 
     builder.directory(new File("C:/test")).redirectErrorStream(true); 
     Process p = builder.start(); 

     BufferedReader wr = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = ""; 
     while((line = wr.readLine())!=null){ 
      System.out.println(line); 
     } 

     p.waitFor(); 
    } 
} 

我知道,我們可以利用這個"hack"從一個批處理文件跳過pause命令。但是,我的問題是我無法更改我正在使用的任何批處理文件,也無法添加批處理文件來調用另一批處理,如提供的鏈接。

我想知道是否有一種方法可以指定進程跳過暫停命令?

+0

您可以複製批處理文件,刪除暫停並運行副本。或者你可以發送一個按鍵到過程輸出流(不知道它是否會起作用)。 – assylias

+0

批處理腳本在沒有暫停的情況下完成執行需要多長時間? –

+0

有不同的執行時間的批次。 @assylias如果批處理文件沒有調用其他任何東西,這是一個很好的選擇,但不幸的是並非總是如此。 –

回答

1

正如assylias所說,你只需要打開輸出流併發送命令給腳本。這將幫助你暫停。

Sending commands to a console application?

有例子。我之前做過的一件事是一次只讀一行。如果該行字符串與提示請求匹配,則在發生這種情況時發送換行符。這樣你就不必擔心哪些腳本有提示或多久。

+0

'如果行字符串與提示請求匹配,那麼我應該等待什麼?我用一個基本的批處理文件做了一些測試,沒有任何跡象表明執行暫停命令 –

+0

我在那裏很模糊,因爲它只取決於他們用來暫停的東西。在思科有一個 - 更多 - 尋找的東西,在我寫的一些shell腳本中有一個「按任意鍵」字符串,所以我會尋找。對於這些,腳本暫停時會打印什麼?你可以在批處理文件中插入一些回顯到屏幕的東西嗎? –

+0

感謝您的建議,但我不能依賴於此,因爲暫停前沒有標準輸入,我無法修改批處理,但感謝它仍然是一個有效的選項。 –