无忧启动论坛

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

[已解决] 用命令给BCD增加一个WIM启动项的技术问题

[复制链接]
跳转到指定楼层
1#
发表于 2022-3-27 15:28:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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方式并不会减少工作量,多了很多东西,更复杂。






获取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


。。。

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

欢迎赐教,先谢谢!




2#
 楼主| 发表于 2022-3-27 15:35:33 | 只看该作者
目的是想在新装系统的电脑上,直接生成PE双引导项,方便后期操作;
回复

使用道具 举报

3#
 楼主| 发表于 2022-3-27 15:38:27 | 只看该作者
图片上是用 BOOTICE 直接添加的wim项,添加后什么都不需要改,直接保持就可以;
回复

使用道具 举报

4#
发表于 2022-3-27 16:24:29 | 只看该作者
学习了
回复

使用道具 举报

5#
发表于 2022-3-27 16:46:59 | 只看该作者
学习了!!!
回复

使用道具 举报

6#
发表于 2022-3-27 16:53:08 | 只看该作者
学习学习
回复

使用道具 举报

7#
 楼主| 发表于 2022-3-27 17:44:39 | 只看该作者
实际测试,拷贝启动项后,只需下面三个设置命令就可以:

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
回复

使用道具 举报

8#
发表于 2022-3-27 18:46:18 | 只看该作者
学习中
回复

使用道具 举报

9#
发表于 2022-3-27 19:27:45 | 只看该作者

点评

谢谢!这个做成带gui的exe文件,我是想用批处理写个,然后整合成一个自动设置windows运行环境的批处理,一键完成所有设置: [attachimg]498577[/attachimg]  详情 回复 发表于 2022-3-27 20:28
回复

使用道具 举报

10#
发表于 2022-3-27 20:00:07 来自手机 | 只看该作者
path不需要

点评

确实。不过我是想按BOOTICE自动生成的默认路径(boot.wim在根目录),所以多写了这句。  详情 回复 发表于 2022-3-27 20:22
回复

使用道具 举报

11#
 楼主| 发表于 2022-3-27 20:22:23 | 只看该作者
本帖最后由 lhc0688 于 2022-3-27 20:23 编辑

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

使用道具 举报

12#
发表于 2022-3-27 20:26:33 | 只看该作者
本帖最后由 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

点评

谢谢!我就是看到这个,想能否简化下,用 -copy替代 create。  详情 回复 发表于 2022-3-27 20:30
回复

使用道具 举报

13#
 楼主| 发表于 2022-3-27 20:28:34 | 只看该作者
本帖最后由 lhc0688 于 2022-3-28 10:56 编辑

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

回复

使用道具 举报

14#
 楼主| 发表于 2022-3-27 20:30:47 | 只看该作者
oym2016 发表于 2022-3-27 20:26
本论詓上 脚本区有现成的. 复制一个供你参考.

pushd "%~dp0"

谢谢!我就是看到这个,想能否简化下,用 -copy替代 create。
回复

使用道具 举报

15#
发表于 2022-3-27 20:39:37 来自手机 | 只看该作者
感觉复杂化了,sdi和wim可用bcdboot塞引导区

点评

bcdboot d:\esp 提示:尝试复制启动文件失败。 esp文件夹内只有:D:\ESP\EFI\boot.sdi 一个文件;  详情 回复 发表于 2022-5-20 14:41
意思是不用挂载,直接用bcdboot命令将sdi和wim'拷入esp盘吗? 这样的话,代码要怎么写呢?  详情 回复 发表于 2022-3-27 20:45
回复

使用道具 举报

16#
 楼主| 发表于 2022-3-27 20:45:40 | 只看该作者
szwp 发表于 2022-3-27 20:39
感觉复杂化了,sdi和wim可用bcdboot塞引导区

意思是不用挂载,直接用bcdboot命令将sdi和wim'拷入esp盘吗?
这样的话,代码要怎么写呢?
回复

使用道具 举报

17#
发表于 2022-3-27 20:52:19 来自手机 | 只看该作者
先将path删了试,手机写困难

点评

多次强调将path删了,用deletevalue。  详情 回复 发表于 2022-4-4 14:53
回复

使用道具 举报

18#
发表于 2022-3-27 20:53:44 | 只看该作者
回复

使用道具 举报

19#
发表于 2022-3-27 20:54:29 | 只看该作者
楼主用用bcdboot即可

点评

用 bcdboot d:\esp ,提示:尝试复制启动文件失败。esp文件夹内只有:D:\ESP\EFI\boot.sdi 一个文件;  发表于 2022-5-20 14:42
回复

使用道具 举报

20#
发表于 2022-3-27 20:54:46 | 只看该作者
不需123

点评

有群友玩123的  详情 回复 发表于 2022-3-30 08:11
回复

使用道具 举报

21#
发表于 2022-3-27 21:03:00 | 只看该作者
花了200元,请教了一位版主,给我搞定了此问题。
回复

使用道具 举报

22#
发表于 2022-3-28 06:57:37 来自手机 | 只看该作者
不知道楼主三条设置是怎么测试成功启动的,但不少群友不挂载搞定了,楼主继续加油

点评

没成功,放弃了,改回BOOTICEx64.exe手动配置,感觉这样安全点。  发表于 2022-3-28 10:55
回复

使用道具 举报

23#
发表于 2022-3-28 11:03:31 | 只看该作者
放弃得太快了,关于bcdboot可参考此贴

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

点评

谢谢!这个感觉挺有用,我研究下。不过这个好像只是更新引导文件,如果是拷贝sdi、wim,好像不行。  发表于 2022-3-28 12:01
回复

使用道具 举报

24#
发表于 2022-3-28 13:13:06 | 只看该作者
研究得不够啊。sdi wim都能过去。

点评

惭愧!好吧,我再深入研究下。  发表于 2022-3-28 15:58
回复

使用道具 举报

25#
发表于 2022-3-28 13:53:22 | 只看该作者
善用搜索啊,论坛有现成的例子,我也写过
回复

使用道具 举报

26#
发表于 2022-3-30 08:11:49 | 只看该作者

有群友玩123的
回复

使用道具 举报

27#
发表于 2022-4-4 14:53:17 | 只看该作者
szwp 发表于 2022-3-27 20:52
先将path删了试,手机写困难

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

使用道具 举报

28#
发表于 2022-4-4 16:42:24 | 只看该作者
正需要,学习一下,谢谢
回复

使用道具 举报

29#
发表于 2022-5-10 20:35:09 | 只看该作者

谢谢分享
回复

使用道具 举报

30#
 楼主| 发表于 2022-5-20 14:41:42 | 只看该作者
szwp 发表于 2022-3-27 20:39
感觉复杂化了,sdi和wim可用bcdboot塞引导区

bcdboot d:\esp

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

esp文件夹内只有:D:\ESP\EFI\boot.sdi 一个文件;

点评

http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=426313&pid=4506818&fromuid=225195 用12楼附件试。  详情 回复 发表于 2022-5-20 15:05
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-24 12:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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