我的要求是从注册表中读取REG_DWORD并将其写入另一个位置。我已成功从注册表位置读取,但不知道如何编写。
我的代码:
@echo off
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache /v "OfflineDirRenameDelete"
SET previous=OfflineDirRenameDelete
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MySoftware /v "CacheDelete" /t REG_DWORD /d previous /f
此代码失败,因为“reg add”不理解“previous”变量
我能够对值进行硬编码并将其设置为注册表。例如,这有效:
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MySoftware /v "CacheDelete" /t REG_DWORD /d 5454 /f
但我基本上不知道如何动态REG_DWORD值到注册表。
答案 0 :(得分:0)
使用%previous%
获取变量的内容。
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MySoftware /v "CacheDelete" /t REG_DWORD /d %previous% /f
以下是using variables in batch files的快速参考。
答案 1 :(得分:0)
问题是REG QUERY指令返回了一些注册表项的名称,它的类型和值。例如,它将类似于:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CacheDelete
LogLevel REG_DWORD 0x29
我试图将此值设置为注册表中的另一个REG_DWORD,这显然是失败的,因为它不仅仅是一个DWORD。而且我可能也遇到了一些语法错误和尝试,所以毫无疑问它会失败。
以下代码对我有用:
@ECHO OFF
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache"
set VALUE_NAME="OfflineDirRenameDelete"
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (
`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set "ValueName=%%A"
set "ValueType=%%B"
set Val="%%C"
)
reg add %KEY_NAME% /v "CacheDelete" /t REG_DWORD /d %Val% /f
希望这有助于某人!