无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3113|回复: 15
打印 上一主题 下一主题

自由程序的快捷方式方式的加载,通过快捷方式来分类

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-26 20:19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
见过一个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 编辑 ]

目录结构.JPG (9.84 KB, 下载次数: 32)

目录结构

目录结构
2#
发表于 2009-11-26 20:54:13 | 只看该作者
仅复制全部棕色字............
回复

使用道具 举报

3#
发表于 2009-11-26 23:27:47 | 只看该作者
太复杂了,会拖慢系统的启动,对追求速度的这种方式不如用LINK一行一行的写,其实也不是很多行,而且每次更新也不用全改了。
回复

使用道具 举报

4#
发表于 2009-11-26 23:29:01 | 只看该作者
不过楼主这心思和这批处理做得真不错,先赞个
回复

使用道具 举报

5#
 楼主| 发表于 2009-11-26 23:59:36 | 只看该作者

回复 #3 潮退潮生 的帖子

呵呵 看来是我的表达不清呀!我这脚本只是实现程序的随加随删,如果对于常用的,当然用LINK直接写了,而且这脚本效率不低,二十个快捷方式也才增加几秒的启动时间(在PECMD.INI中用两DATE命令来计算),目的是为了取代上面说的那种方式的随加随删,修改下就能实现全盘查找已安装程序并建立快捷方式了
回复

使用道具 举报

6#
发表于 2009-11-27 01:43:12 | 只看该作者
原帖由 潮退潮生 于 2009-11-26 23:27 发表
太复杂了,会拖慢系统的启动,对追求速度的这种方式不如用LINK一行一行的写,其实也不是很多行,而且每次更新也不用全改了。



还是不错的,比如多PE时,可以不用逐个修改INI,直接调用这个脚本可共用外置程序与快捷方式

还没试,不过看楼主所述,是个不错的方法,赞一个

不过文中有一点本人可能短路了,LINKS.CMD中却出现调用源CMD的(PECMD LOAD LINKS.CMD),好比TEST.BAT批处理中出现START TEST.BAT,按理说会造成死循环才对啊!

[ 本帖最后由 lanzl 于 2009-11-27 02:28 编辑 ]
回复

使用道具 举报

7#
发表于 2009-11-27 08:14:41 | 只看该作者
这句:FINALDATA.exe的快捷方式复制到   U盘\自由程序\快捷方式\开始菜单\程序\数据恢复\  里

这个手工创建快捷方式并复制到某个地方,pe在不同的环境里调用iso里的这个快捷方式还有用吗?不会盘符错误?
回复

使用道具 举报

8#
 楼主| 发表于 2009-11-27 10:22:49 | 只看该作者
原帖由 lanzl 于 2009-11-27 01:43 发表



还是不错的,比如多PE时,可以不用逐个修改INI,直接调用这个脚本可共用外置程序与快捷方式

还没试,不过看楼主所述,是个不错的方法,赞一个

不过文中有一点本人可能短路了,LINKS.CMD中却出现调 ...


呵呵,当然不会,没看到  :NOTPECMD 上有一句:   GOTO END  吗?它能保证不会出现死循环,去掉就死了。。。

[ 本帖最后由 gosun 于 2009-11-27 10:42 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2009-11-27 10:24:28 | 只看该作者
原帖由 xiao75918 于 2009-11-27 08:14 发表
这句:FINALDATA.exe的快捷方式复制到   U盘\自由程序\快捷方式\开始菜单\程序\数据恢复\  里

这个手工创建快捷方式并复制到某个地方,pe在不同的环境里调用iso里的这个快捷方式还有用吗?不会盘符错误?


这就是这个脚本实现的目的,一个环境下的快捷方式,所有环境下都能用

脚本原理上面忘说了,现在补上。。。。
回复

使用道具 举报

10#
发表于 2009-11-27 10:53:23 | 只看该作者
谢谢分享,保存后再仔细看。
回复

使用道具 举报

11#
发表于 2009-11-27 12:21:31 | 只看该作者
原帖由 gosun 于 2009-11-27 10:22 发表


呵呵,当然不会,没看到  :NOTPECMD 上有一句:   GOTO END  吗?它能保证不会出现死循环,去掉就死了。。。



但是你把PECMD LOAD LINKS.CMD改成PECMD EXEC LINKS.CMD试试
回复

使用道具 举报

12#
发表于 2009-11-27 12:34:06 | 只看该作者
技术含量太高,不是很理解……感谢分享!
回复

使用道具 举报

13#
 楼主| 发表于 2009-11-27 12:47:54 | 只看该作者
原帖由 lanzl 于 2009-11-27 12:21 发表



但是你把PECMD LOAD LINKS.CMD改成PECMD EXEC LINKS.CMD试试


对,如果这样改了就肯定死循环了,因为这样的话,最后的几行PEMCD脚本代码就无法运行了,已经改变了整个脚本的逻辑结构,把这个脚本当做纯批处理来运行了,LOAD的作用就是把LINKS。CMD当作PECMD脚本处理,这样就跳过了脚本中的CMD(就是MS-DOS命令)部分。

这个是混编脚本,只是做个尝试(我改的PE里还有其他的混编脚本,这个是其中一个),看明白了的话,可以改成纯批处理或纯PECMD脚本,但个人认为没有必要,个人觉得这样是比较好的处理方法了,当然,你也把它分成批处理和PECMD两个脚本来写(当时就是想把它们合到一个文件才这样处理的,不会又要想把它们分开吧?)

[ 本帖最后由 gosun 于 2009-11-27 13:02 编辑 ]
回复

使用道具 举报

14#
发表于 2009-11-27 13:10:08 | 只看该作者
好多啊,支持一把,看看
回复

使用道具 举报

15#
 楼主| 发表于 2009-11-27 15:46:32 | 只看该作者
哎,看来没名气发什么都没人看呀!等国考完发个我做的系统维护光盘,现在我同学都在用的
回复

使用道具 举报

16#
发表于 2009-11-27 23:42:54 | 只看该作者
原帖由 lanzl 于 2009-11-27 01:43 发表



还是不错的,比如多PE时,可以不用逐个修改INI,直接调用这个脚本可共用外置程序与快捷方式

还没试,不过看楼主所述,是个不错的方法,赞一个

不过文中有一点本人可能短路了,LINKS.CMD中却出现调 ...

多PE时能通用的复制下里面的LINK也不是很麻烦,不能通用的用上面的命令全搜出来也不是很好啊。开始时我也是如你老金所想,但不完美,现在一般都是复制一份INI文件,再改下改个名就行了,不同的PE加载不同的INI文件,创建不同的快捷方式。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-27 23:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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