【发布时间】:2016-09-25 23:13:08
【问题描述】:
我正在整理一个批处理文件以从当前安装的 JRE 列表中设置 JAVA_HOME。然后它将设置添加bin目录的路径。
它已解析,让我选择,但我看到 %JAVA_HOME% 之后有一个额外的空间。所以路径最终是错误的。
@echo off
setlocal EnableDelayedExpansion
::Script to set JRE or JDK Home.
@set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
::@set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
@set x=0
:: Query with sub-dirs (/s) in regisry 'tree'
::
@set Cmd=reg query "%KeyName%" /s
:: Loop against text string
::for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j
echo Pick the JRE
for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do (set /a "x+=1" & set JHOME[!x!]=%%j & @echo !x! %%j)
set /p y=
@echo You picked: %y%
@set JAVA_HOME=!JHOME[%y%]!
@set PATH=%JAVA_HOME%\BIN;%PATH%
@echo Java Home set to:
@echo %JAVA_HOME%isthis
@echo Path Set to:
@echo %PATH%
运行时会得到以下信息。注意“_101”和“thisis”之间的空格。在路径中的 \BIN 之前还有一个空格。 我是否无意中以某种方式添加了空间? 谢谢! Ĵ c:\mydir\SetJDK.bat
Pick the JRE
1 C:\Program Files\Java\jdk1.8.0_101
2 C:\Program Files\Java\jdk1.8.0_101
2
You picked: 2
Java Home set to:
C:\Program Files\Java\jdk1.8.0_101 isthis
Path Set to:
C:\Program Files\Java\jdk1.8.0_101 \BIN;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;
【问题讨论】:
-
空间正在添加到您拥有
set JHOME[!x!]=%%j &...的位置。您应该引用变量=值对,例如set "JHOME[!x!]=%%j" &...。对于它的价值,现代 JRE 版本在C:\ProgramData\Oracle\Java\javapath中符号链接当前版本。如果您将该目录添加到您的%PATH%,您可能根本不需要批处理脚本。 -
谢谢@rojo!你的解决方案奏效了!欣赏符号链接提示。Solaris 做同样类型的事情。我正在为各种 JRE/JDK 组合上的各种旧 Oracle 应用程序测试 Java 部署规则集。我想要一种快速“获取”不同 JRE/JDK Home 的方法。我考虑过修改链接,但决定采用 REG 方法。
标签: batch-file registry