|
本帖最后由 hoder 于 2021-2-5 16:45 编辑
先说明一下,这个方法已写出成品测试正常使用,目前只提供思路。
关键操作就是更改bcd文件的device和osdevice路径。因为我不太熟悉bat的管道和正则,有些代码是用vbs写的,请大家稍微注意一下不要照搬。
'以下5个字符串,引号内字符根据你自己机器实际情况填写,win7只支持.vhd,win10建议用vhdk。
'description和vhdFileName并不存在固定的对应关系,所以文件名没有强制要求。
description1="Win10_LTSC_正常启动"
description2="Win10_LTSC_极速还原"
vhdFileName1="Win10_LTSC_Optim_1.vhdx"
vhdFileName2="Win10_LTSC_Optim_2.vhdx"
vhdFileNameBak="Win10_LTSC_Optim.bak"
'vhdFileNameBak的文件名可以是.vhd(k),个人习惯手动改成.bak。
UEFI默认启动菜单是 x:\EFI\Microsoft\Boot\BCD,x盘是隐藏的,可以用命令导出:bcdedit /enum {current}>tmp.txt"
bcdedit.exe /store \\?\GLOBALROOT\device\harddisk0\partition1\EFI\Microsoft\Boot\BCD /enum /v >>tmp.txt
(本论坛找到的,确实很好用,应该是ramos区吧,忘了哪个大侠写的,衷心感谢!)
注意两个命令的区别,第一个是获得当前系统的启动参数,主要是用来取得description,但是这个命令不会列出标识符和实际路径,所以还需要第二个命令来配合。两个命令的结果导出到tmp.txt(>和>>的区别自己体会)。
现在我们获得了当前系统的description(也就是系统选择菜单)、标识符、vhd文件对应的路径。真正需要的也就这3个参数。
主要障碍是参数的处理,bat我是真的没办法,比如根据description来取得对应的标识符,vbs处理相对简单点,"-------------------"分割出来,再分割获取就行。
获得当前启动信息,以及两个vhd文件对应的标识符,路径device,然后按正常模式和还原模式分别替换vhd文件和更新启动项。
命令行为bcdedit /set id device vhd=vhdPath vhdName
比如 bcdedit /set {7cf00000-1111-2222-3333-888888888888} device vhd=[D:]\OS\Win10_LTSC_Optim_2.vhdx
正常模式:替换文件(可以两个都替换,肯定有一个成功一个失败,成功的那个记录下来,当然我自己是根据tmp.txt直接计算出来的),bcdedit /set 命令将还原模式的文件名改成已替换成功的那个文件名。
还原模式:替换文件,bcdedit /set 命令将正常模式的文件名改成替换失败的那个文件名(用户觉得已经极速还原了,目前的环境就是还原之后的,所以要直接使用当前vhd)
注意:这个程序要放启动文件夹,或者放c盘并添加到注册表启动项,再做vhd差分。
文笔不好,讲得不清楚的地方请谅解,以前语文我也及格过的,但已经是很久之前的事了。
|
|