无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 22739|回复: 70
打印 上一主题 下一主题

[发布] 用批处理实现的wimPE硬盘安装模板【20190916更新】加了uefi判断

    [复制链接]
跳转到指定楼层
1#
发表于 2019-9-14 23:32:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liu_zhenfeng 于 2019-9-16 00:40 编辑

批处理添加bcd菜单项功能来源自http://bbs.wuyou.net/forum.php?mod=viewthread&tid=408477&page=2#pid3752228
在我的电脑(win7x64)上实验成功后这几天修改了一下,用winrar打包成自解包后实现了PE安装模板。

20190916更新:加了uefi判断
if "%boot_mode%" == "UEFI" (bcdedit /set %id1% path \Windows\system32\boot\winload.efi)
uefi判断来自 http://wuyou.net/forum.php?mod=viewthread&tid=413675 bcdedit方案
Win10x64 uefi 模式能够启动女娲工坊win10PEx64 ,其他未测试。




wimPE硬盘安装模板20190915.exe (352.71 KB, 下载次数: 755)


附件里面的boot.sdi、test.wim是空文件。addwim.exe里是打包成64位自解包的addwim.cmd文件。


wim文件同名TXT对应Description项,取首行为菜单标题。如没有同名的txt文件,就取wim文件名为菜单标题



运行后有个是否安装提示(winrar自解压实现)


点是自解压到临时目录后依次运行copywimfiles.cmd、addwim.exe(64位)或addwim.cmd(32位)


看看BCD菜单项


自动生成删除批处理







批处理文件内容:         

copywimfiles.cmd

@echo off
TITLE CopyWimFiles
set aa=0
if /i %SystemDrive% == x: set aa=1
ver|find "5.">nul && set aa=1
if "%aa%" == "1" (cls&echo 不能在PE、XP中运行 &echo.&pause&exit)
::
for /f "delims=" %%i in ('dir/b *.wim')do echo %%~ni>"%temp%\wim"
for /f "delims=" %%i in ('dir/b *.sdi')do echo %%~ni>"%temp%\sdi"
set/p wim=<"%temp%\wim"
set/p sdi=<"%temp%\sdi"
::
if exist "%wim%.txt" (set /p title=<"%wim%.txt" )
if exist "%wim%.txt" (echo %title% >"%temp%\title" )
del %wim%.txt >nul 2>nul
::
md "%SystemDrive%\boot" >nul 2>nul
md "%SystemDrive%\boot\%wim%" >nul 2>nul
del "%SystemDrive%\boot\%wim%\*.wim" >nul 2>nul
del "%SystemDrive%\boot\%wim%\*.sdi" >nul 2>nul
::
copy "%wim%.wim" "%SystemDrive%\boot\%wim%"
del "%wim%.wim"
copy "%sdi%.sdi" "%SystemDrive%\boot\%wim%"
del "%sdi%.sdi"
if exist %windir%\SysWOW64 (start addwim.exe)else (start addwim.cmd)
if exist %windir%\SysWOW64 (del addwim.cmd)else (del addwim.exe)
echo.&echo.&echo 即将关闭窗口&timeout /t 15
del addwim.exe >nul 2>nul
del addwim.cmd >nul 2>nul
del %0



addwim.cmd
@echo off
TITLE 添加BCD启动项
set aa=0
if /i %SystemDrive% == x: set aa=1
ver|find "5.">nul && set aa=1
if "%aa%" == "1" (cls&echo 不能在PE、XP中运行 &echo.&pause&exit)
::
setlocal ENABLEDELAYEDEXPANSION
set /a n=0
set /a current_n=-1
set /a bootmgr_n=-1
for %%h in ({bootmgr},{current}) do (set /a n+=1 &for /f "tokens=1* delims= " %%a in ('bcdedit /enum  %%h') do (set "!n!_%%a=%%b"))
set "boot_mode=-1"
IF defined 2_path ( for %%q in (!2_path!) do (if /i "%%~xq"==".efi" set "boot_mode=UEFI"))
if !boot_mode! equ -1 (IF defined 1_path ( set "boot_mode=UEFI"))
::
set/p wim=<"%temp%\wim"
del "%temp%\wim"
set/p sdi=<"%temp%\sdi"
del "%temp%\sdi"
::
set title=%wim%
if exist "%temp%\title" (set/p title=<"%temp%\title" )
del "%temp%\title" >nul 2>nul
::
if exist "%SystemDrive%\boot\%wim%\id_1" (set/p id_1=<"%SystemDrive%\boot\%wim%\id_1" )
if exist "%SystemDrive%\boot\%wim%\id_2" (set/p id_2=<"%SystemDrive%\boot\%wim%\id_2" )
bcdedit /delete %id_1% /f >nul 2>nul
bcdedit /delete %id_2% /f >nul 2>nul
::
set id1={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffa}
set id2={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffb}
bcdedit /create %id2% /d "%title%" /device
bcdedit /set %id2% ramdisksdidevice partition=%SystemDrive%
bcdedit /set %id2% ramdisksdipath "\boot\%wim%\%sdi%.sdi"
::
bcdedit /create %id1% /d "%title%" /application osloader
bcdedit /set %id1% device ramdisk="[%SystemDrive%]\boot\%wim%\%wim%.wim",%id2%
bcdedit /set %id1% osdevice ramdisk="[%SystemDrive%]\boot\%wim%\%wim%.wim",%id2%
bcdedit /set %id1% path \windows\system32\boot\winload.exe
if "%boot_mode%" == "UEFI" (bcdedit /set %id1% path \Windows\system32\boot\winload.efi)
bcdedit /set %id1% description "%title%"
bcdedit /set %id1% locale zh-CN
bcdedit /set %id1% inherit {bootloadersettings}
bcdedit /set %id1% systemroot \windows
bcdedit /set %id1% detecthal Yes
bcdedit /set %id1% winpe Yes
bcdedit /set %id1% ems no
bcdedit /displayorder %id1% /addlast
echo %id1%>"%SystemDrive%\boot\%wim%\id_1"
echo %id2%>"%SystemDrive%\boot\%wim%\id_2"
::
echo @echo off >"%SystemDrive%\boot\DEL_%wim%.cmd"
echo bcdedit /delete %id1% >>"%SystemDrive%\boot\DEL_%wim%.cmd"
echo bcdedit /delete %id2% >>"%SystemDrive%\boot\DEL_%wim%.cmd"
echo rd /s /q "%SystemDrive%\boot\%wim%" >>"%SystemDrive%\boot\DEL_%wim%.cmd"
echo del "%SystemDrive%\boot\DEL_%wim%.cmd" >>"%SystemDrive%\boot\DEL_%wim%.cmd"
::
echo.&echo.&echo 即将关闭窗口&timeout /t 10 &del %0 &exit

评分

参与人数 4无忧币 +16 收起 理由
5257 + 5 赞一个!
maomihuacha + 1 很给力!
whyme22 + 5
879792799 + 5 很给力!

查看全部评分

2#
发表于 2019-9-15 00:12:30 | 只看该作者
支持一下。
回复

使用道具 举报

3#
发表于 2019-9-15 00:14:20 | 只看该作者
谢谢共享
回复

使用道具 举报

4#
发表于 2019-9-15 07:19:32 来自手机 | 只看该作者
好东西。
回复

使用道具 举报

5#
发表于 2019-9-15 07:41:09 | 只看该作者
好东西,支持一下
回复

使用道具 举报

6#
发表于 2019-9-16 18:19:33 | 只看该作者
小白请问一下楼主,boot.sdi文件是那里来的呢?
我找了一个PE,替换testpe.wim,但最张用不了。可能问题出在BOOT.SDI文件,那个文件我不知道来源

点评

ISO版PE里看看boot目录下有没有,我下载的PE是有这俩关键文件的。 压缩包里的wim、sdi是零字节的空文件,是为了让批处理认名字好添加到BCD启动项。 [attachimg]401140[/attachimg]  详情 回复 发表于 2019-9-16 22:18
回复

使用道具 举报

7#
 楼主| 发表于 2019-9-16 22:18:39 | 只看该作者
本帖最后由 liu_zhenfeng 于 2019-9-16 22:31 编辑
rockup 发表于 2019-9-16 18:19
小白请问一下楼主,boot.sdi文件是那里来的呢?
我找了一个PE,替换testpe.wim,但最张用不了。可能问题出 ...


压缩包里的wim、sdi是零字节的空文件,是为了让批处理认名字好添加到BCD启动项。


ISO版PE里看看boot目录下有没有,我下载的PE是有这俩关键文件的。

???.wim    ???.sdi 名字不必一样, ???.wim 改名叫xxxPE.wim  boot.sdi就叫boot.sdi好了


回复

使用道具 举报

8#
发表于 2019-9-17 08:59:29 | 只看该作者
谢谢楼主,我要下载ISO版的,直接下载*.Wim文件,是不带这文件
回复

使用道具 举报

9#
发表于 2019-9-17 09:14:07 | 只看该作者
感谢分享
回复

使用道具 举报

10#
发表于 2019-9-17 19:58:13 | 只看该作者
太好了,一直在找这样的批处理程序
想问一下,addwim.exe比addwim.cmd多了什么设置?解包看两个批处理是一样一样的

点评

[attachimg]401221[/attachimg] addwim.exe里的addwim.cmd与外面的addwim.cmd什么区别也没有,重点是压成自解压时选64位模块。我一开始用winrar打成自解压缩包提示找不到bcdedit命令,查了下是因默认自解包执行  详情 回复 发表于 2019-9-18 11:14
回复

使用道具 举报

11#
 楼主| 发表于 2019-9-18 11:14:51 | 只看该作者
dxvyi 发表于 2019-9-17 19:58
太好了,一直在找这样的批处理程序
想问一下,addwim.exe比addwim.cmd多了什么设置?解包看两个批处理是一 ...




addwim.exe里的addwim.cmd与外面的addwim.cmd什么区别也没有,重点是压成自解压时选64位模块。我一开始用winrar打成自解压缩包提示找不到bcdedit命令,查了下是因默认自解包执行批处理命令是32位环境,重定向到SysWOW64里面去。想了个办法:将addwim.cmd压缩成64位自解包;用批处理判断是否存在SysWOW64,存在运行addwim.exe不存在运行addwim.cmd 。但这样带来另一个麻烦是每次都要改addwim.cmd再压成addwim.exe。所以改用临时文件传递wim、sdi文件名,平时使用时不需要改批处理内容了。

点评

我在64位环境下没问题,改成用一个Cmd了,以后有问题再改回来  详情 回复 发表于 2019-9-18 19:35
回复

使用道具 举报

12#
发表于 2019-9-18 19:35:37 | 只看该作者
liu_zhenfeng 发表于 2019-9-18 11:14
addwim.exe里的addwim.cmd与外面的addwim.cmd什么区别也没有,重点是压成自解压时选64位模块。我一 ...

我在64位环境下没问题,改成用一个Cmd了,以后有问题再改回来
回复

使用道具 举报

13#
发表于 2019-9-25 21:28:00 | 只看该作者
谢谢共享
回复

使用道具 举报

14#
发表于 2019-12-22 01:21:26 | 只看该作者
太赞了,从2018的帖子看到这,居然已经有成功方案了,谢谢老大的付出,小白我就不客气啦
回复

使用道具 举报

15#
发表于 2020-2-6 11:17:54 | 只看该作者
..........哈
回复

使用道具 举报

16#
发表于 2020-3-10 13:48:08 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-3-10 18:07 编辑

下载试了下楼主的批处理,运行了下,结果直接修改的是C:\boot\BCD,而且指向的也是C盘的C:\boot\TestPE\TestPE.sdi,TestPE.wim也拷贝到了C:\boot\TestPE\TestPE.wim,这显然是不行的。我的C盘是RAMOS,是个内存盘,重启就没有了,怎么能够启动?

估计VHD启动的情况类似,C盘被VHD占据,指向C盘肯定无法启动。

批处理应该给用户自定义选择的权利。

QQ拼音截图20200310134311.png (39.08 KB, 下载次数: 160)

QQ拼音截图20200310134311.png

点评

用choice试了一下,应该可以实现等待几秒默认选%SystemDrive%和手动输入驱动器字母。我还没有完整的思路...  详情 回复 发表于 2020-4-14 19:28
我自己不会写批处理,但是批处理高手可以在这几个命令之前加一段选择的命令,以替换%SystemDrive% md "%SystemDrive%\boot" >nul 2>nul md "%SystemDrive%\boot\%wim%" >nul 2>nul del "%SystemDrive%\boot\%wi  详情 回复 发表于 2020-3-10 22:59
贝莱就是一个一键批处理,从COPY到安装BCD启动项。楼主应该指明不能在PE RAMOS XP环境安装,不能再多EFI分区安装等等。我个人的解决方案是直接修改批处理中%SystemDrive% 全部替换成自己想要的盘符。当然也可以是EFI  详情 回复 发表于 2020-3-10 22:53
回复

使用道具 举报

17#
发表于 2020-3-10 22:53:22 | 只看该作者
liuzhaoyzz 发表于 2020-3-10 13:48
下载试了下楼主的批处理,运行了下,结果直接修改的是C:\boot\BCD,而且指向的也是C盘的C:\boot\TestPE\Tes ...

它其实就是一个一键批处理,从COPY到安装BCD启动项。楼主应该指明不能在PE RAMOS XP环境安装,不能再多EFI分区安装等等。我个人的解决方案是直接修改批处理中%SystemDrive% 全部替换成自己想要的盘符。当然也可以是EFI分区,或者其他隐藏分区。但是前面需要个命令先挂载。
回复

使用道具 举报

18#
发表于 2020-3-10 22:59:00 | 只看该作者
liuzhaoyzz 发表于 2020-3-10 13:48
下载试了下楼主的批处理,运行了下,结果直接修改的是C:\boot\BCD,而且指向的也是C盘的C:\boot\TestPE\Tes ...

我自己不会写批处理,但是批处理高手可以在这几个命令之前加一段选择的命令,以替换%SystemDrive%

md "%SystemDrive%\boot" >nul 2>nul
md "%SystemDrive%\boot\%wim%" >nul 2>nul
del "%SystemDrive%\boot\%wim%\*.wim" >nul 2>nul
del "%SystemDrive%\boot\%wim%\*.sdi" >nul 2>nul
::
copy "%wim%.wim" "%SystemDrive%\boot\%wim%"
del "%wim%.wim"
copy "%sdi%.sdi" "%SystemDrive%\boot\%wim%"
del "%sdi%.sdi"

点评

@echo off :begin choice /t 10 /c:yn /d:y /m:"是否安装到%SystemDrive:~0,1%盘?" if %errorlevel%==2 goto no if %errorlevel%==1 set DriveLetter=%SystemDrive:~0,1% &goto DriveLette :no cls&set/p D  详情 回复 发表于 2020-4-15 16:38
回复

使用道具 举报

19#
发表于 2020-3-11 00:25:13 | 只看该作者
好东西,支持一下
回复

使用道具 举报

20#
发表于 2020-3-11 00:25:35 | 只看该作者
好东西,支持一下
回复

使用道具 举报

21#
发表于 2020-4-5 20:58:08 | 只看该作者
我替换了提示更改了硬件,启动不了,唉。。。

点评

是什么PE?我试下?  详情 回复 发表于 2020-4-5 21:50
回复

使用道具 举报

22#
 楼主| 发表于 2020-4-5 21:50:12 | 只看该作者
zhang9876 发表于 2020-4-5 20:58
我替换了提示更改了硬件,启动不了,唉。。。

是什么PE?我试下?

点评

https://yunpan.360.cn/surl_yxn22vEP2Yh 有时间帮忙试试看,非常感谢  详情 回复 发表于 2020-4-6 19:44
回复

使用道具 举报

23#
发表于 2020-4-6 19:44:23 | 只看该作者
liu_zhenfeng 发表于 2020-4-5 21:50
是什么PE?我试下?

https://yunpan.360.cn/surl_yxn22vEP2Yh     有时间帮忙试试看,非常感谢

点评

我重新测试了一下,还是EFI下提示就是这个,手动用easy bcd添加的是正常的。  详情 回复 发表于 2020-4-7 17:20
已测试,正常启动  详情 回复 发表于 2020-4-7 04:49
回复

使用道具 举报

24#
 楼主| 发表于 2020-4-7 04:49:23 | 只看该作者
zhang9876 发表于 2020-4-6 19:44
https://yunpan.360.cn/surl_yxn22vEP2Yh     有时间帮忙试试看,非常感谢

已测试,正常启动

捕获.JPG (66.54 KB, 下载次数: 187)

捕获.JPG
回复

使用道具 举报

25#
发表于 2020-4-7 17:20:37 | 只看该作者
zhang9876 发表于 2020-4-6 19:44
https://yunpan.360.cn/surl_yxn22vEP2Yh     有时间帮忙试试看,非常感谢

我重新测试了一下,还是EFI下提示就是这个,手动用easy bcd添加的是正常的。

1.jpg (22.62 KB, 下载次数: 162)

1.jpg

2.jpg (67.87 KB, 下载次数: 162)

2.jpg

点评

你这个问题我也偶尔会遇到,真找不到原因,你后来是怎么解决的?  详情 回复 发表于 2020-9-5 11:02
回复

使用道具 举报

26#
 楼主| 发表于 2020-4-14 19:28:02 | 只看该作者
liuzhaoyzz 发表于 2020-3-10 13:48
下载试了下楼主的批处理,运行了下,结果直接修改的是C:\boot\BCD,而且指向的也是C盘的C:\boot\TestPE\Tes ...

用choice试了一下,应该可以实现等待几秒默认选%SystemDrive%和手动输入驱动器字母。我还没有完整的思路...

点评

需要考虑的因素其实挺多的,比如有多个硬盘,一个ssd硬盘,若干个机械硬盘,这样的电脑有不少,如果硬盘是GPT分区,需要考虑指定的esp分区挂载的问题。对于有的电脑根本不需要esp/fat32分区,任何一个分区都  详情 回复 发表于 2020-4-14 21:09
回复

使用道具 举报

27#
发表于 2020-4-14 21:09:38 来自手机 | 只看该作者
liu_zhenfeng 发表于 2020-4-14 19:28
用choice试了一下,应该可以实现等待几秒默认选%SystemDrive%和手动输入驱动器字母。我还没有完整的思路. ...

        需要考虑的因素其实挺多的,比如有多个硬盘,一个ssd硬盘,若干个机械硬盘,这样的电脑有不少,如果硬盘是GPT分区,需要考虑指定的esp分区挂载的问题。对于有的电脑根本不需要esp/fat32分区,任何一个分区都可能是启动分区 ,对于VHD启动的情况也需要考虑,VHD启动的情况原来的真实C盘可能还需要挂载。

点评

抛掉挂载部分还是可以实现的,本人水平不够 只会堆砌现成的“代码” 以下是最近试验部分 @echo off :begin choice /t 10 /c:yn /d:y /m:"是否安装到%SystemDrive:~0,1%盘?" if %errorlevel%==2 goto no if %  详情 回复 发表于 2020-4-14 23:23
回复

使用道具 举报

28#
 楼主| 发表于 2020-4-14 23:23:41 | 只看该作者
本帖最后由 liu_zhenfeng 于 2020-4-15 17:10 编辑




.

回复

使用道具 举报

29#
 楼主| 发表于 2020-4-15 16:38:38 | 只看该作者
本帖最后由 liu_zhenfeng 于 2020-4-15 17:31 编辑
qingyi78 发表于 2020-3-10 22:59
我自己不会写批处理,但是批处理高手可以在这几个命令之前加一段选择的命令,以替换%SystemDrive%

md  ...

@echo off
:begin
choice /t 10 /c:yn /d:y /m:"是否安装到%SystemDrive:~0,1%盘?"
if %errorlevel%==2 goto no
if %errorlevel%==1 set DriveLetter=%SystemDrive:~0,1% &goto DriveLette

:no
cls&set/p DriveLetter=请输入盘符,再按回车键:
echo %DriveLetter%|findstr "^[a-zA-Z]">nul||(echo 输入错误!请重新输入!&timeout /t 5 &goto no)
if not exist %DriveLetter%: (echo %DriveLetter%盘不存在!&timeout /t 5 &goto no)

:DriveLette
echo 安装到%DriveLetter%盘
pause>nul
cls &goto begin

点评

谢谢大神,辛苦啦!  详情 回复 发表于 2020-4-15 17:49
回复

使用道具 举报

30#
发表于 2020-4-15 17:49:18 | 只看该作者
本帖最后由 qingyi78 于 2020-4-15 17:55 编辑
liu_zhenfeng 发表于 2020-4-15 16:38
@echo off
:begin
choice /t 10 /c:yn /d:y /m:"是否安装到%SystemDrive:~0,1%盘?"

谢谢大神,辛苦啦!我自己做了一个简陋的挂载ESP分区到Z盘并安装到Z盘的。只是用了简单的一个命令和替换变量。 install pe esp.exe (395.58 KB, 下载次数: 44)




回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 05:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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