2014-03-31 25 views
2

我在Java中運行系統命令:如何測試一個系統命令是否在Java中存在

final Process proc = Runtime.getRuntime().exec(command); 

是否有可能測試一個命令是否在Java中運行它之前存在?

+0

我使用Windows XP –

+0

你必須找到和回聲%PATH% –

+0

解析它們只是運行在命令提示符下man命令之前,嘗試在代碼。 –

回答

0

我會建議:

1)執行命令,並檢查它是否匹配的字符串,如果沒有找到命令Windows報告回「未找到命令」。

2)使用System.getenv("PATH")來獲取Windows PATH變量。將PATH分成單獨的目錄。使用您要查找的命令的名稱在每個目錄中搜索可執行文件。

for(String folder : System.getenv("PATH").split(";")) { 
     // Look for the executable 
    } 
0

不是。您可以運行命令並檢查退出代碼。但顯然有些命令可以改變系統狀態,所以你不能安全地運行它們。例如,不要試圖檢查是否支持命令format c: :)。

但是,由於您在Windows上,您可以創建/查找某種特定版本的受支持命令的數據庫,或者運行help YOUR_COMMAND來檢查命令是否在此處。您也可以按照慣例去使用,通常windows命令支持選項/?和/或/h,只顯示幫助。

您也可以根據錯誤消息「系統找不到指定的命令」與任何其他錯誤消息作出決定。

編輯: 正如@Hitham S. AlQadheeb提到的那樣,您可以嘗試在路徑目錄和當前目錄中搜索相關的.exe文件。然而,這不能給你100%正確的結果,因爲有些系統命令不是由相關文件表示的。例如,據我所知,沒有文件dir.exe,但命令dir肯定受支持。

-1

感謝您的所有建議。這裏是我的解決方案:

public static String getCmdPathFileStr(String command) { 
    String rtn = null; 
    if (command != null) { 
     String[] sCmdExts = { "", ".com", ".exe", ".bat" }; 
     StringTokenizer st = new StringTokenizer(System.getenv("PATH"), File.pathSeparator); 
     String path, sFile; 
     while (st.hasMoreTokens()) { 
      path = st.nextToken(); 
      for (String sExt : sCmdExts) { 
       sFile = path + File.separator + command + sExt; 
       if (new File(sFile).isFile()) { 
        rtn = sFile; 
        break; 
       } 
      } 
     } 
    } 
    return rtn; 
} 
相關問題