2014-02-06 76 views
0

我的要求是從註冊表讀取REG_DWORD並將其寫入另一個位置。我已經成功地從註冊表位置讀取,但不知道如何編寫。從批處理文件讀取和寫入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」不理解「前一個」變量

我能硬編碼值,並將其設置爲註冊表中。例如,這個工程:

REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MySoftware /v "CacheDelete" /t REG_DWORD /d 5454 /f 

但我基本上不知道如何動態REG_DWORD值到註冊表。

+0

歡迎來到Stack Overflow。如果我的答案解決了您的問題,請點擊答案左側的「接受」圖標接受答案。 –

+0

謝謝你的幫助,亞歷山德羅。我想我明白了這個問題。 「reg查詢」返回一個字符串而不是一個DWORD,這是導致問題的原因。我想我會盡力解決它並在這裏發佈解決方案。 –

+0

亞歷山德羅,我編輯了我的問題,包括答案。 –

回答

0

問題是REG QUERY指令正在返回註冊表項的名稱,它的類型和值。例如,它會是這樣的:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CacheDelete 
    LogLevel REG_DWORD 0x29 

我試圖將該值設置爲在註冊表中,它顯然沒有,因爲這是不是一個DWORD更另一個REG_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 

希望這可以幫助別人!

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的快速參考。