在解析reg查询时,为/ f循环添加额外空间的Dos

时间:2016-09-25 23:13:09

标签: batch-file registry

我正在整理一个批处理文件,以便从当前安装的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;

1 个答案:

答案 0 :(得分:0)

额外的空间来自&符号之前的空间。它包含在SET操作中。

您可以通过删除该空格来修复它。

do (set /a "x+=1"& set JHOME[!x!]=%%j& @echo !x! %%j)