如何检查命令在 Windows shell 中是否可用?

e-s*_*tis 5 shell command

要检查命令在 bash shell 中是否可用,我通常会这样做:

command -v $COMMAND >/dev/null 2>&1 || {
    echo >&2 "Error: this script requires the command '$COMMAND' to be available"
    exit 1
}
Run Code Online (Sandbox Code Playgroud)

Windows 中的等价物是什么?

Sla*_*lav 3

你可以使用非常相似的东西

%command% >nul 2>&1 || (
    echo "Error: command not found"
    exit /b 1
)
Run Code Online (Sandbox Code Playgroud)

当然,这实际上会执行该命令,但如果没有适当的参数,大多数命令将不会执行任何操作。如果您想更加确定,可以使用%command% /? >nul 2&1. 这将尝试打开命令的帮助页面,而不执行它

更新: 为了避免完全执行该命令,请考虑where.exe. 它与 Vista 和 Windows 7 捆绑在一起。对于其他操作系统,您可以下载它。如何下载请参考这篇文章

一旦你有了它,你可以用/Qswitch 运行它以避免额外的输出。返回代码 0 表示找到命令。我发现该where命令要求您提供扩展名。

另一方面,这里有一个关于批处理“one-liner”的冗长讨论,该批处理“one-liner”可以在没有指定扩展名的情况下工作(但当您指定扩展名时实际上会失败)