这个批处理文件的设计目的,是实现更改
“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 编辑 ] |