【问题标题】:Dos for /f loop adding extra space while parsing reg queryDos for /f 循环在解析 reg 查询时添加额外空间
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢@soja!您的解决方案也有效!我提高了你的答案,但我在这里只是一个菜鸟,所以我猜你必须等待。一旦我把它清理了一下并列出了 JDK 和 JRE 的选择。我会发布它作为答案。也许其他人会觉得它有用?我确实厌倦了运行一堆设置批处理文件。
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 2011-02-24
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
相关资源
最近更新 更多