我正在尝试获取JavaHome注册表项的路径,到目前为止,我得到了以下内容:
for /f "skip=2 tokens=3" %%x in ('reg query "HKLM\SOFTWARE\JavaSoft\%~1" /v CurrentVersion') do set JavaTemp=%%x
for /f "skip=2 tokens=3*" %%a in ('reg query "HKLM\SOFTWARE\JavaSoft\%~1\%JavaTemp%" /v JavaHome') do set JAVA_HOME=%%a %%b
echo %JAVA_HOME%
注意:%1可以是"JRE“或"JDK”
参考:http://www.rgagnon.com/javadetails/java-0642.html
但是,这只会得到路径的前两个部分(%%a%%b),由空格分割。如果路径中有多个空格,这将无法输出整个路径。
我对批量处理for循环没有太多经验,所以我的问题是:我如何才能找到所有的令牌?(无需执行%%a%%b... %%z)我可以以某种方式使用嵌套的for循环吗?
我最初的想法是我可以
set JAVA_HOME=%%*
但这不管用。
发布于 2018-05-31 19:58:14
您是否可以只使用Reg Query
/S
选项来递归查询所有子键和值,然后包含/V
选项以仅返回与特定值名称匹配的数据:
示例:
@Echo Off
Set "_K=HKLM\SOFTWARE\JavaSoft"
Set "_V=JavaHome"
Set "_D="
For /F "Tokens=2*" %%A In (
'"Reg Query "%_K%" /S /V "%_V%" 2>Nul|Find "REG_""') Do Set "_D=%%~B"
If Defined _D Echo %_D% & Pause
您可以根据需要用JAVA_HOME
替换_D
https://stackoverflow.com/questions/50622805
复制相似问题