在批处理文件中使用注册表中的路径

在批处理文件中使用注册表中的路径

我对注册表和批处理文件编辑还很陌生。我想将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 QUERY2 行。FOR命令处理每行。因此,JavaHomePath每次处理下一行时都会设置/覆盖环境变量,并且在处理完所有行并FOR执行完成后,最后一行解析的结果将存储在变量中。您可以更新代码并将输出管道REG QUERY设置为FIND仅获取一行。


附言:昨天我在答案中使用了“tokens=3*”。今天我在另一个工作站上使用另一种操作系统语言对其进行了测试 - “tokens=3*”运行错误,“tokens=2*”运行正确。这对我来说很奇怪,我不明白为什么(我太不专心了?也许吧......),但这是事实......现在上面的代码在批处理文件中可以正常工作。

因此请仔细测试你的最终代码。

相关内容