在批处理脚本中如何循环遍历注册表子键

在批处理脚本中如何循环遍历注册表子键

我可以使用以下代码从 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

相关内容