我在Java中運行系統命令:如何測試一個系統命令是否在Java中存在
final Process proc = Runtime.getRuntime().exec(command);
是否有可能測試一個命令是否在Java中運行它之前存在?
我在Java中運行系統命令:如何測試一個系統命令是否在Java中存在
final Process proc = Runtime.getRuntime().exec(command);
是否有可能測試一個命令是否在Java中運行它之前存在?
我會建議:
1)執行命令,並檢查它是否匹配的字符串,如果沒有找到命令Windows報告回「未找到命令」。
2)使用System.getenv("PATH")
來獲取Windows PATH變量。將PATH分成單獨的目錄。使用您要查找的命令的名稱在每個目錄中搜索可執行文件。
for(String folder : System.getenv("PATH").split(";")) {
// Look for the executable
}
不是。您可以運行命令並檢查退出代碼。但顯然有些命令可以改變系統狀態,所以你不能安全地運行它們。例如,不要試圖檢查是否支持命令format c:
:)。
但是,由於您在Windows上,您可以創建/查找某種特定版本的受支持命令的數據庫,或者運行help YOUR_COMMAND
來檢查命令是否在此處。您也可以按照慣例去使用,通常windows命令支持選項/?
和/或/h
,只顯示幫助。
您也可以根據錯誤消息「系統找不到指定的命令」與任何其他錯誤消息作出決定。
編輯: 正如@Hitham S. AlQadheeb提到的那樣,您可以嘗試在路徑目錄和當前目錄中搜索相關的.exe
文件。然而,這不能給你100%正確的結果,因爲有些系統命令不是由相關文件表示的。例如,據我所知,沒有文件dir.exe
,但命令dir
肯定受支持。
感謝您的所有建議。這裏是我的解決方案:
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;
}
我使用Windows XP –
你必須找到和回聲%PATH% –
解析它們只是運行在命令提示符下man命令之前,嘗試在代碼。 –