|
见过一个PE下的自己添加处置程序,并建立相应快捷方式的方法,就是把程序放到相应的目录,如“桌面”“开始菜单”等,但给人一种不爽的感觉,如果一个程序里面有几个.exe,但实际上只有一个是用到的,那就多了几个快捷方式了,这样不是我们想要的效果,并且如果我想在桌面和开始菜单都要快捷方式,不会在这两个地方都复制一份吧?
为了在自己的PE里实现这样的目的,昨天写了个脚本,介绍如下:
开始时忘了说原理了,现在补上。。。。
原理: 在任一win环境下建立好快捷方式后,通过脚本提取它的路径,并修改为当前PE适合的路径建立新的快捷方式,所以调用脚本后相应的快捷方式(PE的桌面、开始菜单等)是能用的,而“U盘\自由程序\快捷方式”里的快捷方式不一定能用
功能:把要使用的程序放到U盘或其他盘的根目录下的“自由程序”文件夹里,进入相应程序的文件夹,为要执行的文件建立快捷方式(在什么系统下建立都没有问题,XP下也行,正常的windows就行),并把快捷方式复制到 “自由程序\快捷方式”下的相应文件夹内,当PE启动并执行本脚本后,就会在相应的地方建立快捷方式。
示例:FINALDATA,要建立的快捷方式为"开始菜单\程序\数据恢复\FINALDATA",做法如下:
(本操作不一定要在PE下完成,所有的windows都行)
1、复制“FINALDATA”文件夹到U盘根目录下的“自由程序”文件夹内,
2、进入U盘\自由程序\FINALDATA ,为FINALDATA.exe和FINALDATA.reg建立快捷方式
3、FINALDATA.exe的快捷方式复制到 U盘\自由程序\快捷方式\开始菜单\程序\数据恢复\ 里,FINALDATA.reg的快捷方式菜单复制到 U盘\自由程序\快捷方式\执行\ 里,当PE启动并执行本脚本后,就会运行FINALDATA.reg注册FINALDATA,并在相应的地方建立了快捷方式。
对非exe格式的程序,快捷方式的图标会是随机的
执行文件夹里面放你的REG、CMD、等的注册文件,就是你的程序执行前要执行的,把快捷方式放里面就行啦!!!“快捷方式”里面放的都要是快捷方式哦!
程序如下,文件名为 LINKS.CMD,脚本为PECMD和MS-DOS格式混编,调用时可直接运行或用PECMD的LOAD命令(推荐)
本脚本在XP SP3 CMD.EXE(5.1.2600) PECMD.EXE(3.6.0930.309)下通过测试,其他环境请自测
如果有什么问题,请跟帖留言
::`脚本开始,此行可不复制
GOTO CMDMODE
_SUB CMDMODE
:CMDMODE
setlocal enabledelayedexpansion
ECHO OFF
CLS&>%TEMP%\LINKS.INI ECHO.
IF %1.==. GOTO NOTPECMD
SET PRODIRNAME=%1
SET LINKSDIR=%PRODIR%\快捷方式
FOR %%K IN (开始菜单 桌面 执行 开机启动 快速启动 发送到 收藏夹 我的文档) DO (
SET FROMDIR=%%K
IF !FROMDIR!.==开始菜单. (SET TODIR=%StartMenu%) ELSE (
IF !FROMDIR!.==桌面. (SET TODIR=%Desktop%) ELSE (
IF !FROMDIR!.==执行. (SET _SETUP=1) ELSE (
IF !FROMDIR!.==快速启动. (SET TODIR=%QuickLaunch%) ELSE (
IF !FROMDIR!.==发送到. (SET TODIR=%SendTo%) ELSE (
IF !FROMDIR!.==开机启动. (SET TODIR=%Startup%) ELSE (
IF !FROMDIR!.==收藏夹. (SET TODIR=%Favorites%) ELSE (
IF !FROMDIR!.==我的文档. SET TODIR=%Personal%
) ) ) ) ) ) )
IF EXIST "%LINKSDIR%\!FROMDIR!" FOR /F "TOKENS=*" %%I IN ('DIR /a /b /S "%LINKSDIR%\!FROMDIR!\*.LNK"') DO (
SET II=%%I
SET II=!II:~13,-4!
FOR /F "TOKENS=1,* DELIMS=\" %%a IN ('ECHO !II!') DO SET LNKPATH=%%b
FOR /F "TOKENS=*" %%J IN ('TYPE "%%I"^|FIND "\"^|FIND "."') DO (
FOR /F "TOKENS=1,* DELIMS=%1" %%A IN ('ECHO %%J') DO (
SET _EXT=%%B
SET _EXT=!_EXT:~-3!
IF NOT !_SETUP!.==1. (
IF /I NOT !_EXT!.==EXE. (
SET /A _ICOID=%RANDOM%%%222
SET _ICON=,,SHELL32.DLL#!_ICOID!
>>%TEMP%\LINKS.INI ECHO LINK !TODIR!\!LNKPATH!,!PRODIR!%%B!_ICON!
) ELSE (
>>%TEMP%\LINKS.INI ECHO LINK !TODIR!\!LNKPATH!,!PRODIR!%%B
)
) ELSE (
IF /I !_EXT!.==REG. (
>>%TEMP%\LINKS.INI ECHO EXEC REGEDIT.EXE /S !PRODIR!\%%B
) ELSE (
>>%TEMP%\LINKS.INI ECHO EXEC @!PRODIR!%%B
)
)
)
)
)
)
GOTO END
:NOTPECMD
ECHO.
ECHO.
ECHO.
ECHO 功能:把要使用的程序放到U盘或其他盘的根目录下的“自由程序”文件夹里,进入相应
ECHO 程序的文件夹,为要执行的文件建立快捷方式(在什么系统下建立都没有问题,XP下也
ECHO 行,正常的windows就行),并把快捷方式复制到 “自由程序\快捷方式”下的相应文件
ECHO 夹内,当PE启动并执行本脚本后,就会在相应的地方建立快捷方式。
ECHO.
ECHO.
ECHO Make By GoSun 2009.11
PECMD LOAD LINKS.CMD
GOTO END
_END
FORX @\自由程序,PRODIR,0,EXEC =!LINKS.CMD 自由程序
TEAM LOAD %TEMP%\LINKS.INI|FILE %TEMP%\LINKS.INI
MESS 加载成功!@加载成功 #OK *500 `这里是完成后的提示信息,可以取消
:END
::`脚本结束,此行可不复制
保存文件名请用 LINKS.CMD
本脚本运行过程会生成临时文件(完成后会删除),如果不想生成临时文件,请把>>%TEMP%\LINKS.INI ECHO替换为PECMD,不过运行效率会降低。
下面符上文件目录结构:
V:\自由程序
V:\自由程序\程序1
V:\自由程序\程序2
V:\自由程序\快捷方式
V:\自由程序\快捷方式\执行
V:\自由程序\快捷方式\桌面
V:\自由程序\快捷方式\开机启动
V:\自由程序\快捷方式\快速启动
V:\自由程序\快捷方式\发送到
V:\自由程序\快捷方式\收藏夹
V:\自由程序\快捷方式\我的文档
V:\自由程序\快捷方式\开始菜单
V:\自由程序\快捷方式\开始菜单\程序
[ 本帖最后由 gosun 于 2009-11-27 10:31 编辑 ] |
|