找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30623|回复: 9

[注册表类] [己解决]批处理变量延时下无法调用REG ADD命令?

[复制链接]
发表于 2011-11-8 11:40:22 | 显示全部楼层 |阅读模式
本帖最后由 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. )
  9. pause
  10. ::己解决,PATH 是系统变量,改个变量名就没事了 将Path 改成Path_
  11.  
复制代码
  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. )
  9. pause
  10. :a
  11. endlocal
  12. reg add "HKLM\System\CurrentControlset\Control\Session Manager\Environment" /v %1 /t %2 /d %3 /f
  13. goto :eof
  14. ::己解决,PATH 是系统变量,改个变量名就没事了 将Path 改成Path_ 
复制代码
[

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-11-8 12:46:15 | 显示全部楼层
!path!
看看什么是变量延迟的特点
 楼主| 发表于 2011-11-8 14:21:12 | 显示全部楼层
本帖最后由 x9tiancmd 于 2011-11-8 14:23 编辑
!path!
看看什么是变量延迟的特点
cjiabing 发表于 2011-11-8 12:46



    手误,上面的代码作了修改 也没有用;不信你试试
发表于 2011-11-8 16:48:14 | 显示全部楼层
参考for /f 的usebackq选项
 楼主| 发表于 2011-11-8 17:45:37 | 显示全部楼层
参考for /f 的usebackq选项
bluewing009 发表于 2011-11-8 16:48



    这跟那有什么关系,根本就风马牛不相及嘛
发表于 2011-11-8 21:18:02 | 显示全部楼层
本帖最后由 bluewing009 于 2011-11-8 21:19 编辑

回复 5# x9tiancmd


    爪机看帖子……不过可以这样,直接写一个reg add(随便定义键值,就是不含变量的那种),如果这个键值添加成功了,难道就是你的变量有问题,或者你输出这些变量、去掉@echo off
个人认为不是说reg有什么问题,应该是你定义的变量问题

额,以上还是爪机…………理解……
发表于 2011-11-8 22:10:41 | 显示全部楼层
本帖最后由 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 %%*
注意观察可执行的效果。

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

 楼主| 发表于 2011-11-9 09:30:35 | 显示全部楼层
回复 7# cjiabing


    回复楼上, 在变量延时前面 随便添一句REG ADD命令都能正常运行, 但只要一开了变量延时,哪怕你后面关了,REG ADD这个命令照样无法运行, 这并不是输写的问题.  而是出现REG 不是内部和外部命令.
 我不知道各位动手 实测试过没有.   真要是些鸡毛蒜皮的事,我还是能解决的(当然用别的方法也能办到顶楼批处理的功能).

 各位实测一下就知道,真是怪了, 不知道算是 Reg 的BUG 还是怎么回事. 所以来这听听大家的高见,当然能解惑更好了.
发表于 2011-11-9 11:40:36 | 显示全部楼层
回复 8# x9tiancmd


set "path=%%k"
把这个自定义变量名改成mypath

评分

参与人数 1PB +5 收起 理由
CrLf + 5 提供直接解决方案

查看全部评分

发表于 2011-11-9 15:38:08 | 显示全部楼层
最近一直爪机,没有实际测试,但是我写过的东西还是记得Setlocal Enabledelayedexpansion的有无不会影响reg命令,所以认为问题出在变量上。
看到9楼有种恍然大悟的感觉,的确path这个自定义变量……唔唔……犀利啊……我压根没往这边想,看样子是出在这个问题上,虽然我也出过,不过我是通过书写规范来改正的:即变量命名为 名称_作用 这样既避免了一些错误,查看也方便~

评分

参与人数 1PB +3 收起 理由
CrLf + 3 提供思路

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:21 , Processed in 0.011819 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表