无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8096|回复: 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


。。。

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

欢迎赐教,先谢谢!




38#
发表于 2024-10-24 11:24:44 | 只看该作者
今天用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








回复

使用道具 举报

37#
发表于 2024-10-24 10:54:52 | 只看该作者
学习一下看看。。
回复

使用道具 举报

36#
发表于 2024-10-24 10:35:17 | 只看该作者


谢谢分享
回复

使用道具 举报

35#
发表于 2022-5-21 07:36:10 | 只看该作者
lhc0688 发表于 2022-5-20 17:38
也不行,我是在虚拟机里测试的,引导模式选的 EFi;

特意让它失败来避免创建引导项,当然也可以让它显示成功,去修改它创建的引导项。
回复

使用道具 举报

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

这个已经看到了,确实做的挺不错,也很方便。不过我折腾这个是想用纯命令行方式,好跟其他好几个整合成一个【系统运行环境配置批处理】(前面也有讲过),包括一键安装相关支持库、工具软件、配置BCD双引导、用户文件夹转移、等等;所以,想用纯命令行方式实现试试。
回复

使用道具 举报

33#
发表于 2022-5-20 18:34:15 来自手机 | 只看该作者
本帖最后由 baosheng00 于 2022-5-20 18:36 编辑

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

点评

这个已经看到了,确实做的挺不错,也很方便。不过我折腾这个是想用纯命令行方式,好跟其他好几个整合成一个【系统运行环境配置批处理】(前面也有讲过),包括一键安装相关支持库、工具软件、配置BCD双引导、用户文  详情 回复 发表于 2022-5-20 19:22
回复

使用道具 举报

32#
 楼主| 发表于 2022-5-20 17:38:49 | 只看该作者
szwp 发表于 2022-5-20 15:05
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=426313&pid=4506818&fromuid=225195
...



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

点评

特意让它失败来避免创建引导项,当然也可以让它显示成功,去修改它创建的引导项。  详情 回复 发表于 2022-5-21 07:36
回复

使用道具 举报

31#
发表于 2022-5-20 15:05:41 | 只看该作者
lhc0688 发表于 2022-5-20 14:41
bcdboot d:\esp

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

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

用12楼附件试。

点评

[attachimg]501638[/attachimg] 也不行,我是在虚拟机里测试的,引导模式选的 EFi;  详情 回复 发表于 2022-5-20 17:38
回复

使用道具 举报

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

使用道具 举报

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

谢谢分享
回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

有群友玩123的
回复

使用道具 举报

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

使用道具 举报

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

点评

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

使用道具 举报

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

使用道具 举报

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

点评

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

使用道具 举报

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

使用道具 举报

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

点评

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

使用道具 举报

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

点评

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

使用道具 举报

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

使用道具 举报

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

点评

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

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

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

pushd "%~dp0"

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

使用道具 举报

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

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

回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

点评

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

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-24 13:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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