2011-05-20 94 views
2

我想從Java調用Windows命令。java processbuilder windows命令通配符

使用以下行正常工作:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", 
     "find \"searchstr\" C://Workspace//inputFile.txt"); 

但我想找到那個位置下的所有文本文件的字符串,嘗試過這種方式,

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", 
     "find \"searchstr\" C://Workspace//*.txt"); 

但它不工作並且Java控制檯中沒有輸出。

解決方案是什麼?

+0

是否'找到「字符串searchstr 「C:// Workspace // * .txt」是否在Windows命令提示符下工作?如果路徑不存在,它會在第一種情況下給我一個'文件未找到'消息,但通配符掛起。 – 2011-05-20 08:59:56

+0

嗨墊, 它工作正常,如果我直接粘貼到命令提示符並運行它。 – 2011-05-20 09:05:23

+0

嗯, 這可以在命令行中使用, C:\ Workspace> find「searchstr」C://Workspace//*.txt – 2011-05-20 09:19:32

回答

3

看起來像find由於路徑名稱中的雙正斜槓而返回錯誤。如果您將它們更改爲反斜槓(在Java字符串中將它們加倍以將它們轉義),那麼它會成功。

您可以檢查錯誤輸出和find退出代碼使用類似下面的代碼(這是在一個錯誤的情況下,0表示成功,1):

ProcessBuilder pb = new ProcessBuilder(
    "cmd.exe", 
    "/C", 
    "find \"searchstr\" C://Workspace//inputFile.txt"); 

Process p = pb.start(); 
InputStream errorOutput = new BufferedInputStream(p.getErrorStream(), 10000); 
InputStream consoleOutput = new BufferedInputStream(p.getInputStream(), 10000); 

int exitCode = p.waitFor(); 

int ch; 

System.out.println("Errors:"); 
while ((ch = errorOutput.read()) != -1) { 
    System.out.print((char) ch); 
} 

System.out.println("Output:"); 
while ((ch = consoleOutput.read()) != -1) { 
    System.out.print((char) ch); 
} 

System.out.println("Exit code: " + exitCode);