Windows 增量<;ValueName>;从批处理文件使用reg add时

Windows 增量<;ValueName>;从批处理文件使用reg add时,windows,batch-file,cmd,registry,Windows,Batch File,Cmd,Registry,我有一组电脑需要添加注册表项 我当前使用一个批处理文件,其中包含以下行以在windows中添加注册表项: reg添加“HKLM\SOFTWARE\Policies\Google\Chrome\Test”/v1/t reg\u SZ/d Test/f 注意/v1 稍后,我需要在此键下添加一个新值。有些机器已经有了第一个值,因此我想用/v2添加新的值,但是如果机器还没有任何值,我想将新的值添加为/v1 我要做的是获取此键下的最后一个值,将ValueName参数作为int,将其递增,并将结果用作我添加

我有一组电脑需要添加注册表项

我当前使用一个批处理文件,其中包含以下行以在windows中添加注册表项:

reg添加“HKLM\SOFTWARE\Policies\Google\Chrome\Test”/v1/t reg\u SZ/d Test/f

注意
/v1

稍后,我需要在此键下添加一个新值。有些机器已经有了第一个值,因此我想用
/v2
添加新的值,但是如果机器还没有任何值,我想将新的值添加为
/v1

我要做的是获取此键下的最后一个值,将
ValueName
参数作为int,将其递增,并将结果用作我添加的键的
ValueName
。如果还没有值,
ValueName
应默认为
1


如何在批处理文件中执行此操作?

您可以尝试以下操作:

@echo off
Set "Key=HKLM\SOFTWARE\Policies\Google\Chrome\Test"
reg query "%key%" >Nul 2>&1
If "%errorlevel%" EQU "1" ( goto NoExist ) else ( goto Exist )

:Exist
Color 0A
echo "%key%" Exist 
reg add "%key%" /v 2 /t REG_SZ /d Test /f
pause
exit /b

:NoExist
Color 0C
echo "%key%" dosen't Exist
pause
goto CreateKey

:CreateKey
cls
Color 0B
reg add "%key%" /v 1 /t REG_SZ /d Test /f>nul 2>&1
If "%errorlevel%" EQU "0" ( echo The Key is added succesfuly into the registry !
    ) else ( 
    color 0C & echo There was an error !
 )
pause
Exit

您可以尝试类似的方法:

@echo off
Set "Key=HKLM\SOFTWARE\Policies\Google\Chrome\Test"
reg query "%key%" >Nul 2>&1
If "%errorlevel%" EQU "1" ( goto NoExist ) else ( goto Exist )

:Exist
Color 0A
echo "%key%" Exist 
reg add "%key%" /v 2 /t REG_SZ /d Test /f
pause
exit /b

:NoExist
Color 0C
echo "%key%" dosen't Exist
pause
goto CreateKey

:CreateKey
cls
Color 0B
reg add "%key%" /v 1 /t REG_SZ /d Test /f>nul 2>&1
If "%errorlevel%" EQU "0" ( echo The Key is added succesfuly into the registry !
    ) else ( 
    color 0C & echo There was an error !
 )
pause
Exit

在CMD和.bat文件中执行命令之间的语法差异使得这一点很难解决,但这是最终解决的问题:

setlocal enabledelayedexpansion enableextensions
SET /a ValueName=0
SET Query=REG QUERY HKLM\SOFTWARE\Policies\Google\Chrome\Test
SET Key=HKLM\SOFTWARE\Policies\Google\Chrome\Test
FOR /f "tokens=1,2,3" %%a in (%Query%) do ( 
 IF %%a GTR !ValueName! (
  SET /a ValueName=%%a+1
 )
)
endlocal
REG ADD %Key% /v %ValueName% /t REG_SZ /d Test2
PAUSE

在CMD和.bat文件中执行命令之间的语法差异使得这一点很难解决,但这是最终解决的问题:

setlocal enabledelayedexpansion enableextensions
SET /a ValueName=0
SET Query=REG QUERY HKLM\SOFTWARE\Policies\Google\Chrome\Test
SET Key=HKLM\SOFTWARE\Policies\Google\Chrome\Test
FOR /f "tokens=1,2,3" %%a in (%Query%) do ( 
 IF %%a GTR !ValueName! (
  SET /a ValueName=%%a+1
 )
)
endlocal
REG ADD %Key% /v %ValueName% /t REG_SZ /d Test2
PAUSE

执行
reg query
首先查找
/v1
如果失败,则添加
/v1
如果成功,则添加
/v2
执行
reg query
首先查找
/v1
如果失败,则添加
/v1
如果成功,则添加
/v2
,感谢您的帮助。不幸的是,在野外,这些键可能已经有任意数量的项,所以我真的需要增加找到的最高值。不过我还是算出了:)再次感谢!谢谢你的帮助。不幸的是,在野外,这些键可能已经有任意数量的项,所以我真的需要增加找到的最高值。不过我还是算出了:)再次感谢!