题目可能表达不是很清楚。
需求:
最新需要一个处理一个注册表,需要点击批处理文件,把注册表里面的一个值增加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