Board logo

标题: [注册表类] [己解决]批处理变量延时下无法调用REG ADD命令? [打印本页]

作者: x9tiancmd    时间: 2011-11-8 11:40     标题: [己解决]批处理变量延时下无法调用REG ADD命令?

本帖最后由 x9tiancmd 于 2011-11-9 13:24 编辑
  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. for /f "tokens=1-3 delims= " %%i in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path^|find "Path"') do (
  4. set "path_=%%k"
  5. if not !path_:~-1!_==;_  set Path_=!Path_!;
  6. reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %%i /t %%j /d !path_!d:\bin /f
  7. )
  8. pause
  9. ::己解决,PATH 是系统变量,改个变量名就没事了 将Path 改成Path_
  10.  
复制代码
  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. for /f "tokens=1-3 delims= " %%i in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v Path^|find "Path"') do (
  4. set "path_=%%k"
  5. if not !path_:~-1!_==;_  set Path_=!Path!;
  6. call :a %%i %%j "!Path_!d:\bin"
  7. )
  8. pause
  9. :a
  10. endlocal
  11. reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %1 /t %2 /d %3 /f
  12. goto :eof
  13. ::己解决,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