我在Java中运行系统命令:
final Process proc = Runtime.getRuntime().exec(command);
在Java中运行命令之前是否可以测试命令是否存在?
答案 0 :(得分:0)
不是真的。您可以运行命令并检查退出代码。但是显然某些命令可以改变系统状态,因此无法安全地运行它们。例如,不要尝试检查是否支持命令format c:
。)。
但是,由于您在Windows上,您可以创建/查找特定版本支持的命令的数据库,也可以运行help YOUR_COMMAND
来检查命令是否在此处。您还可以按照惯例进行操作,通常Windows命令支持仅显示帮助的选项/?
和/或/h
。
您还可以根据错误消息“系统找不到指定的命令”与任何其他错误消息做出决定。
编辑:
正如@Hitham S. AlQadheeb所提到的,您可以尝试在路径目录和当前目录中搜索相关的.exe
文件。但是,由于某些系统命令不是由相关文件表示,因此无法给出100%正确的结果。例如,据我记得,没有文件dir.exe
,但命令dir
肯定是受支持的。
答案 1 :(得分:0)
我建议:
1)执行命令并检查它是否与Windows报告的“未找到命令”字符串匹配(如果找不到该命令)。
2)使用System.getenv("PATH")
获取Windows PATH变量。将PATH拆分为单个目录。在每个目录中搜索可执行文件,其中包含您要查找的命令的名称。
for(String folder : System.getenv("PATH").split(";")) {
// Look for the executable
}
答案 2 :(得分:-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;
}