如何测试Java中是否存在系统命令

时间:2014-03-31 13:30:54

标签: java runtime exec

我在Java中运行系统命令:

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

在Java中运行命令之前是否可以测试命令是否存在?

3 个答案:

答案 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;
}