本帖最后由 sunsmile23 于 2023-1-10 21:35 编辑
二、编写加载脚本 加载脚本就是批处理文件,扩展名一般为.cmd,这是个纯文本文件,可以用记事本编写。 脚本要解决两个问题:寻找插件和加载。
先要明确插件的位置。插件可以放在硬盘分区(或U盘)的一个文件夹中,如pe\plugins.
因为有可能放在隐藏分区,所以首先要把所有隐藏分区分配盘符,并显示出来。下面的语句可以达到这个目的: pecmd SHOW -check -1:-1
我们使用一个for循环从后向前(包括U盘)遍历来查找存放插件的文件夹pe\plugins, 查找到后,就调用加载过程LoadPlugins. 注意调用参数"%%U:\pe\plugins"一定要加上英文引号,因为路径可能含有空格。下面的语句因为简单,会把所有分区上面放有pe\plugins的插件都加载。最后不要忘了写上exit,因为后面还要接着写加载过程: for %%U in (Z Y X W VU T S R Q P O N M L K J I H G F E D C ) do ( if exist %%U:\pe\plugins call :LoadPlugins "%%U:\pe\plugins" ) exit
下面是加载过程。调用过程要以英文的冒号开头。过程的最后不要忘了写上goto :eof,因为后面可能还要继续写其他的过程。 :LoadPlugins goto :eof
调用过程主要解决两件事:一是把插件解压到PE系统的某个位置,因为所有插件都是压缩包。二是调用插件中的设置脚本。
因为插件包可能不止一个,我们可以使用下面的语句来遍历所有的插件包(包括子文件夹): for /r %1 %%i in (*.7z,*.rar,*.zip) do ( ) 这里的%1代表前面传入的参数,就是前面找到的插件包的位置,如H:\pe\plugins,注意%1两端不能再用英文引号。里面的%%i代表遍历到的每一个压缩包,可以是7z, rar, zip格式,如H:\pe\plugins\chrome.7z.
对于遍历到的每一个压缩包,可以用下面的语句来解压: "%ProgramFiles%\7-Zip\7z.exe" x "%%i" -y -aos -o"%ProgramFiles%\OutPlugins\%%~ni" %ProgramFiles%是内部定义的一个变量,代表PE系统盘的Program Files. "%ProgramFiles%\7-Zip\7z.exe"代表7z.exe的路径,如果你的PE里面7z.exe不在这儿,就按你的PE里面的路径写。OutPlugins是统一存放插件解压后文件的位置,这个随便你自己设定。%%~ni是压缩包文件名,用作存放解压文件的文件夹名。
下面调用插件(压缩包)里面的设置脚本,即压缩包最顶层路径里面的所有cmd和wcs for /f "delims=" %%a in ('dir "%ProgramFiles%\OutPlugins\%%~ni\*.cmd" /b') do ( PECMD EXEC ^^!^^%ProgramFiles%\OutPlugins\%%~ni\%%a PECMD wait 100 ) %ProgramFiles%\OutPlugins\%%~ni是刚才的解压文件夹,%%a是遍历到的里面的所有cmd脚本。如果你的插件里面不止一个cmd脚本,没法分先后。^^!^^是最小化执行窗口。 for /f "delims=" %%a in ('dir "%ProgramFiles%\OutPlugins\%%~ni\*.wcs" /b') do ( PECMD LOAD %ProgramFiles%\OutPlugins\%%~ni\%%a PECMD wait 100 ) 这里面的意义跟上面的cmd一样,只是调用方式不一样(EXEC/LOAD)。 脚本编写完毕,还是很简单的。整个脚本看起来就是这个样子:
loadplugins.cmd ========================= @echo off rem 设置变量延迟,以便下面 for 循环中给变量赋值 setlocal EnableDelayedExpansion
rem 给隐藏盘分配盘符,以便下面搜索时访问 pecmd SHOW -check -1:-1
rem 寻找插件的盘符 (插件存放文件夹为 pe\plugins、或 petools) for %%U in (Z Y X W V U T S R Q P O N M L K J I H G F E D C ) do ( if exist %%U:\pe\plugins ( rem 找到了,例如 H:\pe\plugins,然后调用子过程,把插件路径作为参数传递 call :LoadPlugins %%U:\pe\plugins rem 找到一份后,其余的盘就不看了 exit ) else if exist %%U:\petools ( call :LoadPlugins %%U:\petools exit ) ) exit
:LoadPlugins rem 参数%1就是前面传入的插件位置,如 H:\pe\plugins rem 本子过程使用了两种 for 循环来遍历磁盘文件 rem for /r %1 %%i in (*.7z) do 支持子文件夹 rem for %%i in (%1\*.cmd) do 不支持子文件夹 for /r %1 %%i in (*.7z,*.rar,*.zip) do (
rem %%i 代表搜索到的每一个压缩文件,如 H:\pe\plugins\chrome.7z, rem 包括子文件夹,如 H:\pe\plugins\basics\FileTools.7z rem 这里 n 指文件名,如 %%~ni 就是 chrome 或 FileTools, 用作存放解压文件的文件夹名 rem 路径 %ProgramFiles%\OutPlugins\%%~ni 就是如 X:\Program Files\OutPlugins\chrome rem 设置为变量 pp, 方便下面各处写路径,因为这个路径有多处使用 rem 注意使用变量延迟后,使用变量的值要用 !pp!, 而不是 %pp% set pp=%ProgramFiles%\OutPlugins\%%~ni
rem 解压到 !pp!。除了 7z.exe、%%i、!pp! 外,其它的是 7z 的解压参数。路径可能含有空格,所以要用双引号 "%ProgramFiles%\7-Zip\7z.exe" x "%%i" -y -aos -o"!pp!"
rem 执行 .cmd 批处理,%%a 代表 !pp! 文件夹里面的每一个 *.cmd, 如 chrome.cmd,!表示隐藏执行 for %%a in ("!pp!\*.cmd") do ( PECMD EXEC !"%%a" PECMD wait 100 )
rem 执行 .wcs 脚本,%%a 代表 !pp! 文件夹里面的每一个 *.wcs, 如 chrome.wcs for %%a in ("!pp!\*.wcs") do ( PECMD LOAD "%%a" PECMD wait 100 ) ) goto :eof =========================
把上面两条双横线之间的内容复制下来,粘贴到记事本中。不过浏览器不知咋回事会吃掉一些空格,所以若是不能正常工作,或者不能按预期工作,要检查一下空格。检查完后,保存为loadplugins.cmd。通用插件加载脚本编写完毕。
编写完后,按照前面所述,加入你的PE中即可。当然,若怕麻烦,你也可以不加进PE中去,把它放在任何地方,硬盘、优盘都行。在你的PE启动后,人工去双击执行也行。实际上,你可以在使用PE的任何时候去执行。灵活、方便。 |