我正在编写一个 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"