我正在整理一个批处理文件,以便从当前安装的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;
答案 0 :(得分:0)
额外的空间来自&符号之前的空间。它包含在SET操作中。
您可以通过删除该空格来修复它。
do (set /a "x+=1"& set JHOME[!x!]=%%j& @echo !x! %%j)