从批处理文件读取和写入REG_DWORD

时间:2014-02-06 09:01:12

标签: batch-file

我的要求是从注册表中读取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值到注册表。

2 个答案:

答案 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

希望这有助于某人!