确定批处理文件中的命令是否被识别

确定批处理文件中的命令是否被识别

我正在编写一个 bat 脚本,在其中调用一个程序(例如 javac)。为简单起见,我想在运行命令之前检查该命令是否存在。即,该命令是否存在于 PATH 中。

例如,

if (my_command.exe is a recognized command) then (
  my_command.exe my_args
) else (
  REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file."
  REM Do not run my_command.exe
)

在 Windows 中执行此操作的最佳方法是什么?

答案1

WHERE mycommand
IF %ERRORLEVEL% NEQ 0 ECHO mycommand wasn't found 

答案2

下面的代码应该总是干净地执行并且没有垃圾输出。

javac -version >nul 2>&1 && (
    echo found javac
) || (
    echo fail
)

输出:

found javac

与单行代码相同:

javaz -version >nul 2>&1 && ( echo found javac ) || ( echo fail )

输出:

fail

&&请注意,和的顺序||似乎很重要。此外,要测试其是否存在的命令需要返回错误级别 <= 0 才能正常工作。希望该命令有 /? 或 --help 参数,或者像 java 一样,有版本信息命令。

答案3

最简单的方法就是运行命令,但当然这还有其他问题,因为您可能不想启动随机进程。

for %%x in (my_command.exe) do if not [%%~$PATH:x]==[] set MyCommandFound=1

是一种在环境变量列出的路径中搜索程序的替代方案%PATH%。它本质上是 的纯批处理版本which(1)。它可以做得更好,但本质上就是这样。

答案4

就我的情况而言,最简单的方法是使用 || 或 && 运算符。

my_command.exe -version 2>NUL && echo "my_command exists"

或者

my_command.exe -version 2>NUL || echo "my_command doesn't exist"

相关内容