无忧启动论坛

标题: 用命令给BCD增加一个WIM启动项的技术问题 [打印本页]

作者: lhc0688    时间: 2022-3-27 15:28
标题: 用命令给BCD增加一个WIM启动项的技术问题
本帖最后由 lhc0688 于 2022-5-9 00:29 编辑

已放弃这个方案,本贴废弃。本以为-copy方式会简单一些,实际操作看想法不太符合实际,改为用BOOTICEx64手动添加了。

------------------------------------------------------------
实际测试,好像还是不行
确实创建了 Boot from WIM 引导项,看上去也都正常,但实际引导启动的不是ESP盘上的boot.wim,而是是C盘的系统,而且启动后显示不是当前默认系统,看来这方面技术真是太复杂,搞不定。
用 bcdedit /copy {default} /d "Boot from WIM" 命令生成的:

Element Name Element Value

GUID alias{5b483ea7-add4-11ecb2d1-c554b7150691}
ApplicationDevice [boot]\boot.wim,{ramdiskoptions}
ApplicationPath Windows\system32\boot\winload. efi
Description Boot from WIM
PreferredLocale zh-CN
InheritedObjects {bootoadersettings}...
IsolatedExecutionContext True
AlowedInMemorySettings 35232165
OSDevice[C:]
SystemRoot Windows AssociatedResumeObject (b22b704c-2ca6-11ec-9557-845e3c75994}
NxPolicy Optin
BootMenuPolicy Legacy
WinPEModeTrue
-----------------------------------------------------------------------
用 BOOTICE 添加WIM项生成的

Element Name Element Value

GUID alias{ce4d29cf-4fcd-438f-91ea-95d81f56ba8}
ApplicationDevice [boot]\BOOT.WIM,{ramdiskoptions}
ApplicationPath Windows\system32\boot\winload. efi
Description Boot from WIM
PreferredLocale zh-CN
OsDevice [boot]\BooT. WIM, {ramdiskoptions}
SystemRoot \Windows
DetectKernelAndHal True
WinPEMode True

-----------------------------------------
看来通过copy方式并不会减少工作量,多了很多东西,更复杂。

[attach]498585[/attach]
[attach]498586[/attach]



获取GUID字符串也已经解决:
感谢论坛smss江南一根葱两位老大的高水平代码。

最后是如何挂载ESP盘为 Z:盘,然后复制文件了。这方面还望各位继续赐教。

-------------------------------------------------------------------------------------
经测试,拷贝启动项后,只需下面三个设置命令就可以正常加载引导ESP盘上的boot.wim:

bcdedit -set {d355b3ab-ad8c-11ec-b338-b3781ffaf120} device ramdisk="[boot]\boot.wim,{ramdiskoptions}"
bcdedit -set {d355b3ab-ad8c-11ec-b338-b3781ffaf120} path \Windows\system32\boot\winload.efi
bcdedit -set {d355b3ab-ad8c-11ec-b338-b3781ffaf120} winpe yes
剩下就剩解决获取GUID字符串难题:

1、能否直接把bcdedit /copy {default} /d "Boot from WIM"  命令执行结果传给变量?

比如:

for /F %%i in (bcdedit /copy {default} /d "Boot from WIM") do (set commitid=%%i)  (测试执行出错!)

2、通过输出到文本tt.txt,再获取:

比如:

bcdedit /copy {default} /d "Boot from WIM" > tt.txt
set guid_tmp = type tt.txt:~-3,-38%  (截取倒数第3位开始38位)   (语法有错误,不会写。。。)

请高手指点。

--------------------------------------------------------------------------------------
搜索过论坛上的几个相关帖子,总感觉有点复杂化:

1、主要目的是在当前系统BCD上增加一项“Boot from WIM”,不需要考虑过多其它因素;
2、boot.sdi、boot.wim 文件可以直接通过复制方式放入ESP盘,也不需要考虑过多因素;

基于以上两点,是否可以简化命令?

思路1:直接拷贝生成一项WIM引导项:

bcdedit /copy {WIM模式的参数不知道该怎么写} /d "Boot from WIM"  

bcdedit /copy {default} /d "Boot from WIM"   ------------ 这句可以执行成功,但生成的启动项模式不对;

如果这种方式可行,那应该是最简单的,只需上面这一句命令应该就可以了;

思路2:通过方式1获取生成后的GUID,然后再修改参数:

bcdedit /copy {default} /d "Boot from WIM"  > tt.txt

生成的 tt.txt 里面有:已将该项成功复制到 {d355b3a4-ad8c-11ec-b338-b3781ffaf120}。

是否可以截取字符串给变量,或者直接将结果赋值给变量,不通过 tt.txt文件?

获取GUID后,后面是不是简单设置就可以呢?

--------------------------------------------------------
这个是自动生成的WIM启动项的正确参数

Element Name Element Value
GUID alias { cf94633-7040-43d4-9df9-62c1e9doaed}
ApplicationDevice [ boot]\ BooT. WIM,{ ramdiskoptions}
ApplicationPath Windows\ system32 \ boot winload. efi
Description Boot from WIM
PreferredLocale zh-CN
OSDevice boot\ BooT. WIM, ramdiskoptions}
SystemRoot Windows
NxPolicy Optin
DetectKernelAndHal True
WinPEMode True

-----------------------------------------------------------

知道确切GUID后,是否可以用大致下面的语句完成:

@ECHO OFF

bcdedit  /set {ramdiskoptions} ramdisksdidevice "boot"
bcdedit  /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
bcdedit  -set %ID% device ramdisk="[boot]\boot\boot.wim,{ramdiskoptions}"
bcdedit  -set %ID% osdevice ramdisk="[boot]\boot\boot.wim,{ramdiskoptions}"
bcdedit  -set %ID% path \windows\system32\winload.exe
bcdedit  -set %ID% locale zh-CN
bcdedit  -set %ID% systemroot \windows
bcdedit  -set %ID% detecthal no
bcdedit  -set %ID% winpe yes
bcdedit  -set %ID% testsigning yes
bcdedit  -set %ID% nointegritychecks yes
bcdedit  -set %ID% pae forceenable


。。。

以上思路想请教坛内的高手,解决这一长久困扰的问题,一是想法是否可行,二是代码如何写?

欢迎赐教,先谢谢!
[attach]498557[/attach]




作者: lhc0688    时间: 2022-3-27 15:35
目的是想在新装系统的电脑上,直接生成PE双引导项,方便后期操作;
作者: lhc0688    时间: 2022-3-27 15:38
图片上是用 BOOTICE 直接添加的wim项,添加后什么都不需要改,直接保持就可以;
作者: ylac    时间: 2022-3-27 16:24
学习了
作者: li5539802    时间: 2022-3-27 16:46
学习了!!!
作者: wu733    时间: 2022-3-27 16:53
学习学习
作者: lhc0688    时间: 2022-3-27 17:44
实际测试,拷贝启动项后,只需下面三个设置命令就可以:

bcdedit -set {d355b3ab-ad8c-11ec-b338-b3781ffaf120} device ramdisk="[boot]\boot.wim,{ramdiskoptions}"
bcdedit -set {d355b3ab-ad8c-11ec-b338-b3781ffaf120} path \Windows\system32\boot\winload.efi
bcdedit -set {d355b3ab-ad8c-11ec-b338-b3781ffaf120} winpe yes

作者: 2010laodu    时间: 2022-3-27 18:46
学习中
作者: smss    时间: 2022-3-27 19:27
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=422261
作者: szwp    时间: 2022-3-27 20:00
path不需要
作者: lhc0688    时间: 2022-3-27 20:22
本帖最后由 lhc0688 于 2022-3-27 20:23 编辑
szwp 发表于 2022-3-27 20:00
path不需要

确实。不过我是想按BOOTICE自动生成的默认路径(boot.wim在根目录),所以多写了这句。
看错了,不是 boot.wim,是引导文件,默认生成的好像是exe,不是effi。

作者: oym2016    时间: 2022-3-27 20:26
本帖最后由 oym2016 于 2022-3-27 20:33 编辑

本论詓上 脚本区有现成的. 复制一个供你参考.

pushd "%~dp0"
echo.&echo.
mountvol|find /i "EFI" >nul
if errorlevel 1 (set winload=winload.exe& set sdi_dir=boot) else (set winload=winload.efi &set sdi_dir=efi)
bcdedit| find "{ramdiskoptions}" >nul  
IF ERRORLEVEL 1 goto ramd

cls&echo.&echo.
echo "exist {ramdiskoptions}  mode=%winload% \%sdi_dir%\boot.sdi"
pause
:start
for /f "delims={,} tokens=2" %%a in ('bcdedit -create /d "Windows 11 PE" -application osloader  ') do set ID={%%a}
bcdedit  -set %ID% device ramdisk="[boot]\Sources\WinPE.WIM,{ramdiskoptions}"
bcdedit  -set %ID% osdevice ramdisk="[boot]\Sources\WinPE.WIM,{ramdiskoptions}"
bcdedit  -set %ID% path \windows\system32\boot\%winload%
bcdedit  -set %ID% locale zh-CN
bcdedit  -set %ID% systemroot \windows
bcdedit  -set %ID% detecthal no
bcdedit  -set %ID% winpe yes
bcdedit  -set %ID% testsigning yes
bcdedit  -set %ID% nointegritychecks yes
bcdedit  -set %ID% pae forceenable
bcdedit  -set %ID% bootmenupolicy Legacy
bcdedit  -displayorder %ID% -addlast
goto end

:ramd
cls&echo.&echo.
echo "not exist {ramdiskoptions}  mode=%winload%  \%sdi_dir%\boot.sdi"
pause
bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice "boot"
bcdedit /set {ramdiskoptions} ramdisksdipath \%sdi_dir%\boot.sdi
goto start

:end
echo.&echo.&echo Add-Wim to BCD OK !!! &timeout /t 5 &exit
作者: lhc0688    时间: 2022-3-27 20:28
本帖最后由 lhc0688 于 2022-3-28 10:56 编辑
smss 发表于 2022-3-27 19:27
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=422261

谢谢!这个做成带gui的exe文件,我是想用批处理写个,然后整合成一个自动设置windows运行环境的批处理,一键完成所有设置:


作者: lhc0688    时间: 2022-3-27 20:30
oym2016 发表于 2022-3-27 20:26
本论詓上 脚本区有现成的. 复制一个供你参考.

pushd "%~dp0"

谢谢!我就是看到这个,想能否简化下,用 -copy替代 create。
作者: szwp    时间: 2022-3-27 20:39
感觉复杂化了,sdi和wim可用bcdboot塞引导区
作者: lhc0688    时间: 2022-3-27 20:45
szwp 发表于 2022-3-27 20:39
感觉复杂化了,sdi和wim可用bcdboot塞引导区

意思是不用挂载,直接用bcdboot命令将sdi和wim'拷入esp盘吗?
这样的话,代码要怎么写呢?
作者: szwp    时间: 2022-3-27 20:52
先将path删了试,手机写困难
作者: smss    时间: 2022-3-27 20:53
http://bbs.wuyou.net/forum.php?m ... 642&ordertype=1
作者: wuming520    时间: 2022-3-27 20:54
楼主用用bcdboot即可
作者: wuming520    时间: 2022-3-27 20:54
不需123
作者: qq2348227    时间: 2022-3-27 21:03
花了200元,请教了一位版主,给我搞定了此问题。
作者: szwp    时间: 2022-3-28 06:57
不知道楼主三条设置是怎么测试成功启动的,但不少群友不挂载搞定了,楼主继续加油
作者: szwp    时间: 2022-3-28 11:03
放弃得太快了,关于bcdboot可参考此贴

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=426313


作者: szwp    时间: 2022-3-28 13:13
研究得不够啊。sdi wim都能过去。
作者: wjgyz740526    时间: 2022-3-28 13:53
善用搜索啊,论坛有现成的例子,我也写过
作者: szwp    时间: 2022-3-30 08:11
wuming520 发表于 2022-3-27 20:54
不需123

有群友玩123的
作者: szwp    时间: 2022-4-4 14:53
szwp 发表于 2022-3-27 20:52
先将path删了试,手机写困难

多次强调将path删了,用deletevalue。

作者: ddnflier    时间: 2022-4-4 16:42
正需要,学习一下,谢谢
作者: 9527sss    时间: 2022-5-10 20:35

谢谢分享
作者: lhc0688    时间: 2022-5-20 14:41
szwp 发表于 2022-3-27 20:39
感觉复杂化了,sdi和wim可用bcdboot塞引导区

bcdboot d:\esp

提示:尝试复制启动文件失败。

esp文件夹内只有:D:\ESP\EFI\boot.sdi 一个文件;
作者: szwp    时间: 2022-5-20 15:05
lhc0688 发表于 2022-5-20 14:41
bcdboot d:\esp

提示:尝试复制启动文件失败。

http://bbs.wuyou.net/forum.php?m ... &fromuid=225195

用12楼附件试。
作者: lhc0688    时间: 2022-5-20 17:38
szwp 发表于 2022-5-20 15:05
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=426313&pid=4506818&fromuid=225195
...



也不行,我是在虚拟机里测试的,引导模式选的 EFi;

作者: baosheng00    时间: 2022-5-20 18:34
本帖最后由 baosheng00 于 2022-5-20 18:36 编辑

这个早完成了,看这个合适不?
http://bbs.wuyou.net/forum.php?m ... d=422261&extra=

作者: lhc0688    时间: 2022-5-20 19:22
baosheng00 发表于 2022-5-20 18:34
这个早完成了,看这个合适不?
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=422261&extra=

这个已经看到了,确实做的挺不错,也很方便。不过我折腾这个是想用纯命令行方式,好跟其他好几个整合成一个【系统运行环境配置批处理】(前面也有讲过),包括一键安装相关支持库、工具软件、配置BCD双引导、用户文件夹转移、等等;所以,想用纯命令行方式实现试试。
作者: szwp    时间: 2022-5-21 07:36
lhc0688 发表于 2022-5-20 17:38
也不行,我是在虚拟机里测试的,引导模式选的 EFi;

特意让它失败来避免创建引导项,当然也可以让它显示成功,去修改它创建的引导项。
作者: fdongh    时间: 2024-10-24 10:35


谢谢分享
作者: twx666    时间: 2024-10-24 10:54
学习一下看看。。
作者: mr8246    时间: 2024-10-24 11:24
今天用lightning大神的PE系统,及论坛里另一位大神2011hiboy的bcdedit添加wim代码,弄了个一键恢复的脚本
D:\boot文件夹下包含boot_re.wim,boot_re.bat,boot.sdi,一键还原.bat,002.wim(备份的镜像)

在Windows下点击一键还原.bat,就重启进入PE开始还原了

PECMD.ini脚本(boot_re.wim)
DISK  ,,,1,U:,0x6
EXEC d:\boot\boot_re.bat

一键还原.bat脚本
@echo off
bcdedit /timeout 2
for /f "delims={,} tokens=2" %%a in ('bcdedit /create /d "PE" -application osloader') do set Guid={%%a}
bcdedit /set %Guid% device ramdisk="[d:]\boot\boot_re.wim,{ramdiskoptions}"
bcdedit /set %Guid% osdevice ramdisk="[d:]\boot\boot_re.wim,{ramdiskoptions}"
bcdedit /set %Guid% path \windows\system32\boot\winload.exe
bcdedit /set %Guid% locale zh-CN
bcdedit /set %Guid% systemroot \windows
bcdedit /set %Guid% bootmenupolicy Legacy
bcdedit /set %Guid% detecthal Yes
bcdedit /set %Guid% winpe Yes
bcdedit /default %Guid%
bcdedit /displayorder %Guid% -addlast
bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=d:
bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
echo @echo off>boot_re.bat
echo format c: /q /u /y>>boot_re.bat
echo Dism /Apply-Image /ImageFile:d:\boot\002.wim /Index:1 /ApplyDir:C:>>boot_re.bat
echo shutdown -r -t 0 >>boot_re.bat
shutdown -r -t 0













欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3