|
本帖最后由 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
。。。
以上思路想请教坛内的高手,解决这一长久困扰的问题,一是想法是否可行,二是代码如何写?
欢迎赐教,先谢谢!
|
|