[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [分享]批处理中reg命令基础:添加注册表项

  1. reg add  "HKEY_CLASSES_ROOT\*\shell\open\command" /v ""  /d  "notepad.exe %1" /t REG_SZ /f  
  2. pause
复制代码
我想问下为什么reg add在执行这条命令后
修改的值并不能变成notepad %1
而变成了notepad  郁闷
为什么后面的 %1 不见了呢?
难道必须通过手动方式进行修改注册表吗?
有没有更好的方法解决这个问题呢?

相干资料参考。

http://hi.baidu.com/jasonxfocus/blog/item/ccef6ad96d41963d32fa1c0a.html
我想把这个用批处理使先,但总是实现失败。。

该成了notepad.exe  但不能使它成为notepad.exe %1我的目的是把它该成notepad %1 而不是notepad.exe
难道reg add  命令在修改注册表的时候要注意什么? 如果我想把某一个值修改成诸如 notepad %1
总是失败,究竟该怎么做呢?还请各位给个参考,今天发现这个问题,实在很奇怪
故拿来和大家一起探讨下,本人还是初级中的初级才鸟。


如果改成   /d "notepad.exe %%1 便可以了。。

感谢一下批处理之家的chenyun1zz 、润土等同志的好心,
谢谢。

  1. reg add  "HKEY_CLASSES_ROOT\*\shell\open\command" /v ""  /d  "notepad.exe %%1" /t REG_SZ /f  
  2. pause
复制代码


解释一下  

/v  意思是 键名 后面跟键门,我这里特别提醒一下 如果没有键名,就是说你改的是默认值的话,这里就 写成reg add /v "" 这个很重要

/d 具体键值,就是说你要把它到底改成什么呢?就改成这样的 。把它的值改成notepad %1

/f  表示强制执行

/t 数据类型,比如:字符串、数值等

我为什么要 在hkey root class 下建立个*\shell\open\command呢?
并把它值为notepad %1 呢?
这样,对于特殊文件,打不开可以用双击直接打开
对于很多*.dll文件 等其他文件都可以才用此方法打开。

tireless 兄,刚才提醒了一点,现在我加上去

/ve  可以完全替代 /v ""  看来我还是没有仔细看 reg add /?这个命令啊
仔细,仔细再仔细的学习学习一下。。
1

评分人数

    • tireless: 覆盖open\command的方法不错!PB + 5

C:\>reg add /?

Windows 控制台注册表工具 - 版本 3.0
版权所有 (C) Microsoft Corp. 1981-2001.  保留所有权利。


REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

  KeyName  [\\Machine\]FullKey
           远程机器的机器名 - 忽略默认到当前机器。
                    远程机器上只有 HKLM 和 HKU。
           FullKey  ROOTKEY\SubKey
           ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
           SubKey   所选 ROOTKEY 下注册表项的完整名

  /v       所选项之下要添加的值名

  /ve      为注册表项添加空白值名<无名称>

可以用 /ve 代替 /v ""
1

评分人数

    • lixiaodaoaaa: /ve 也可以,我现在才知道,感谢感谢PB + 2

TOP

覆盖 hkcr\*\shell\open\command 的方法不错啊!受楼主启发,我觉得这样添加比较好:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\*\shell]
  3. @="notepad"
  4. [HKEY_CLASSES_ROOT\*\shell\notepad]
  5. @="用记事本打开"
  6. [HKEY_CLASSES_ROOT\*\shell\notepad\command]
  7. @="notepad.exe \"%1\""
复制代码
这样的话,能正常打开的文件右键也有“用记事本打开”,因为有时会用记事本打开图片文件等。而没有关联打开的文件,第一项就会变为“用记事本打开”。

[ 本帖最后由 tireless 于 2009-3-16 19:09 编辑 ]
1

评分人数

TOP

回复 3楼 的帖子

你的注册表也改下,成为 批处理格式的,比较快啊
我再看看代码,把它该下。。

TOP

回复 3楼 的帖子

代码终于搞好
  1. reg add "HKEY_CLASSES_ROOT\*\shell" /ve /d notepad /f /t REG_SZ
  2. reg add "HKEY_CLASSES_ROOT\*\shell\notepad" /ve /d 用记事本打开 /f /t REG_SZ
  3. reg add "HKEY_CLASSES_ROOT\*\shell\notepad\command" /ve /d "notepad.exe %%1" /t REG_SZ   /f
  4. pause
复制代码


这个操作成功后,可以用记事本右键打开文件,很好。不错。

TOP

3 楼的注册表文件改成批处理,这样比较好:
  1. Windows Registry Editor Version 5.00
  2. ;@cls & start regedit /s "%~f0" & exit /b
  3. [HKEY_CLASSES_ROOT\*\shell]
  4. @="notepad"
  5. [HKEY_CLASSES_ROOT\*\shell\notepad]
  6. @="用记事本打开"
  7. [HKEY_CLASSES_ROOT\*\shell\notepad\command]
  8. @="notepad.exe \"%1\""
复制代码
因为我觉得启动一次 regedit.exe 比启动三次 reg.exe 划算。

[ 本帖最后由 tireless 于 2009-3-16 20:07 编辑 ]

TOP

回复 6楼 的帖子

你的这个貌似不是批处理吧,是注册表嘛

必须是reg格式的吧。。
如国该成 ***.cmd  运行后就闪了下,就没有了,故你的这个跟三楼的是一样的

TOP

回复 7楼 的帖子

可以保存为 .bat 或 .cmd。因为 regedit.exe /s "注册表文件",其中的 "注册表文件" 只需满足这两个文件:
1、有后缀
2、文件第一行是 Windows Registry Editor Version 5.00REGEDIT4

参考: http://www.366840202.cn/blog/post/REG2CMD.html

TOP

批处理下用双百分号%%1
  1. reg ADD HKEY_CLASSES_ROOT\.\SHELL\OPEN\COMMAND /ve /d "notepad.exe%%1"
复制代码
命命行下用单百分号%1
  1. reg ADD HKEY_CLASSES_ROOT\.\SHELL\OPEN\COMMAND /ve /d "notepad.exe%1"
复制代码

TOP

返回列表