我正在尝试使用批处理文件检查机器上是否安装了 java,并在必要时安装 java。但是,管道不起作用,我在屏幕上得到了 reg 查询的结果。这是代码:
@ECHO OFF
cls
:checkjava
reg query "HKLM\Software\JavaSoft\Java Runtime Environment" | find "ERROR" > NUL
if %errorlevel% == 0
...
我正在尝试使用批处理文件检查机器上是否安装了 java,并在必要时安装 java。但是,管道不起作用,我在屏幕上得到了 reg 查询的结果。这是代码:
@ECHO OFF
cls
:checkjava
reg query "HKLM\Software\JavaSoft\Java Runtime Environment" | find "ERROR" > NUL
if %errorlevel% == 0
...
reg query "HKLM\Software\JavaSoft\Java Runtime Environment" 2>&1 | find "ERROR" > NUL
错误消息打印在错误流中,因此您需要在 &1 中重定向它。这里有更多信息:http ://www.robvanderwoude.com/redirection.php
试试这个:
reg query "HKLM\Software\JavaSoft\Java Runtime Environment" >nul 2>&1 && goto:OK || goto:fail
:OK
echo reg key found
pause
goto:eof
:fail
echo ERROR key not found!
pause
goto:eof
错误消息被发送到标准错误和标准输出,因此您需要在输出运行之前将标准错误重定向到标准find
输出。
reg query "HKLM\Software\JavaSoft\Java Runtime Environment" 2>&1 | find "ERROR" > nul
另一件事是 reg 查询本身在成功或失败时返回 0 或 1
Return Code: (Except for REG COMPARE)
0 - Successful
1 - Failed
所以你可能根本不需要使用find
。
reg query "HKLM\Software\JavaSoft\Java Runtime Environment" > nul 2> nul
if %errorlevel% == 0 goto success
echo "Not found"
goto end
:success
echo "Found"
:end
我只是在打印 Found/Not found - 但您可以采取任何您想要的操作。