我对注册表和批处理文件编辑还很陌生。我想将C:\PROGRA~2\Java\jre8\bin
批处理文件中的路径替换为更通用的路径,这样每次我都不必修改路径,它会自动从注册表中获取。
key path = HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
inside key i have
name = JavaHome
data = C:\Program Files\Java\jre8
有人可以帮忙怎么做,或者告诉任何参考文献吗?
答案1
[test.bat]文件主体
批处理文件代码查询注册表,将参数值放入环境变量中,然后使用此值获取目录列表。已测试。
SetLocal
for /f "tokens=2*" %%a in ('HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v JavaHomePath') do set JavaHomePath=%%b
dir "%JavaHomePath%"
它是如何工作的?
我们使用REG
命令行实用程序来获取注册表项值。根据命令
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v JavaHome
然后,其输出将被命令解析FOR /F
。命令输出如下
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
JavaHome REG_SZ C:\Program Files\Java\jre8
如果未指定,<space/tab>
则将其用作默认分隔符。因此,第一个标记是Keyname
,第二个是KeyType
,第三个(以及下一个,如果值包含空格)是KeyValue
。
我们指定tokens=2*
。这(数字2
)意味着我们要将第三个标记分配给指定的变量(%%a
)并将(数字后的星号)所有尾部分配给自动创建的变量,其名称为下一个(按字母顺序)字母(即%%b
)。因此KeyValue
,即第二个标记和分隔符后的尾部,将被放入%%b
变量中。
然后我们执行set
命令并将该值分配给环境变量。
产生REG QUERY
2 行。FOR
命令处理每行。因此,JavaHomePath
每次处理下一行时都会设置/覆盖环境变量,并且在处理完所有行并FOR
执行完成后,最后一行解析的结果将存储在变量中。您可以更新代码并将输出管道REG QUERY
设置为FIND
仅获取一行。
附言:昨天我在答案中使用了“tokens=3*”。今天我在另一个工作站上使用另一种操作系统语言对其进行了测试 - “tokens=3*”运行错误,“tokens=2*”运行正确。这对我来说很奇怪,我不明白为什么(我太不专心了?也许吧......),但这是事实......现在上面的代码在批处理文件中可以正常工作。
因此请仔细测试你的最终代码。