标题: [注册表类] [己解决]批处理变量延时下无法调用REG ADD命令? [打印本页]
作者: x9tiancmd 时间: 2011-11-8 11:40 标题: [己解决]批处理变量延时下无法调用REG ADD命令?
本帖最后由 x9tiancmd 于 2011-11-9 13:24 编辑
- @echo off
-
- Setlocal Enabledelayedexpansion
- for /f "tokens=1-3 delims= " %%i in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path^|find "Path"') do (
- set "path_=%%k"
- if not !path_:~-1!_==;_ set Path_=!Path_!;
- reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %%i /t %%j /d !path_!d:\bin /f
-
- )
- pause
- ::己解决,PATH 是系统变量,改个变量名就没事了 将Path 改成Path_
-
复制代码
- @echo off
-
- Setlocal Enabledelayedexpansion
- for /f "tokens=1-3 delims= " %%i in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path^|find "Path"') do (
- set "path_=%%k"
- if not !path_:~-1!_==;_ set Path_=!Path!;
- call :a %%i %%j "!Path_!d:\bin"
-
- )
- pause
- :a
- endlocal
- reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %1 /t %2 /d %3 /f
- goto :eof
- ::己解决,PATH 是系统变量,改个变量名就没事了 将Path 改成Path_
复制代码
[
作者: cjiabing 时间: 2011-11-8 12:46
!path!
看看什么是变量延迟的特点
作者: x9tiancmd 时间: 2011-11-8 14:21
本帖最后由 x9tiancmd 于 2011-11-8 14:23 编辑
!path!
看看什么是变量延迟的特点
cjiabing 发表于 2011-11-8 12:46
手误,上面的代码作了修改 也没有用;不信你试试
作者: bluewing009 时间: 2011-11-8 16:48
参考for /f 的usebackq选项
作者: x9tiancmd 时间: 2011-11-8 17:45
参考for /f 的usebackq选项
bluewing009 发表于 2011-11-8 16:48
这跟那有什么关系,根本就风马牛不相及嘛
作者: bluewing009 时间: 2011-11-8 21:18
本帖最后由 bluewing009 于 2011-11-8 21:19 编辑
回复 5# x9tiancmd
爪机看帖子……不过可以这样,直接写一个reg add(随便定义键值,就是不含变量的那种),如果这个键值添加成功了,难道就是你的变量有问题,或者你输出这些变量、去掉@echo off
个人认为不是说reg有什么问题,应该是你定义的变量问题
额,以上还是爪机…………理解……
作者: cjiabing 时间: 2011-11-8 22:10
本帖最后由 cjiabing 于 2011-11-8 22:12 编辑
修改注册表是一件比较麻烦的事情,你要确保你单条命令是否成功执行,在修改完之后,你需要刷新并观察修改位置是否发生变化。
reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %%i /t %%j /d !path!d:\bin /f
在FOR等命令中,或许你需要引号或括号等将以上命令括起来,表示一个完整的命令语句。
而且,你要注意reg的语法格式,语法格式问题也常常导致命令错误。
reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %1 /t %2 /d %3 /f
在使用批处理参数%1 %2 %3等时,命令未必能够正确执行,在reg中,百分号%也会脱层的,请注意检查。
在处理文件路径时,你需要更多的思考和对照。给你看一个正确的例子:
reg add HKCR\1111111\shell\open\command /t REG_SZ /ve /f /d "\"%GetPath%\" %%1 %%*
注意观察可执行的效果。
作者: x9tiancmd 时间: 2011-11-9 09:30
[attach]4632[/attach]回复 7# cjiabing
回复楼上, 在变量延时前面 随便添一句REG ADD命令都能正常运行, 但只要一开了变量延时,哪怕你后面关了,REG ADD这个命令照样无法运行, 这并不是输写的问题. 而是出现REG 不是内部和外部命令.
我不知道各位动手 实测试过没有. 真要是些鸡毛蒜皮的事,我还是能解决的(当然用别的方法也能办到顶楼批处理的功能).
各位实测一下就知道,真是怪了, 不知道算是 Reg 的BUG 还是怎么回事. 所以来这听听大家的高见,当然能解惑更好了.
作者: awk 时间: 2011-11-9 11:40
回复 8# x9tiancmd
set "path=%%k"
把这个自定义变量名改成mypath
作者: bluewing009 时间: 2011-11-9 15:38
最近一直爪机,没有实际测试,但是我写过的东西还是记得Setlocal Enabledelayedexpansion的有无不会影响reg命令,所以认为问题出在变量上。
看到9楼有种恍然大悟的感觉,的确path这个自定义变量……唔唔……犀利啊……我压根没往这边想,看样子是出在这个问题上,虽然我也出过,不过我是通过书写规范来改正的:即变量命名为 名称_作用 这样既避免了一些错误,查看也方便~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |