我可以使用以下代码从 Windows 注册表中获取安装在我系统上的 Java 版本列表。但是如何循环遍历列表并将 Java 主页存储在数组中?
@ECHO OFF
REG QUERY "HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit" /S
PAUSE
输出如下:
output
-----------
D:\ITM\configuration
experience\apm_datacollectors_win_8.1.4.0\j2se_datacollecto
r_win_8.1.4.0\j2sedc\.gdc\7.3.0.5.0\bin>config.bat
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit
CurrentVersion REG_SZ 1.8
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.7
JavaHome REG_SZ C:\Program Files\jdk1.7.0_79
MicroVersion REG_SZ 0
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.7.0_79
JavaHome REG_SZ C:\Program Files\jdk1.7.0_79
MicroVersion REG_SZ 0
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8
JavaHome REG_SZ C:\Program Files\Java\jdk1.8.0_121
MicroVersion REG_SZ 0
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8.0_121
JavaHome REG_SZ C:\Program Files\Java\jdk1.8.0_121
MicroVersion REG_SZ 0
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8.0_121\MSI
INSTALLDIR REG_SZ C:\Program Files\Java\jdk1.8.0_121\
NOSTARTMENU REG_SZ 0
Press any key to continue . . .
答案1
MS-DOS 中没有数组这种东西,但您可以循环遍历结果,并获取 JavaHome 的值,如下所示:
for /f "tokens=3* usebackq" %%a in (`reg query "HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit" /S ^| find "JavaHome"`) do (
echo %%a %%b
)
答案2
首先感谢您的回答并让我(一名 Java 开发人员)意识到批处理脚本不支持数组:-)
我想要完成什么?--> 我正在开发一个监控代理,目前以 zip 文件的形式提供给客户。客户解压它并运行 config.bat 文件以在其机器上配置代理。此 config.bat 要求用户输入 JAVA_HOME(客户机器上安装 java 的目录),因为代理是基于 java 的。我的任务是通过自动搜索客户机器上安装的任何 java 来增强此客户体验,而不是要求客户实际输入 JAVA_HOME。
现在,一个用例是客户机器上只安装了一个版本的 Java。然后 config.bat 脚本应该从 Windows 注册表中读取该 java 条目。但是,如果客户机器上安装了多个 java 实例怎么办?在这种情况下,我必须向客户展示他的机器上有多个 java 实例,他可以从中选择一个用于代理安装。
@Berend:谢谢,您上面分享的 for 循环运行良好,并返回如下所示的结果。在该 for 循环中,%%a 是存储迭代后值的变量吗?我的理解正确吗?那么 %%b 是什么?
D:\ITM\configuration
experience\apm_datacollectors_win_8.1.4.0\j2se_datacollecto
r_win_8.1.4.0\j2sedc\.gdc\7.3.0.5.0\bin>config.bat
C:\Program Files\jdk1.7.0_79
C:\Program Files\jdk1.7.0_79
C:\Program Files\Java\jdk1.8.0_121
C:\Program Files\Java\jdk1.8.0_121