2015-02-10 76 views
-1

以下方法在Windows中啓動cmd,它接受需要運行的命令的參數。在使用java的Windows中啓動cmd時出錯?

我已經使用以下命令測試了此方法:net users並且它工作正常,並且它打印了用戶帳戶。但如果我運行dir命令我碰到下面的錯誤:

java.io.IOEXception: 
Cannot run program "dir": CreateProcess error=2, The system cannot find the file specified (in java.lang.ProcessBuilder) 

代碼:

private String commandOutPut; 

     public void startCommandLine(String s) throws IOException{ 
     Runtime runtime = Runtime.getRuntime(); 
     Process process = runtime.exec(s); // you might need the full path 
     InputStream is = process.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String commandOutPut; 

     while ((commandOutPut = br.readLine()) != null) { 
      this.commandOutPut = this.commandOutPut + "\n" + commandOutPut; 
     } 
     System.out.println(this.commandOutPut); 
    } 

回答

0

不知道這種看法可以幫助你。但是,似乎「網絡用戶」被視爲Windows命令,因爲「執行」對話框可以運行它。 但是,由於某種原因,「dir」命令不是。當試圖運行時,Windows響應該命令未找到。

另外,我試着用內聯參數運行命令,但參數被忽略。 (對不起,英文不好)

2

很明顯,你的方法確實不是不是開始cmd。你是如何得到這個概念的?

net命令是一個獨立的命令所以它運行得很好,但dir命令不是獨立的,它是cmd.exe內部命令,所以你不能沒有啓動cmd.exe執行它運行它。

要得到它的工作,你將不得不通過dircmd.exe /c dir或類似的東西。

0

我最好的猜測是,這是因爲「net」是一個真正的可執行文件(有一個文件WINDIR \ System32 \ net.exe「),而」dir「是命令解釋器的內置命令 - 它沒有可執行文件和CMD.EXE內直接執行

Howevever你可以解決這個被調用CMD進程中「目錄」命令的語法 - 按Microsoft docs - 是:。

cmd /c dir 

也有網站上的一些相關答案:

How to execute cmd commands via Java

Run cmd commands through java

0

您可以使用下面的代碼爲這個

進口java.io. *;

public class demo 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      Process pro=Runtime.getRuntime().exec("cmd /c dir"); 
      pro.waitFor(); 
      BufferedReader redr=new BufferedReader(
       new InputStreamReader(pro.getInputStream()) 
      ); 
      String ln; 
      while((ln = redr.readLine()) != null) 
      { 
       System.out.println(ln); 
      } 

     } 
     catch(Exception e) {} 
     System.out.println("Done"); 
    } 
} 
+0

還好,但有可能同時運行兩個命令 – james 2015-02-10 14:42:34

+0

一樣,如果我想瀏覽某個地方,然後exucaute另一個命令 – james 2015-02-10 14:44:38

+0

可能是你可以像==>過程親=調用Runtime.getRuntime()。EXEC( 「cmd/c start cmd.exe/K \」cd d:/ && dir \「」); – 2015-02-11 07:04:01