更新注册表键值(批处理)

源码:

@echo off
REM *******************************************
REM Modify some ValueNames in registry table
REM *******************************************
title modify ValueName in registry
set search[0].key="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge"
set search[0].value=DisplayVersion
set search[1].key="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge"
set search[1].value=DisplayVersion1
set search[2].key="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge"
set search[2].value=DisplayName
set search[3].key="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge"
set search[3].value=DisplayName1


for /L  %%i in ('0 1 3') do (
	echo ===============================================================
    REM call echo key is set to: %%search[%%i].key%%
	REM call echo value is set to :%%search[%%i].value%%
	call :MODIFY_REG_VALUENAME %%search[%%i].key%% %%search[%%i].value%%

)
GOTO EOF

:MODIFY_REG_VALUENAME 
set REG_KEY_FOR_SEARCH=%1
set REG_SUBKEY_FOR_SUBSTITUE=%2
echo reg query %REG_KEY_FOR_SEARCH% /v %REG_SUBKEY_FOR_SUBSTITUE%
reg query %REG_KEY_FOR_SEARCH% /v %REG_SUBKEY_FOR_SUBSTITUE% 2>nul

if %ERRORLEVEL%==0 (
		for /f "skip=2 tokens=1,2* delims= " %%i in ('reg query %REG_KEY_FOR_SEARCH% /v %REG_SUBKEY_FOR_SUBSTITUE%') do (
			if "%%i"=="%REG_SUBKEY_FOR_SUBSTITUE%" (
				echo -- find ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
				REM echo name:%%i, type:%%j, value:%%k
				REM reg add a new ValueName, copy from searched one
				echo reg add %REG_KEY_FOR_SEARCH% /v "%%i1" /t "%%j" /d "%%k" /f
				reg add %REG_KEY_FOR_SEARCH% /v "%%i1" /t "%%j" /d "%%k" /f >nul
				if %ERRORLEVEL%==0 (
					echo -- added ValueName: %%i1
					REM reg delete origin ValueName
					echo reg delete %REG_KEY_FOR_SEARCH% /v "%%i" /f
					reg delete %REG_KEY_FOR_SEARCH% /v "%%i" /f >nul
					if %ERRORLEVEL%==0 (
						echo -- deleted origin ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
					) else (
						echo --- cannot delete origin ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
					)
				) else (
					echo --- cannot add ValueName: %%i1
				)
			)
		)
) else (
    echo --- cannot find ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
)

:EOF

  解释:以edge为例,已安装edge的机器可以运行。

                  注册表中的键值包含名字Name,类型Type,值Data。

     修改注册表中的键值:通过搜索到的键值,保存该键值的属性并以它为基础,添加新的键值;再删除该键值,达到修改键值的目的。

     如, DisplayName 被修改为 DisplayName1。

 更新:增加可以配置的newvalue

@echo off
REM *******************************************
REM Modify some ValueName in registry table
REM *******************************************
title modify ValueName in registry
set search[0].key="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\fooSoftware"
set search[0].value=DisplayVersion
set search[0].newvalue=DisplayVersion1
set search[1].key="HKLM\SOFTWARE\Classes\fooSoftware"
set search[1].value=InstallDir
set search[1].newvalue=InstallDir1


for /L  %%i in ('0 1 1') do (
    echo ===============================================================
    REM call echo key is set to: %%search[%%i].key%%
    REM call echo value is set to :%%search[%%i].value%%
    call :MODIFY_REG_VALUENAME %%search[%%i].key%% %%search[%%i].value%% %%search[%%i].newvalue%%

)
GOTO EOF

:MODIFY_REG_VALUENAME 
set REG_KEY_FOR_SEARCH=%1
set REG_SUBKEY_FOR_SUBSTITUE=%2
set REG_NEW_SUBKEY_FOR_SUBSTITUE=%3
echo reg query %REG_KEY_FOR_SEARCH% /v %REG_SUBKEY_FOR_SUBSTITUE%
reg query %REG_KEY_FOR_SEARCH% /v %REG_SUBKEY_FOR_SUBSTITUE% 2>nul

if %ERRORLEVEL%==0 (
        for /f "skip=2 tokens=1,2* delims= " %%i in ('reg query %REG_KEY_FOR_SEARCH% /v %REG_SUBKEY_FOR_SUBSTITUE%') do (
            if "%%i"=="%REG_SUBKEY_FOR_SUBSTITUE%" (
                echo -- find ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
                REM echo name:%%i, type:%%j, value:%%k
                REM reg add a new key-value pair
                echo reg add %REG_KEY_FOR_SEARCH% /v "%REG_NEW_SUBKEY_FOR_SUBSTITUE%" /t "%%j" /d "%%k" /f
                reg add %REG_KEY_FOR_SEARCH% /v "%REG_NEW_SUBKEY_FOR_SUBSTITUE%" /t "%%j" /d "%%k" /f >nul
                if %ERRORLEVEL%==0 (
                    echo -- added ValueName: %REG_NEW_SUBKEY_FOR_SUBSTITUE%
                    REM reg delete origin key-value pair
                    echo reg delete %REG_KEY_FOR_SEARCH% /v "%%i" /f
                    reg delete %REG_KEY_FOR_SEARCH% /v "%%i" /f >nul
                    if %ERRORLEVEL%==0 (
                        echo -- deleted origin ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
                    ) else (
                        echo --- cannot delete origin ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
                    )
                ) else (
                    echo --- cannot add ValueName: %REG_NEW_SUBKEY_FOR_SUBSTITUE%
                )
            )
        )
) else (
    echo --- cannot find ValueName: %REG_SUBKEY_FOR_SUBSTITUE%
)

:EOF
View Code

 

posted @ 2022-06-23 13:36  flying0dancing  阅读(907)  评论(0)    收藏  举报