首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从批处理中的for循环中获取所有结果(%%a%%b%%c... %%z)

从批处理中的for循环中获取所有结果(%%a%%b%%c... %%z)
EN

Stack Overflow用户
提问于 2018-05-31 19:03:05
回答 1查看 168关注 0票数 1

我正在尝试获取JavaHome注册表项的路径,到目前为止,我得到了以下内容:

代码语言:javascript
复制
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循环吗?

我最初的想法是我可以

代码语言:javascript
复制
set JAVA_HOME=%%*

但这不管用。

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 19:58:14

您是否可以只使用Reg Query /S选项来递归查询所有子键和值,然后包含/V选项以仅返回与特定值名称匹配的数据:

示例:

代码语言:javascript
复制
@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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50622805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档