hfut 发表于 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好久不登录,已经无效了,联系管理员也没能找回来。

reak 发表于 2015-6-24 20:33:24

超级大神?!!!前排膜拜!

xzf680 发表于 2015-6-24 22:14:31

这个点子强,学习一下,感谢无私奉献!

hfut 发表于 2015-6-24 22:55:08

还有点问题,不能自动创建到目录分类……

x9tian 发表于 2015-6-25 01:03:32

我是来打击楼主的:
楼主的遇到system.exe 是个文件夹 也会创建快捷方式。
明明一个for语句就行了,还用了一线,

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

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


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

for /f"delims=*" %%i in ('dir /a-d/b/s .\*.exe') doPECMD link %desktop%p\%%~ni,%%~fi

nmscl 发表于 2015-6-25 06:03:50

偶不懂这个,学习一下,

lbw2007 发表于 2015-6-25 07:09:52

唉,又该解开我的wim包了……

神器支持一下!

永恒心锁 发表于 2015-6-25 08:00:50

这个不错,支持大神的完善

527104427 发表于 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下载

tzxinqing 发表于 2015-6-25 09:35:47

支持大神的完善
页: [1] 2 3
查看完整版本: 【从此不需编写菜单配置文件!贡献一套原创自动菜单生成脚本】