标题: [注册表类] 名称的更改(我的电脑更改为Computer) [打印本页]
作者: ibm 时间: 2008-9-24 12:26 标题: 名称的更改(我的电脑更改为Computer)
这个批处理文件的设计目的,是实现更改
“A我的电脑 B网上邻居 C控制面板 D打印机 E我的文档 F回收站 G拨号网络 H浏览器 I历史”
的名称和图标的提示信息,但有错误,不能正常运行,请大家帮忙改正,谢谢!-
- SETLOCAL ENABLEDELAYEDEXPANSION
- :BAT2MENUM
- @REM 名称的更改
- @ECHO OFF
- ECHO.
- ::此处应改为自己系统的类型XP、Vista、2000等
- set SYSTEM=Vista
- IF /I "%SYSTEM%"=="Vista" (
- SET Localiz= ) ELSE ( SET Localiz=Rem )
- :ChB2MMTmp
- ECHO 名称的更改,多个更改项用空格分隔
- ECHO.
- ECHO 序 1名称 2图标提示信息
- ECHO A 1我的电脑 2我的电脑图标提示
- ECHO B 1网上邻居 2网上邻居
- ECHO C 1控制面板 2控制面板
- ECHO D 1打印机 2打印机
- ECHO E 1我的文档 2我的文档
- ECHO F 1回收站 2回收站
- ECHO G 1拨号网络 2拨号网络
- ECHO H 1浏览器 2浏览器
- ECHO I 1历史 2历史
- ECHO 例:A1-Computer A2-显示连接到此计算机的驱动器和硬件 C1-ControlPanel C2-控制面板 F1-RecycleBin F2-回收站 H1-Browser H2-浏览器
- ECHO.
- :ECHO 行号2 && ECHO %B2MMTmp% && PAUSE
- SET B2MMTmp=
- SET /P B2MMTmp=[回车]:跳过,请输入:
- IF /I "%B2MMTmp%"=="" GOTO END2MENUM
- ::去掉全角空格
- SET "B2MMTmp=%B2MMTmp: = %"
-
- MKDIR BAT2MENUM
- for %%i in ( %B2MMTmp% ) do (
- SET TE=%%i
- IF "!TE:~2,1!" NEQ "-" ( GOTO ERRORB2MMTmp )
- IF /I "!TE:~0,1!"=="A" (
- SET TEA={20D04FE0-3AEA-1069-A2D8-08002B30309D}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\我的电脑.reg /Y
- echo ; 我的电脑标识,可作恢复之用 >> BAT2MENUM\我的电脑.reg
- )
- IF /I "!TE:~0,1!"=="B" (
- SET TEA={208D2C60-3AEA-1069-A2D7-08002B30309D}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\网上邻居.reg /Y
- echo ; 网上邻居标识,可作恢复之用 >> BAT2MENUM\网上邻居.reg
- )
- IF /I "!TE:~0,1!"=="C" (
- SET TEA={21EC2020-3AEA-1069-A2DD-08002B30309D}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\控制面板.reg /Y
- echo ; 控制面板标识,可作恢复之用 >> BAT2MENUM\控制面板.reg
- )
- IF /I "!TE:~0,1!"=="D" (
- SET TEA={2227A280-3AEA-1069-A2DE-08002B30309D}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\打印机.reg /Y
- echo ; 打印机标识,可作恢复之用 >> BAT2MENUM\打印机.reg
- )
- IF /I "!TE:~0,1!"=="E" (
- SET TEA=450D8FBA-AD25-11D0-98A8-0800361B1103}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\我的文档.reg /Y
- echo ;我的文档标识,可作恢复之用 >> BAT2MENUM\我的文档.reg
- )
- IF /I "!TE:~0,1!"=="F" (
- SET TEA={645FF040-5081-101B-9F08-00AA002F984E}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\回收站.reg /Y
- echo ; 回收站标识,可作恢复之用 >> BAT2MENUM\回收站.reg
- )
- IF /I "!TE:~0,1!"=="G" (
- SET TEA={992CFFA0-F557-101A-88EC-00DD010CCC48}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\拨号网络.reg /Y
- echo ; 拨号网络,可作恢复之用 >> BAT2MENUM\拨号网络.reg
- )
- IF /I "!TE:~0,1!"=="H" (
- SET TEA={BFB23B42-E3F0-101B-8488-00AA003E56F8}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\浏览器.reg /Y
- echo ; 浏览器标识,可作恢复之用 >> BAT2MENUM\浏览器.reg
- )
- IF /I "!TE:~0,1!"=="I" (
- SET TEA={FF393560-C2A7-11CF-BFF4-444553540000}
- reg export HKCR\CLSID\!TEA! BAT2MENUM\历史.reg /Y
- echo ; 历史标识,可作恢复之用 >> BAT2MENUM\历史.reg
- )
- IF "!TE:~1,1!" EQU "1" ( REG ADD HKCR\CLSID\!TEA! /VE /T REG_SZ /D "!TE:~3!" /F )
- Rem 当是Vista系统时,Localiz的值是“::”,即不执行下面这行代码。
- %Localiz% IF "!TE:~1,1!" EQU "1" ( REG ADD HKCR\CLSID\!TEA! /V LocalizedString /T REG_EXPAND_SZ /D "!TE:~3!" /F )
- IF "!TE:~1,1!" EQU "2" ( REG ADD HKCR\CLSID\!TEA! /V Infotip /T REG_EXPAND_SZ /D "!TE:~3!" /F )
- ) && GOTO EB2MMTmp
- :ERRORB2MMTmp
- ECHO.
- ECHO.
- COLOR 0C
- ECHO 错误,请重新输入:
- ECHO.
- PAUSE
- ECHO.
- COLOR 1F
- GOTO ChB2MMTmp
- :EB2MMTmp
- :END2MENUM
- ECHO.
- ECHO.
- ECHO 操作成功完成……
- PAUSE 1>NUL
- CLS
- exit
复制代码
==============================================================
我又作了一段简单的代码,具备上面例子的框架,也是不循环,帮我分析一下,
代码少了很多,容易找到问题:-
-
-
- SETLOCAL ENABLEDELAYEDEXPANSION
- :Bat2MenuM
- ECHO OFF
- SET B2MMTmp=A1 B1 C2 D2 E1 F1 A3
-
- for %%i in ( !B2MMTmp! ) do (
- SET TE=%%i
- ECHO 跟踪行号6 && ECHO TE=!TE!=!TE:~0,1! && PAUSE
- IF /I "!TE:~0,1!"=="A" (
- echo TE=!TE:~0,1!=A
- ECHO 跟踪行号7 && ECHO TE=!TE!=!TE:~0,1! && PAUSE
- ) else (
- IF /I "!TE:~0,1!"=="B" (
- echo TE=!TE:~0,1!=B
- ECHO 跟踪行号8 && ECHO TE=!TE!=!TE:~0,1! && PAUSE
- ) else ( GOTO ERRORB2MMTmp ) )
- ECHO 跟踪行号15 && ECHO TE=!TE!=!TE:~0,1! && PAUSE
- IF "!TE:~1,1!" EQU "1" (
- echo AA ) else (
- IF "!TE:~1,1!" EQU "2" (
- echo BB )
- GOTO ERRORB2MMTmp)
- ECHO 跟踪行号16 && ECHO 循环变量值=%%i && PAUSE
- ) && GOTO EB2MMTmp
- :ERRORB2MMTmp
- COLOR 0C
- ECHO 错误,请重新输入:
- ECHO.
- PAUSE
- ECHO.
- GOTO ChB2MMTmp
- :EB2MMTmp
- ECHO.
- ECHO.
- ECHO 操作成功完成……
- PAUSE 1>NUL
复制代码
%%i的取值,得到A1后就会退出,为什么不循环取B1?
[ 本帖最后由 ibm 于 2008-9-25 17:47 编辑 ]
作者: Batcher 时间: 2008-9-24 13:24
有啥样的错误?
作者: ibm 时间: 2008-9-24 13:48
For循环不正常
作者: zqz0012005 时间: 2008-9-24 22:26
复合语句内部的注释应该用rem而不能用::
Label的标记冒号:会导致for语句中断,从而缺少语句结束的反括号),出现语法错误
=============================================================================================
以上为错误言论!
=============================================================================================
应该是:
for语句内部使用goto跳转会导致for循环中断,立即退出循环。
与for语句内部有无Label标签无关。for内部可以使用::作注释
[ 本帖最后由 zqz0012005 于 2008-10-7 19:18 编辑 ]
作者: gfwlxx 时间: 2008-9-25 00:26
挺有意思 呵呵
作者: pusofalse 时间: 2008-9-25 02:54
看下这里面:HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
我的电脑、回收站、网上邻居等系统文件夹的名称都在这里存储着。
作者: ibm 时间: 2008-9-25 17:14 标题: 回复 4楼 的帖子
谢谢版主的回复!
原来是Label的标记的问题,有什么解决办法吗?
我去掉了Label的标记,但为什么还是不行?
我修改了帐子,其中第一段代码太长,不好读,第二段简单了许多,问题依旧,循环变量取第一次值后就退出循环体了,这是为什么?
[ 本帖最后由 ibm 于 2008-9-25 17:50 编辑 ]
作者: ibm 时间: 2008-9-25 17:29 标题: 回复 6楼 的帖子
我的系统是Vista,没有MUICache项
作者: Batcher 时间: 2008-9-25 19:42 标题: 回复 8楼 的帖子
建议在顶楼把自己的系统环境一次性描述清楚
作者: zqz0012005 时间: 2008-9-25 20:10
你这个写法太烂了,注意规范
没兴趣看完,分析起来好吃力,貌似楼主把简单问题复杂化了
不如我自己写一个
作者: ibm 时间: 2008-9-26 19:53 标题: 回复 10楼 的帖子
接受版主的批评,恳请版主能帮我重写一个。
目的:实现名称和图标提示内容的更改:
我的电脑 网上邻居 控制面板 打印机 我的文档 回收站 拨号网络 浏览器 历史
例如:在Vista下,桌面里“计算机”图标改名为“Computer ”,
鼠标放在该图标上的提示:“显示连接到此计算机的驱动器和硬件”,更改为“我的电脑”,
图标的名字和提示要求用键盘输入,
用户可以修改也可不修改这些信息,
可以只修改图标的名字不修改图标的提示,反之也可以,
还要有推荐值,下面即是推荐值:
名称 图标提示
我的电脑 Computer Computer我的电脑
网上邻居 Network Network网上邻居
控制面板 ControlPanel ControlPanel控制面板
打印机 Printer Printer打印机
我的文档 MyDocuments MyDocuments我的文档
回收站 RecycleBin RecycleBin回收站
拨号网络 DiallingTone DiallingTone拨号网络
浏览器 Browser Browser浏览器
历史 Recent Recent历史
因为这只是一组代码中的一部分,所以要求多了点,
退请版主的帮助,非常感谢!
[ 本帖最后由 ibm 于 2008-9-26 20:27 编辑 ]
作者: zqz0012005 时间: 2008-9-27 01:29
调整了代码结构,使用函数形式。并给了一个修改示例(modifyA)复制代码
作者: ibm 时间: 2008-9-27 21:31 标题: 回复 12楼 的帖子
对版主的帮助感激不尽,虽然和我的要求还不太相同,但我稍加修改就可以了,
谢谢版主,版主真是大好人!
作者: zqz0012005 时间: 2008-9-27 23:11
其实如果程序限制用户每次只能修改一项,可以提高工作效率:不需要for循环,不需要if判断首字母。大致结构如下:- :main
- ...
- :input
- set B2MMTmp=
- SET /P B2MMTmp=请输入(直接回车返回主菜单):
- if not defined B2MMTmp (goto main) else SET "B2MMTmp=%B2MMTmp: = %"
- (echo %B2MMTmp%|findstr /i "^[a-z][1-2]-" >nul) && (goto modify%B2MMTmp:~,1%) || (echo 输入不正确,请重新输入!& goto input)
-
- :modifyA
- ...
- goto input
-
- :modifyB
- ...
- goto input
-
- ...
复制代码
作者: ibm 时间: 2008-10-2 19:26 标题: 回复 14楼 的帖子
谢谢版主,
我需要的这段代码,只是一组代码中的一小段,
可以由用户分段执行,也可以自动执行全部代码,
当分段执行时可以不循环,每次修改一项,
但当自动执行全部代码时,就会停在这里一项项的输入,不是我设计的初衷。
12楼的代码,我稍加修改,加入一个推荐值,完全满足我的要求了。
惟一的缺点是
echo ; 我的电脑标识>>我的电脑_bak.reg
这段代码补充进《我的电脑_bak.reg》里面,会在最后一行显示乱码,
虽然问题解决了:
type bak.reg > bak.txt
del /q bak.ret
echo ......>>bak.txt
ren bak.txt bak.reg
但好像太麻烦了,还没找到更好的解决办法。
再次感谢版主的帮助!
[ 本帖最后由 ibm 于 2008-10-2 19:43 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |