我正在放置一个批处理文件以从当前安装的JRE列表中设置JAVA_HOME。然后它将设置添加bin目录的路径。Dos为/ f循环在解析reg查询时增加额外空间
它让我们挑剔,但是我看到%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;
将空间添加到已设置JHOME [!x!] = %% j&...'的位置。你应该引用变量=值对,比如'set“JHOME [!x!] = %% j”&...'。对于它的价值,现代JRE版本符合当前版本在'C:\ ProgramData \ Oracle \ Java \ javapath'中的链接。如果将该目录添加到“%PATH%”中,则根本不需要批处理脚本。 – rojo
谢谢@rojo!你的解决方案工作欣赏symlink tip.Solaris做同样的事情。我正在为各种JRE/JDK组合测试各种旧版Oracle应用的Java部署规则集。我想要一个快速的方法来“发现”不同的JRE/JDK Homes。我想过修改链接,但决定采用REG方法。 – MidnightDBA