无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 12708|回复: 32

[原创] 【从此不需编写菜单配置文件!贡献一套原创自动菜单生成脚本】

    [复制链接]
发表于 2015-6-24 20:29:22 | 显示全部楼层 |阅读模式
本帖最后由 hfut 于 2015-6-24 20:43 编辑

制作PE时,桌面、开始菜单、任务栏等需要生成工具菜单以方便调用。传统方法都是手工逐条编辑INI菜单配置文件,然后用 PECMD LOAD XXX.INI的命令执行并生成菜单快捷方式。这种方法工作量大,极易出错,偶尔调整了一个软件时,如果忘记同步编辑菜单的话,铁定会出错,无法生成对应的菜单项!

从此以后,调整软件只需把程序直接拷贝到工具目录的对应子目录中就行了,脚本会自动寻找 EXE 并按对应的子目录分类生成菜单配置,无需手工改INI文件!

建议一个工具只有一个EXE,如果有多个的话,建议打包成一个EXE,以免生成无关菜单项。

因此就有了制作一个自动生成菜单配置文件的想法。以下代码已经测试通过,瞬间生成菜单配置文件。
实际使用时,可先隐藏执行这个菜单配置生成脚本,然后再加载它生成的配置文件。
===========以下是代码===========
@echo off
rem PE 自动生成工具菜单配置文件脚本
rem By 深山红叶
rem 从此不用逐条编写菜单了!
rem 声明:自由,谢绝捆绑、给浏览器改主页、加尾巴的人使用!
rem
rem 1.请将本脚本文件在工具目录的顶层目录(比如 \PETOOLS);
rem 2.请将工具程序分门别类存放在工具子目录,注意程序文件名务必用生成菜单时要用的名称,比如“Diskgenu.exe”建议改成“磁盘精灵.exe”,以方便生成菜单后的菜单项直接拥有直观的名称。

rem 以下是效果演示,可放在某个目录下运行测试
rem 先清除临时文件,方便测试时避免重复生成内容
del %TEMP%\*.ini
setlocal EnableDelayedExpansion
rem 以下临时文件扩展名故意用INI,以方便以上一条命令清除。PE下由于临时目录下不太可能存在这类文件,因此清除临时文件的命令可不要。此仅为测试方便考虑。
FOR /F "delims==" %%i IN ('dir *.exe /s /b') DO @echo %%~fi>>%TEMP%\~1.ini
FOR /F "delims==" %%i IN ('dir *.exe /s /b') DO @echo %%~ni>>%TEMP%\~2.ini
set n=0
for /f "tokens=*" %%a in (%TEMP%\~1.ini) do (set /a n+=1
set a!n!=%%a
set x=!n!)
set n=0
for /f "tokens=*" %%b in (%TEMP%\~2.ini) do (set /a n+=1
set b!n!=%%b)
for /l %%c in (1,1,%x%) do (if defined b%%c echo LINK 路径变量\!b%%c!,!a%%c!>>%TEMP%\TOOLS.INI)
rem 上一行为测试直观,使用了“路径变量”替代真正 变量名。实际使用时要改成以下类似的内容,下例用的是桌面的路径变量即%Desktop%
rem for /l %%c in (1,1,%x%) do (if defined b%%c echo LINK %Desktop%\!b%%c!,!a%%c!>>%TEMP%\TOOLS.INI)

rem 以下命令是方便测试,用记事本打开菜单配置内容。实际使用时可改成(rem 注释标志不要!):
rem PECMD LOAD %TEMP%\TOOLS.INI
Notepad %TEMP%\TOOLS.INI

========代码结束=======

这里放出来,供大家测试并指正,以便进一步完善。

另,以前本人的emca的ID好久不登录,已经无效了,联系管理员也没能找回来。

点评

直接用PECMD脚本不是更简单吗? 而且效率非常高,批处理根本没法比 FORX /S %CurDir%\*,&&f,, { FNAM &&s=%&f% FEXT &&u=%&f% FIND $%&s%<>, FIND $%   发表于 2015-6-25 08:27

评分

参与人数 7无忧币 +35 收起 理由
熊猫专用 + 5 很给力!
nytc006 + 5 赞一个!
zhczf + 5 赞一个!
lbw2007 + 5 赞一个!
xzf680 + 5 赞一个!
reak + 5 赞一个!
糊涂 + 5 感谢分享

查看全部评分

发表于 2015-6-24 20:33:24 | 显示全部楼层
超级大神?!!!前排膜拜!
回复

使用道具 举报

发表于 2015-6-24 22:14:31 | 显示全部楼层
这个点子强,学习一下,感谢无私奉献!
回复

使用道具 举报

 楼主| 发表于 2015-6-24 22:55:08 | 显示全部楼层
还有点问题,不能自动创建到目录分类……
回复

使用道具 举报

发表于 2015-6-25 01:03:32 | 显示全部楼层
我是来打击楼主的:
楼主的遇到  system.exe 是个文件夹 也会创建快捷方式。
明明一个for  语句就行了,还用了一线,

生存配置菜单,然后自动挂载

  1. @echo off
  2. rem bbs.wuyou.net ^@ BY x9tian
  3. (for /f  "delims=*" %%i in ('dir /a-d/b/s .\*.exe') do (
  4.        
  5.         echo.link %desktop%p\%%~ni,%%~fi
  6. ))>.\test.ini
  7. pecmd load .\test.ini && del /a .\test.ini
复制代码


菜单二: 鬼都不生存一筒直截创 快键

  1. for /f  "delims=*" %%i in ('dir /a-d/b/s .\*.exe') do  PECMD link %desktop%p\%%~ni,%%~fi
复制代码

点评

感谢大神的分享! 抛砖引玉果然是好,哈哈!  详情 回复 发表于 2015-6-25 12:00
回复

使用道具 举报

发表于 2015-6-25 06:03:50 | 显示全部楼层
偶不懂这个,学习一下,
回复

使用道具 举报

发表于 2015-6-25 07:09:52 | 显示全部楼层
唉,又该解开我的wim包了……

神器支持一下!
回复

使用道具 举报

发表于 2015-6-25 08:00:50 来自手机 | 显示全部楼层
这个不错,支持大神的完善
回复

使用道具 举报

发表于 2015-6-25 08:24:55 | 显示全部楼层
本帖最后由 527104427 于 2015-6-26 05:41 编辑

直接用PECMD脚本不是更简单吗? 而且效率非常高,批处理根本没法比

FORX /S   %CurDir%\*,&&f,,
{
        FNAM &&s=%&f%
        FEXT &&u=%&f%
        IFEX %&f%\,! FIND $%&s%<>, FIND $%&u%=exe, LINK %desktop%\%s%,%&f%
}


PETOOL.WCS下载

点评

PETOOL.WCS如何使用?  详情 回复 发表于 2023-12-22 22:58
效率确实是高!感谢大神的分享! 抛砖引玉果然是好,哈哈! 问题又来了,当前目录下,我只希望处理部分若干个文件夹,因为有些文件夹是不需要生成菜单的,怎么破?  详情 回复 发表于 2015-6-25 12:01
完善下: 这样不怕 EXE结尾的文件夹。  详情 回复 发表于 2015-6-25 09:45
回复

使用道具 举报

发表于 2015-6-25 09:35:47 | 显示全部楼层
支持大神的完善
回复

使用道具 举报

发表于 2015-6-25 10:14:07 | 显示全部楼层
到底哪种方法更好啊?
回复

使用道具 举报

发表于 2015-6-25 11:03:41 来自手机 | 显示全部楼层
527104427 发表于 2015-6-25 08:24
直接用PECMD脚本不是更简单吗? 而且效率非常高,批处理根本没法比

FORX /S   %CurDir%\*,&&f,,

我能说有二年半没碰过 PECMD了么,  现在的PECMD我都敢脚自己落伍了
回复

使用道具 举报

 楼主| 发表于 2015-6-25 12:00:17 | 显示全部楼层
x9tian 发表于 2015-6-25 01:03
我是来打击楼主的:
楼主的遇到  system.exe 是个文件夹 也会创建快捷方式。
明明一个for  语句就行了, ...

感谢大神的分享!
抛砖引玉果然是好,哈哈!
回复

使用道具 举报

 楼主| 发表于 2015-6-25 12:01:46 | 显示全部楼层
527104427 发表于 2015-6-25 08:24
直接用PECMD脚本不是更简单吗? 而且效率非常高,批处理根本没法比

FORX /S   %CurDir%\*,&&f,,

效率确实是高!感谢大神的分享!
抛砖引玉果然是好,哈哈!

问题又来了,当前目录下,我只希望处理部分若干个文件夹,因为有些文件夹是不需要生成菜单的,怎么破?

点评

这就需要你提出条件,什么情况下是不需要生成的? 比如,文件名为什么开头  详情 回复 发表于 2015-6-25 12:05
回复

使用道具 举报

发表于 2015-6-25 12:05:50 | 显示全部楼层
hfut 发表于 2015-6-25 12:01
效率确实是高!感谢大神的分享!
抛砖引玉果然是好,哈哈!

这就需要你提出条件,什么情况下是不需要生成的?

比如,文件名为什么开头

点评

比如: AAA BBB CCC 现在只想生成 AAA 和BBB 的目录下程序的菜单。  详情 回复 发表于 2015-6-25 12:38
回复

使用道具 举报

 楼主| 发表于 2015-6-25 12:38:48 | 显示全部楼层
本帖最后由 hfut 于 2015-6-25 13:03 编辑
527104427 发表于 2015-6-25 12:05
这就需要你提出条件,什么情况下是不需要生成的?

比如,文件名为什么开头


比如:
AAA
BBB
CCC

现在只想生成 AAA 和BBB 的目录下程序的菜单。

当然,可以考虑在需要生成菜单的子目录下存放一个包含自动生成脚本的INI文件,由一个总的配置文件分别LOAD调用这些子目录中的配置。
主要目的是根据程序的目录分类,创建同名分类的菜单类别。比如下例的“磁盘工具”分类。否则所有类别的程序快捷方式全聚在一块,不方便查找。
比如:分类菜单目录”磁盘工具“添加一个MENU.INI,内容如下:
FORX /S   %CurDir%\*,&&f,,
{
        FNAM &&s=%&f%
        FEXT &&u=%&f%
        FIND $%&s%<>, FIND $%&u%=exe, LINK %quicklaunch%\磁盘工具\%s%,%&f%
}
然后,在LOAD.INI中调用上述脚本配置:LOAD %Curdir%\磁盘工具\MENU.INI

点评

不用这么麻烦,我给你写一段吧 PETOOLS.WCS:  详情 回复 发表于 2015-6-25 18:25
回复

使用道具 举报

发表于 2015-6-25 14:08:12 来自手机 | 显示全部楼层
527104427 发表于 2015-6-25 12:05
这就需要你提出条件,什么情况下是不需要生成的?

比如,文件名为什么开头

膜拜五大,  
五大呀能出个什么pecmd的 经验笔记不。
这可是民生工程呀!  
我现在打开PECMD看里面的说明看得头都晕, 感觉现在的说明文档看不太明白半,比老九写的多了

点评

这个,还真没有啥笔记经验的。 我也是啃着PECMD的说明,一步一步实现自己想要的功能。不懂的多问问M大吧,程序是他写的,他就是一部活字典。。。  详情 回复 发表于 2015-6-25 18:28
回复

使用道具 举报

发表于 2015-6-25 18:25:17 | 显示全部楼层
本帖最后由 527104427 于 2015-6-26 05:40 编辑


不用这么麻烦,我给你写一段吧。直接在网站插入代码有点问题,还是打包上来算了。

PETOOLS.WCS:

PETOOLS.rar

1.18 KB, 下载次数: 300, 下载积分: 无忧币 -2

点评

再次感谢大神! 代码非常的好用! 但在具体的实施上,今天试了多种方案,最终还是采用了“总-分”的方式,即在总脚本中调用各目录中的分脚本。当然,大神的脚本不管是在总脚本还是在分脚本上使用都是极好的,主要  详情 回复 发表于 2015-6-25 21:56
回复

使用道具 举报

发表于 2015-6-25 18:28:18 | 显示全部楼层
x9tian 发表于 2015-6-25 14:08
膜拜五大,  
五大呀能出个什么pecmd的 经验笔记不。
这可是民生工程呀!  

这个,还真没有啥笔记经验的。

我也是啃着PECMD的说明,一步一步实现自己想要的功能。不懂的多问问M大吧,程序是他写的,他就是一部活字典。。。
回复

使用道具 举报

发表于 2015-6-25 20:46:51 | 显示全部楼层
深山红叶回来了!膜拜。
你的工具箱我用过很多版。你的故事也看了一些。
回复

使用道具 举报

发表于 2015-6-25 20:59:18 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

 楼主| 发表于 2015-6-25 21:56:36 | 显示全部楼层
527104427 发表于 2015-6-25 18:25
不用这么麻烦,我给你写一段吧。直接在网站插入代码有点问题,还是打包上来算了。

PETOOLS.WCS:

再次感谢大神!
代码非常的好用!
但在具体的实施上,今天试了多种方案,最终还是采用了“总-分”的方式,即在总脚本中调用各目录中的分脚本。当然,大神的脚本不管是在总脚本还是在分脚本上使用都是极好的,主要是看自己希望整体架构是完全一体化还是总分式,决定是否灵活拆分脚本功能。
为什么要这么做呢?
主要是方便维护。因为我们可能除了创建菜单外,还需要对个别程序进行个性化处理,比如注册个DLL右键看图、添加个文件关联什么的,等等,以前各大侠们都是放在总脚本中,但有时可能维护起来因条目太多而比较麻烦;另外,我们日后可能会经常对各目录中的文件进行调整。因此,将脚本拆分到各个子目录中,对于日后维护会有极大便利,动了哪个目录中的内容,则同步打开这个目录中的脚本就行了,内容都不多,一目了然,想出错都难,即使出错也不会影响全局。
回复

使用道具 举报

发表于 2015-6-25 22:15:08 | 显示全部楼层
     留下这代码,以后有用。
回复

使用道具 举报

发表于 2015-6-25 22:28:09 来自手机 | 显示全部楼层
不错!五大威武
回复

使用道具 举报

 楼主| 发表于 2015-6-26 07:13:48 | 显示全部楼层
实测中发现,有些程序是不能改名的,改名会导致运行异常,比如WPS的组件et.exe等等。此时可在分脚本里面加入针对快捷方式重命令的命令;还有些程序目录中存在一些不需用户直接调用的EXE文件,可添加删除其快捷方式命令。比如:
FILE %desktop%\et.lnk>>WPS电子表格.lnk  //重命令快捷方式
FILE %desktop%\wxy.lnk   //删除个别无用的快捷方式
幸好这种情况非常少。
回复

使用道具 举报

发表于 2015-12-17 23:18:31 | 显示全部楼层
向深山红叶emca前辈致敬!
回复

使用道具 举报

发表于 2015-12-18 22:55:39 | 显示全部楼层
向热心助人的五大致敬!
回复

使用道具 举报

发表于 2019-5-18 14:29:08 | 显示全部楼层
向深山红叶emca前辈致敬!
回复

使用道具 举报

发表于 2023-11-25 14:00:57 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2023-11-25 20:57:28 | 显示全部楼层
        很给力!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 21:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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