批处理(.bat)修改注册表值(递增)的解决办法

时间:2022-09-04 16:22:51

题目可能表达不是很清楚。

需求:

最新需要一个处理一个注册表,需要点击批处理文件,把注册表里面的一个值增加2(点一次增加2,点两次增加4);

呵呵,由于自己没有接触过批处理文件,也不懂他的语法,只是平常用,所以连忙查了些资料。

方法一:

 查出注册表里面值的大小,再把值增加2

方法二:

先查出,给出一个值判断是否大于注册表的里面的值,大于就直接把系统的值改为给出的值,不大于就把值增加,再次比较,一致要大于注册表值才   把系统的值改为最后给出的值。

由于方法二麻烦,而且接触到for循环和if判断,也不简洁,所以最后采用的是方法一:

方法一思路:

先用 reg query 查出注册表里面的值。再赋值给变量a,(最后结果是个字符串)

在截取字符串,把需要的数字给截出来,(这个注册表的值是DWORD类型的,所以最后结果是十六进制的)。

再用方法转成十进制。

再把最后的数字类型的值上面加2,

最后把值传进  reg add  把注册表相应的值改成加2后的值

代码:

(路径,变量名称都改成了a,b,c来代替)

For /f "d=" %%i in ('reg query "o\v\a\b\c\P" /v  "I" ') do Set  a=%%i   set /a s=%a:~33,4%   // 查询并赋值给a
set /a n=0x%s%     // 十六进制转十进制
set /a r=s+2    //加2
reg add  "o\v\a\b\c\P"  /v "I" /t "REG_DWORD" /d   %r%  /f        //reg  add  修改最后值


呵呵

对.bat不是很懂

可能不是最好的思路,所以有什么不妥或者更好的建议,希望留言或者私信我!

----------------------------------------

在CSDN上问,一个大哥给出了另一个方法,我感脚更专业:

@echo off&setlocal ENABLEDELAYEDEXPANSION
set rPath="HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters"
for /f "tokens=2 delims=x" %%a in ('reg query %rPath% /v "IRPStackSize"') do (
  set s=0x%%a
  set /a s+=3
  reg add %rPath% /v "IRPStackSize" /d !s! /t REG_DWORD /f
)
pause


参照:

http://www.cnblogs.com/MichaelGuan/archive/2009/11/11/1601301.html

http://blog.csdn.net/elimago/article/details/4145800

http://tieba.baidu.com/p/712640363