无忧启动论坛

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

[原创] VHD秒还原开机脚本 两种还原模式 + 桌面右键菜单

    [复制链接]
跳转到指定楼层
1#
发表于 2024-6-23 16:19:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 baby1277 于 2024-11-26 07:19 编辑

本人很喜欢VHD系统特意写了这套开机还原脚本,以实现全自动快捷方便的还原系统。
历经了半年的不断完善终于达到预期的效果,现在把脚本的主代码贴上给大家参考下。
  1. @echo off
  2. cd /d %~dp0
  3. :: 检查脚本安装正确性
  4. set auto=baby1277
  5. del /f /q *.tem 2>nul
  6. for %%i in (Windows.vhd*) do set nx=%%~xi
  7. if not exist Windows%nx% goto error
  8. for /f "tokens=3" %%i in ('reg query HKLM\SOFTWARE\vhdstart /v "description"') do set description=%%i
  9. if not defined description goto error
  10. for %%a in (z h c) do for %%i in (0ba a10 01a ab0) do if not exist bcd\bcd%%i%%a goto error
  11. for %%i in (10 11 1a 1b back) do if not exist Windows_%%i%nx% goto error
  12. reg query "HKEY_CLASSES_ROOT\DesktopBackground\shell\vhdstart" >nul 2>nul
  13. if errorlevel 1 call 1添加开机启动.bat
  14. :: 查询 "Windows_back%nx%" VHD副本文件大小
  15. for %%i in (Windows_back%nx%) do set back=%%~zi
  16. set back=%back:~0,-4%
  17. :: 查询 "Windows 正常模式" 的VHD文件大小
  18. for %%i in (Windows_10%nx%) do set z0=%%~zi
  19. for %%i in (Windows_1a%nx%) do set za=%%~zi
  20. set z0=%z0:~0,-4%&set za=%za:~0,-4%
  21. :: 查询 "Windows 还原模式" 的VHD文件大小
  22. for %%i in (Windows_11%nx%) do set z1=%%~zi
  23. for %%i in (Windows_1b%nx%) do set zb=%%~zi
  24. set z1=%z1:~0,-4%&set zb=%zb:~0,-4%
  25. :: 查询当前系统默认引导菜单
  26. for /f "tokens=3" %%i in ('bcdedit /enum {current}^|find "description"') do set descrip=%%i
  27. for /f "tokens=3" %%i in ('bcdedit /enum {default}^|find "description"') do set descrip=%%i
  28. :: 临时重命名查询当前挂载的VHD文件
  29. for %%i in (10 11 1a 1b) do ren Windows_%%i%nx% Windows_%%i.tem
  30. :: 还原VHD差分文件
  31. if not exist Windows_10%nx% goto vhd1a
  32. if %z1% neq %back% copy /y Windows_back%nx% Windows_11%nx%
  33. if %zb% neq %back% copy /y Windows_back%nx% Windows_1b%nx%
  34. if %za% neq %back% copy /y Windows_back%nx% Windows_1a%nx%
  35. :vhd1a
  36. if not exist Windows_1a%nx% goto vhd11
  37. if %z1% neq %back% copy /y Windows_back%nx% Windows_11%nx%
  38. if %zb% neq %back% copy /y Windows_back%nx% Windows_1b%nx%
  39. if %z0% neq %back% copy /y Windows_back%nx% Windows_10%nx%
  40. :vhd11
  41. if not exist Windows_11%nx% goto vhd1b
  42. if %zb% neq %back% copy /y Windows_back%nx% Windows_1b%nx%
  43. :vhd1b
  44. if not exist Windows_1b%nx% goto vhdren
  45. if %z1% neq %back% copy /y Windows_back%nx% Windows_11%nx%
  46. :: 恢复临时重命名的VHD文件
  47. :vhdren
  48. for %%i in (Windows_1*.tem) do ren %%i %%~ni%nx% || del /f /q %%i
  49. :: 重新查询 "Windows 正常模式" 的VHD文件大小
  50. for %%i in (Windows_10%nx%) do set d0=%%~zi
  51. for %%i in (Windows_1a%nx%) do set da=%%~zi
  52. set d0=%d0:~0,-4%&set da=%da:~0,-4%
  53. :: 重新查询 "Windows 还原模式" 的VHD文件大小
  54. for %%i in (Windows_11%nx%) do set d1=%%~zi
  55. for %%i in (Windows_1b%nx%) do set db=%%~zi
  56. set d1=%d1:~0,-4%&set db=%db:~0,-4%
  57. :: 定义引导菜单
  58. if %d0% equ %back% set v1=a
  59. if %da% equ %back% set v1=0
  60. if %d0% equ %back% set v3=0
  61. if %da% equ %back% set v3=a
  62. if %db% equ %back% set v2=b
  63. if %d1% equ %back% set v2=1
  64. if %z0% neq %back% if %za% neq %back% set v4=z
  65. if %d1% equ %db% if not "%descrip%"=="正常模式" set v4=z
  66. if %d1% neq %db% set v4=h
  67. :: 设置引导菜单
  68. if defined v4 bcdedit /import bcd\bcd%v1%%v2%%v3%%v4%
  69. :: 更新桌面右键菜单
  70. set reg=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell
  71. if %d1% neq %db% goto menu1
  72. reg add "%reg%\start.1" /ve /t REG_SZ /d "%description% 正常模式  (当前)" /f
  73. reg add "%reg%\start.2" /ve /t REG_SZ /d "%description% 还原模式" /f
  74. reg add "%reg%\start.3" /ve /t REG_SZ /d "一键还原 %description%" /f
  75. if exist vhdlog.txt call vhdlog.bat
  76. :menu1
  77. reg add "%reg%\start.1" /ve /t REG_SZ /d "%description% 正常模式" /f
  78. reg add "%reg%\start.2" /ve /t REG_SZ /d "%description% 还原模式  (当前)" /f
  79. reg add "%reg%\start.3" /ve /t REG_SZ /d "一键还原 %description%" /f
  80. if exist vhdlog.txt call vhdlog.bat
  81. :error
  82. msg %username% /time:3 检测到错误,请重新安装VHD还原脚本!
复制代码















桌面右键菜单算是别出心裁吧,电脑小白点两下鼠标就可以轻松还原系统,简直太方便了。
正常模式:保存数据 ,适合作为常用系统。
还原模式:不保存数据
适合用于运行不安全的软件和测试。
出厂模式:还原系统
,系统出现问题时一键还原系统。
  
vhd还原脚本的运行逻辑:1还原VHD文件
-----2导入BCD文件-----3更新桌面右键菜单
  
1
还原VHD文件
     通过临时重命名查询当前挂载的VHD文件,从而得知当前所使用的脚本模式。
     当处于正常模式时:还原未被挂载的其余3个VHD文件
     当处于还原模式时:还原模式交替挂载两个VHD文件,还原未被挂载的那个VHD文件。
     当处于出厂模式时:还原未被挂载的其余3个VHD文件
  
2:导入
BCD文件
     使用bcdboot和bcdedit创建固定路径菜单的bcd文件,最后用bcdedit /import 命令导入。
     还原脚本大致的原理是:BCD文件与默认引导菜单和VHD文件三者组合起来交替挂载使用
     以下是我整理出的xls表格,其中
10和1a对应正常模式和出厂模式,11和1b交替挂载为还原模式。
      
     
     
          

     手动创建bcd文件的方法 (已支持一键创建BCD文件,当备选方案和了解原理。)
     运行环境:Win8以上本地磁盘系统或者PE系统和VHD系统都可以
     以创建bcd01az文件为例  bcdboot添加顺序为 1a 11 10
     01:右键挂载Windows_1a.vhdx 为V盘  (假设是V盘)
     02:打开 "命令提示符.lnk" 执行:bcdboot V:\windows /l zh-ch
     03:打开 "命令提示符.lnk" 执行:bcdedit /set {default} description "Windows 出厂模式"
     04:打开资源管理器 右键弹出V盘
     05:右键挂载Windows_11.vhdx 为V盘  (假设是V盘)
     06:打开 "命令提示符.lnk" 执行:bcdboot V:\windows /l zh-ch
     07:打开 "命令提示符.lnk" 执行:bcdedit /set {default} description "Windows 还原模式"
     08:打开资源管理器 右键弹出V盘
     09:右键挂载Windows_10.vhdx 为V盘  (假设是V盘)
     10:打开 "命令提示符.lnk" 执行:bcdboot V:\windows /l zh-ch
     11:打开 "命令提示符.lnk" 执行:bcdedit /set {default} description "Windows 正常模式"
     12:打开资源管理器 右键弹出V盘
     13:打开 "命令提示符.lnk" 执行:bcdedit /export "%cd%\bcd\bcd01az" 创建bcd01az文件成功。
     14:打开 "命令提示符.lnk" 执行:msconfig 选择引导选项卡,删除新建的3个的菜单。
      举一反三,重复1-14步骤按照xls表格的内容 分别创建其他的BCD文件

3:更新桌面右键菜单
      对比还原模式的VHD文件大小,相同设置为正常模式,不同则设置为还原模式。
      进入系统后没有出厂模式,如菜单显示为出厂模式则会按上述规则重新设置。


VHD还原脚本手动安装方法(已支持一键安装,当备选方案和了解原理。
      安装运行环境:Win8以上本地磁盘系统或者PE系统和VHD系统都可以
      1:将父VHD系统和脚本放在一起放重命名为Windows.vhdx
      2:右键装载Windows.vhdx (父VHD) 为V盘 (假设是V盘)
      3:打开 "命令提示符.lnk" 执行:bcdboot V:\windows /l zh-ch
      4:重启系统自动引导登录Windows.vhdx (父VHD) 运行“1添加开机启动.bat”
      5:重启系统手动选择进入PE系统或者本地磁盘系统 运行“2创建vhd差分文件.bat”
      6:运行“3创建bcd菜单.bat”
      7:重启系统完成安装,安装成功后首次进入 “Windows  正常模式”


VHD还原脚本的安装逻辑 (手动安装)      
      1:重命名目标VHD文件 (步骤1)
      2:往目标VHD系统的注册表添加开机启动项 (步骤2-4)
      3:差分目标VHD (步骤5)
      4:引导登录差分VHD (步骤6)


VHD还原脚本安装失败或者脚本无效可能原因
      01:目标VHD文件被占用,可能安装前被挂载过。
      02:目标VHD文件相关连的其他VHD文件被挂载或占用。
      03:目标VHD文件被设置为只读属性
      04:目标VHD文件自身无法被命令行挂载,但右键可以。(diskpart版本造成的)
      05:批处理没有以管理员权限运行   (提示无法。。。。)
      06:批处理所在的文件夹权限受限  (bat文件右键删除菜单有个小盾牌图标)
      07:文件夹路径中包含汉字或者空格符。
      08:安全防护软件的拦截
      09:安装环境有问题,例如:系统版本太低,系统组件缺失。
      10:硬盘分区错误,例如:ESP分区太小,磁盘格式错误。
      11:默认引导程序不是bootmgr

      12:脚本存在错误,需要作者修复。

使用该脚本不需要修改主板BIOS,支持安全启动,不影响系统更新。
同时支持UEFI和BIOS固件,理论上Win7-Win11的新旧电脑都可以使用。
分别在操作系统为 Windows_10_2019_ltsc 固件为 BIOS 的实体机测试OK
分别在操作系统为 Windows_11_23H2 固件为 UEFI 的实体机测试OK


附件在沙发方便更新,如有问题回帖!

点评

默默等待BIOS系统  发表于 2024-6-29 11:38
辛苦了  发表于 2024-6-23 18:09

评分

参与人数 10无忧币 +52 收起 理由
freesoft00 + 5
qq27722 + 5 赞一个!
lemonle79 + 5
879792799 + 5 绝对好创意!
smartcowboy + 5 期待分享其他更好的作品
whyme22 + 5
Myptour + 5 赞一个!
新空气 + 5
yyz2191958 + 2 赞一个!
20090101 + 10 很给力!

查看全部评分

2#
 楼主| 发表于 2024-6-23 16:20:20 | 只看该作者
本帖最后由 baby1277 于 2024-11-25 23:41 编辑

2024.11.25  修复32位系统桌面右键菜单异常的问题

此版本直接设置引导菜单的VHD文件路径(适合需要修改BCD菜单的网友使用)
VHD秒还原2024.11.25.zip (40.81 KB, 下载次数: 363)

此版本通过导入BCD文件的方式修改引导菜单的VHD文件路径 (适合小白使用)
VHD秒还原2024.11.25(bcd).zip (41.38 KB, 下载次数: 531)

安装好VHD还原脚本的Win7_X86 VM虚拟机(520M)
https://www.123684.com/s/pzBDTd-AGK0v
https://pan.baidu.com/s/1IRDdtEAoCOs8wdKoPgBcUw?pwd=0sw2


更新记录
● 第三方引导程序实现秒还原(待更新)
● 添加本地磁盘系统菜单(待更新)
支持实际占用大小的VHD差分文件
● 取消BCD文件直接设置VHD文件路径
识别.VHD和.VHDX格式
● 添加日志调试脚本
● 添加一键安装脚本
● 添加创建BCD文件脚本
● 添加创建VHD差分文件脚本
● 添加桌面右键菜单脚本

PE系统环境下 手动安装VHD还原脚本视频
手动安装操作视频.zip (3.66 MB, 下载次数: 32)

PE系统环境下 一键安装VHD还原脚本视频


点评

急需你的操作视频  发表于 2024-8-28 11:24

评分

参与人数 3无忧币 +20 收起 理由
879792799 + 5 批处理还原大法集大成者!666
qq27722 + 5 赞一个!
20090101 + 10 很给力!

查看全部评分

回复

使用道具 举报

3#
发表于 2024-6-23 16:35:15 | 只看该作者
谢谢共享
回复

使用道具 举报

4#
发表于 2024-6-23 16:36:27 | 只看该作者
密码是?

点评

我的ID 帖子中有说明  详情 回复 发表于 2024-6-23 16:40
回复

使用道具 举报

5#
 楼主| 发表于 2024-6-23 16:40:33 | 只看该作者

我的ID 帖子中有说明
回复

使用道具 举报

6#
发表于 2024-6-23 16:45:14 | 只看该作者

谢谢分享!!!
回复

使用道具 举报

7#
发表于 2024-6-23 16:47:10 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 2024-6-23 17:28:18 | 只看该作者
感谢分享,我比较菜,不懂VHD,有详细使用说明吗?谢谢

点评

详细的资料,只能帮助到这里了。 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414366  详情 回复 发表于 2024-6-23 17:37
回复

使用道具 举报

9#
 楼主| 发表于 2024-6-23 17:37:18 | 只看该作者
2013ertert 发表于 2024-6-23 17:28
感谢分享,我比较菜,不懂VHD,有详细使用说明吗?谢谢

详细的资料,只能帮助到这里了。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414366
回复

使用道具 举报

10#
发表于 2024-6-23 17:37:51 | 只看该作者
vhd系统一直不能休眠啊 ,而我又需要休眠,
所以我不大用vhd系统

点评

用winntsetup创建/附加VHD并安装系统进去,主BCD里有Windows Resume Application. 你试试这样操作,看看这样整的系统能不能休眠?  详情 回复 发表于 2024-6-24 10:59
回复

使用道具 举报

11#
 楼主| 发表于 2024-6-23 17:45:05 | 只看该作者
从来没用过休眠功能,刚刚我试用了好像支持,点击睡眠主机风扇和屏幕也关了。
不知道是不是休眠,可以win11支持了也难说。


点评

vhd支持睡眠、不支持休眠。 我是台式机,因为有没干完的活(打开的软件或其他,也怕关机把没干完的活忘了),所以不能关机,但又怕停电,只能休眠。  详情 回复 发表于 2024-6-24 11:17
回复

使用道具 举报

12#
发表于 2024-6-23 17:56:07 | 只看该作者
主板支持睡眠,就可以的。我一直在用。
回复

使用道具 举报

13#
发表于 2024-6-23 18:09:06 | 只看该作者
谢谢分享
回复

使用道具 举报

14#
发表于 2024-6-23 20:13:20 | 只看该作者
VHD从7时代就开始用了,挺好的,特别是用来测试系统
你这个想法,貌似之前有人发过类似的,更早以前BIOS模式还有个GUI小软件形式添加的,不过,我个人更喜欢手工确认更换
回复

使用道具 举报

15#
发表于 2024-6-23 22:22:09 | 只看该作者
谢谢分享。
回复

使用道具 举报

16#
发表于 2024-6-23 22:42:03 | 只看该作者

谢谢分享
回复

使用道具 举报

17#
发表于 2024-6-24 08:35:01 | 只看该作者
谢谢分享
回复

使用道具 举报

18#
发表于 2024-6-24 09:48:46 | 只看该作者
回复

使用道具 举报

19#
发表于 2024-6-24 10:39:08 | 只看该作者
谢谢分享
回复

使用道具 举报

20#
发表于 2024-6-24 10:59:54 | 只看该作者
likeyouli 发表于 2024-6-23 17:37
vhd系统一直不能休眠啊 ,而我又需要休眠,
所以我不大用vhd系统

用winntsetup创建/附加VHD并安装系统进去,主BCD里有Windows Resume Application. 你试试这样操作,看看这样整的系统能不能休眠?

点评

这句没看懂, 我感觉应该也不能休眠,不能休眠的原因估计是虚拟分区的原因,也就是说只有正常硬盘分区才支持休眠。 这只是我猜测。  详情 回复 发表于 2024-6-24 11:09
回复

使用道具 举报

21#
发表于 2024-6-24 11:09:29 | 只看该作者
音乐与电脑 发表于 2024-6-24 10:59
用winntsetup创建/附加VHD并安装系统进去,主BCD里有Windows Resume Application. 你试试这样操作,看看 ...
主BCD里有Windows Resume Application
这句没看懂,
  我感觉应该也不能休眠,不能休眠的原因估计是虚拟分区的原因,也就是说只有正常硬盘分区才支持休眠。 这只是我猜测。

点评

要不试试  详情 回复 发表于 2024-6-24 11:38
回复

使用道具 举报

22#
发表于 2024-6-24 11:17:21 | 只看该作者
baby1277 发表于 2024-6-23 17:45
从来没用过休眠功能,刚刚我试用了好像支持,点击睡眠主机风扇和屏幕也关了。
不知道是不是休眠,可以win1 ...

vhd支持睡眠、不支持休眠。
  我是台式机,因为有没干完的活(打开的软件或其他,也怕关机把没干完的活忘了),所以不能关机,但又怕停电,只能休眠。
回复

使用道具 举报

23#
发表于 2024-6-24 11:38:02 | 只看该作者
likeyouli 发表于 2024-6-24 11:09
这句没看懂,
  我感觉应该也不能休眠,不能休眠的原因估计是虚拟分区的原因,也就是说只有正常硬盘分 ...

要不试试
回复

使用道具 举报

24#
发表于 2024-6-24 13:03:08 | 只看该作者
感谢楼主分享
回复

使用道具 举报

25#
发表于 2024-6-24 15:02:42 | 只看该作者
感谢辛苦提供分享!
回复

使用道具 举报

26#
发表于 2024-6-25 08:45:02 | 只看该作者

谢谢楼主
回复

使用道具 举报

27#
发表于 2024-6-25 12:04:18 | 只看该作者
支持原创。虽然vhd一键还原早就有了,但是爱折腾永不过时。
回复

使用道具 举报

28#
发表于 2024-6-25 14:11:48 | 只看该作者
感谢分享
回复

使用道具 举报

29#
发表于 2024-6-29 12:19:02 | 只看该作者
这个要支持
回复

使用道具 举报

30#
发表于 2024-7-10 19:13:01 | 只看该作者
现在用的仅仅是2个vhd系统,正常和恢复,恢复也仅仅是copy&restart 写在计划任务里,这回有新玩法了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 19:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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