hoder 发表于 2021-2-5 16:45:18

UEFI+VHD秒还原,可能是目前最简单的方法,支持多系统复杂环境。(仅提供思路)

本帖最后由 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=\OS\Win10_LTSC_Optim_2.vhdx

正常模式:替换文件(可以两个都替换,肯定有一个成功一个失败,成功的那个记录下来,当然我自己是根据tmp.txt直接计算出来的),bcdedit /set 命令将还原模式的文件名改成已替换成功的那个文件名。

还原模式:替换文件,bcdedit /set 命令将正常模式的文件名改成替换失败的那个文件名(用户觉得已经极速还原了,目前的环境就是还原之后的,所以要直接使用当前vhd)

注意:这个程序要放启动文件夹,或者放c盘并添加到注册表启动项,再做vhd差分。



文笔不好,讲得不清楚的地方请谅解,以前语文我也及格过的,但已经是很久之前的事了。









richie-wwm 发表于 2021-2-5 17:35:38

抢个沙发{:1_186:}

liujun2000 发表于 2021-2-5 19:17:15

怎么在系统启动前 调用bat

ls68057121 发表于 2021-2-5 20:04:51

应该是 进入系统后再调用的bat

进士小站 发表于 2021-2-5 20:11:07

感谢楼主分享{:1_195:}

hoder 发表于 2021-2-6 00:16:06

liujun2000 发表于 2021-2-5 19:17
怎么在系统启动前 调用bat

是进入系统后调用bat或者vbs。
进正常系统就替换还原系统的vhd和菜单,进还原系统就替换正常系统的vhd和菜单。
需要注意的是,菜单项并不是固定对应某个vhd文件,而是将vhd文件交替使用的。

liujun2000 发表于 2021-2-6 04:07:56

hoder 发表于 2021-2-6 00:16
是进入系统后调用bat或者vbs。
进正常系统就替换还原系统的vhd和菜单,进还原系统就替换正常系统的vhd和 ...

就是说一直进一个系统 进这个系统就不会被更换
想更换就换一个系统

心零 发表于 2021-2-6 13:15:44

这玩意是进入系统后用BTA做改名复制操作吧?

zhjsn 发表于 2021-2-7 12:01:21

good

hoder 发表于 2021-2-7 20:41:29

liujun2000 发表于 2021-2-6 04:07
就是说一直进一个系统 进这个系统就不会被更换
想更换就换一个系统

如果一直进正常系统,就永远不会被更换,但是还原系统每次都会更换。
如果每次都是全新系统,对普通用户而言其实很蛋疼的。

hoder 发表于 2021-2-7 20:42:24

心零 发表于 2021-2-6 13:15
这玩意是进入系统后用BTA做改名复制操作吧?

都是在进入系统后操作,完全不影响正常使用。

w51737 发表于 2021-2-7 21:04:14

感谢楼主分享

遨游的风 发表于 2023-3-2 08:45:56

hoder 发表于 2021-2-6 00:16
是进入系统后调用bat或者vbs。
进正常系统就替换还原系统的vhd和菜单,进还原系统就替换正常系统的vhd和 ...

我在差分Win11系统的时候,发现差分后启动差分系统后什么都没做VHD文件就占用了2G,就算是差分Win8也有几百M。怎样可以避免差分后的系统不要占用这么大的空间?

遨游的风 发表于 2023-3-2 08:46:13

感谢分享

龙起坑 发表于 2023-6-14 09:58:27

谢谢大大,学习学习。
{:1_195:}

chen2580489 发表于 2023-6-18 21:34:48

谢谢大大,学习学习。

joypig 发表于 2024-4-10 09:34:58

感觉有些复杂呢,正在学习
页: [1]
查看完整版本: UEFI+VHD秒还原,可能是目前最简单的方法,支持多系统复杂环境。(仅提供思路)