无忧启动论坛

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

[分享] [2026/1/12] Drive Snapshot 分区备份还原空壳+源码

    [复制链接]
跳转到指定楼层
#
发表于 2025-5-9 13:37:08 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 Bluebells 于 2026-1-20 19:54 编辑

在无忧启动论坛上有不少这种功能简单的备份还原工具的前端工具, 因此我也凑凑热闹, 使用 PECMD 脚本简单编写了一个
这个前端的功能比较单一, 只有简单的分区备份和还原
PS: 附件的前端工具没有内置/外置 Drive Snapshot, 仅一个空壳而已, 请根据自己需求将含授权信息的 Drive Snapshot 添加到与该前端同一目录位置

更新日志:
v4.0
添加盘符分配及取消分配功能
v3.0
添加密码支持
支持使用配置文件定义一些选项(按 F1 进入选项配置界面)
增加创建映像的哈希文件功能(右键点击"差异备份"复选框进入)
移除还原时的"注入磁盘控制器驱动程序"和"启用更多/所有 IDE 控制器"相关选项
v2.0
添加差异备份支持
添加还原时的"注入磁盘控制器驱动程序"和"启用更多/所有 IDE 控制器"选项
v1.0
初始版本

查看/修改源码: 使用 PE 文件编辑器(如 Resource Hacker)打开该前端工具, 展开到 SCRIPT\101 即可
如果你觉得这个前端写得不错, 又想增加一些功能, 则可以自己修改源码进行定制增强

Easy-DS.zip (620.45 KB, 下载次数: 343)
Easy-DS_v2.zip (621.13 KB, 下载次数: 128)
Easy-DS_v2B.zip (621.47 KB, 下载次数: 114)
Easy-DS_v3.zip (622.47 KB, 下载次数: 87)
Easy-DS_v3B.zip (622.59 KB, 下载次数: 98)
Easy-DS_v4.zip (622.63 KB, 下载次数: 157)
非 B 版在处理未分配驱动器号(盘符)的备份源分区/还原目标分区时采用磁盘分区号, 而 B 版则是采用临时分配驱动器号的方式

PS: 该前端支持备份/还原无驱动器号(盘符)的分区, 但备份源分区/还原目标分区并不可靠
因为该前端所使用的磁盘/分区编号为 winapi 提供的, 并非 Drive Snapshot 原生接口
其实 Drive Snapshot 提供了 --show 选项以打印本地磁盘分区信息
由于提取程序标准输出的方式的运行效率不高, 且我不懂正则, 无法合理提取所需信息, 因此采用 pecmd 提供的磁盘/分区编号
Drive Snapshot 的磁盘编号是以 1 开始的, winpai 则是以 0 开始, 因此执行备份/还原命令前, 会事先对磁盘编号+1
当源分区/目标分区存在驱动器号时, 会优先采用驱动器号, 而不是磁盘/分区编号
(我在实机环境和虚拟机环境下进行了几次无驱动器号分区的备份/还原操作, 暂时没发现采用 winapi 提供的磁盘编号+1和分区编号的方式与 Drive Snapshot 原生的磁盘/分区编号存在差异)

评分

参与人数 6无忧币 +30 收起 理由
gxbcm + 5 支持!
cuicongyuan + 5 赞一个!
wuxin9712 + 5 赞一个!
gtc + 5 很给力!
rzp428 + 5 很给力!
i2ur + 5 很给力!

查看全部评分

85#
发表于 2026-1-27 10:10:44 | 只看该作者
感谢分享
回复

使用道具 举报

84#
发表于 2026-1-23 08:26:34 | 只看该作者
感谢分享
回复

使用道具 举报

83#
发表于 2026-1-19 09:03:54 来自手机 | 只看该作者
谢谢啦
回复

使用道具 举报

82#
 楼主| 发表于 2026-1-14 21:34:58 | 只看该作者
BEIKING 发表于 2026-1-14 20:52
TEAM ENVI @LABE5=正在还原分区,请稍等...| ENVI @ITEM5.Enable=0| ENVI @ITEM6.Enable=0
     ...

一些机子在 Native 环境(即某些人所说的热还原)下无法使用键盘, 通过调整键盘驱动程序的启动时机以尝试解决无法使用键盘的情况(不确定这个方法能用, 你可以测试一下)
回复

使用道具 举报

81#
发表于 2026-1-14 20:52:25 | 只看该作者

        TEAM ENVI @LABE5=正在还原分区,请稍等...| ENVI @ITEM5.Enable=0| ENVI @ITEM6.Enable=0
        FIND $%&DrvLtr%=%SystemDrive%,REGI #HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\\BootFlags=0x00000080
        EXEC -wait %&::MEXE% %&BParam% %&OParam%

Bluebells 老师,还原前的注册表写入是什么用处?

点评

一些机子在 Native 环境(即某些人所说的热还原)下无法使用键盘, 通过调整键盘驱动程序的启动时机以尝试解决无法使用键盘的情况(不确定这个方法能用, 你可以测试一下)  详情 回复 发表于 2026-1-14 21:34
回复

使用道具 举报

80#
发表于 2026-1-14 17:53:25 | 只看该作者
感谢分享
回复

使用道具 举报

79#
发表于 2026-1-14 16:36:36 | 只看该作者
感谢老大更新!
回复

使用道具 举报

78#
发表于 2026-1-14 16:18:10 | 只看该作者
感谢分享
回复

使用道具 举报

77#
发表于 2026-1-14 10:39:32 | 只看该作者
2016?穿越了?
回复

使用道具 举报

76#
发表于 2026-1-13 17:07:34 | 只看该作者
精致小巧,好。
回复

使用道具 举报

75#
发表于 2026-1-13 11:20:22 | 只看该作者
感谢分享!
回复

使用道具 举报

74#
 楼主| 发表于 2026-1-12 21:32:56 | 只看该作者
添加 4.0 版本
增加了对驱动器的盘符分配及取消分配功能
PS: 看到某人好像很喜欢这个功能就增加了, 个人觉得这个功能意义不大
回复

使用道具 举报

73#
发表于 2025-10-27 17:34:30 | 只看该作者
感谢分享
回复

使用道具 举报

72#
发表于 2025-10-27 10:57:59 | 只看该作者
感谢分享
回复

使用道具 举报

71#
发表于 2025-10-27 08:29:30 | 只看该作者
来看看
回复

使用道具 举报

70#
发表于 2025-5-26 10:15:51 | 只看该作者
感谢分享
回复

使用道具 举报

69#
发表于 2025-5-21 01:43:32 | 只看该作者
感谢分享!
回复

使用道具 举报

68#
发表于 2025-5-18 23:46:50 | 只看该作者
oym2016 发表于 2025-5-18 16:49
感谢 5大大 百忙中的帮助

记错了 是大漠孤鹰 VHD(X)文件辅助工具中查找 盘符原语句

关于全域、子域问题,要查看完整代码方可分析。
回复

使用道具 举报

67#
发表于 2025-5-18 23:44:43 | 只看该作者
oym2016 发表于 2025-5-18 16:49
感谢 5大大 百忙中的帮助

记错了 是大漠孤鹰 VHD(X)文件辅助工具中查找 盘符原语句

用最新版PECMD,可简化取时间:

DATE SysDate y Mon d h min
sed -ex STime=0,{\z}\b+{\z}\b+{\z}\b+{\z}\b+{\z},\001-\002-\003_\004:\005,SysDate
mess. [%STime%]---------[%STime:~2,%]











回复

使用道具 举报

66#
发表于 2025-5-18 23:30:42 | 只看该作者
oym2016 发表于 2025-5-18 16:49
感谢 5大大 百忙中的帮助

记错了 是大漠孤鹰 VHD(X)文件辅助工具中查找 盘符原语句


下面两种写法都可以,PECMD  help  获取更多帮助。

_SUB getNoDrv
    ENVI @Listvd.VAL=
    fdrv -idlec &drvs=*:
    forx * %&drvs% ,&p0,ENVI @Listvd.ADDSEL=%&p0%
_END

_SUB getNoDrv
    ENVI @Listvd.VAL=
    fdrv -idlec &drvs=
    ENVI @Listvd.ADD1=%&drvs%
_END





回复

使用道具 举报

65#
发表于 2025-5-18 20:47:53 | 只看该作者
好东西,很小巧,方便。谢谢
回复

使用道具 举报

64#
发表于 2025-5-18 16:49:24 | 只看该作者
本帖最后由 oym2016 于 2025-5-18 21:07 编辑
527104427 发表于 2025-5-18 15:38
fdrv -idlec &drvs=*:
FORX * %&drvs%,&ph,
{*

感谢 5大大 百忙中的帮助

记错了 是大漠孤鹰 VHD(X)文件辅助工具中查找 盘符原语句
_SUB getNoDrv
    ENVI @List1=
    fdrv -idlec &drvs=*:
    forx* %&drvs% ,&p0,ENVI @List1=%&p0%
    ENVI @List1.SEL=%List1%
    LSTR zList1=1,%List1%
_END

我在引用时,没有找到到空盘号  改为下面时 就才能找到 并挂接上vhdx,有点不解 才请教, , ,

_SUB getNoDrv
fdrv -idlec &drvs=*:
FORX * %&drvs%,&ph,0,%ph%
ENVI Listvd=%&ph%
ENVI @Listvd.ADD=%Listvd%
_END
////////////////
DATE SysDate
TEAM MSTR ST1=%SysDate%,3,7|MSTR ST2=%SysDate%,13,4
ENVI STime=%ST1%_%ST2%

以上取备份时间句
在Easy-DS.zip脚本中 能设为 全域 任意子程序都能调用。
在Easy-DS_v2.zip和Easy-DS_v2b.zip 全域调无效,只能子程序中设置 才有效果
用BC软件工具同时打开二个脚本 对照过  没找出 全域与子域 的句

有点不解?


点评

关于全域、子域问题,要查看完整代码方可分析。  详情 回复 发表于 2025-5-18 23:46
用最新版PECMD,可简化取时间: DATE SysDate y Mon d h min sed -ex STime=0,{\z}\b+{\z}\b+{\z}\b+{\z}\b+{\z},\001-\002-\003_\004:\005,SysDate mess. [%STime%]---------[%STime:~2,%] [attachim  详情 回复 发表于 2025-5-18 23:44
下面两种写法都可以,PECMD help 获取更多帮助。 _SUB getNoDrv ENVI @Listvd.VAL= fdrv -idlec &drvs=*: forx * %&drvs% ,&p0,ENVI @Listvd.ADDSEL=%&p0% _END _SUB getNoDrv ENVI  详情 回复 发表于 2025-5-18 23:30
回复

使用道具 举报

63#
 楼主| 发表于 2025-5-18 16:06:21 | 只看该作者
oym2016 发表于 2025-5-18 15:16
下载使用您的 Easy-DS.zip  Easy-DS_v2.zip Easy-DS_v2b .zip 在使用还原功能项时  镜像还原到挂接的VHDX ...

为什么不能过?

截图为 v2b 的测试结果

回复

使用道具 举报

62#
发表于 2025-5-18 15:38:00 | 只看该作者
oym2016 发表于 2025-5-18 14:30
Bluebells 老师:
    这个pecmd.exe 是不是对使用环境(含硬件)有一定的要求? 老师的三个版都有跟进 ...

fdrv -idlec &drvs=*:
FORX * %&drvs%,&ph,
{*
    ENVI Listvd=%ph%
    //其他命令写这里
   //其他命令写这里
   //其他命令写这里
   //……
}

点评

感谢 5大大 百忙中的帮助 记错了 是大漠孤鹰 VHD(X)文件辅助工具中查找 盘符原语句 _SUB getNoDrv ENVI @List1= fdrv -idlec &drvs=*: forx* %&drvs% ,&p0,ENVI @List1=%&p0% ENVI @List1.  详情 回复 发表于 2025-5-18 16:49
回复

使用道具 举报

61#
发表于 2025-5-18 15:16:48 | 只看该作者
Bluebells 发表于 2025-5-18 14:38
没看懂你说啥? 我不记得我有写什么"向vhdx还原", 也不记得有定义过"%&ph%"这样的变量

下载使用您的 Easy-DS.zip  Easy-DS_v2.zip Easy-DS_v2b .zip 在使用还原功能项时  镜像还原到挂接的VHDX,只有Easy-DS.zip能通过  其余二个不能过
语句测试是在打Pecmd.exe 执行窗中进行的,两种写法 获取的值 不一样,一个有值  一个没有值

点评

为什么不能过? [attachimg]558867[/attachimg] 截图为 v2b 的测试结果  详情 回复 发表于 2025-5-18 16:06
回复

使用道具 举报

60#
 楼主| 发表于 2025-5-18 14:38:09 | 只看该作者
oym2016 发表于 2025-5-18 14:30
Bluebells 老师:
    这个pecmd.exe 是不是对使用环境(含硬件)有一定的要求? 老师的三个版都有跟进 ...

没看懂你说啥? 我不记得我有写什么"向vhdx还原", 也不记得有定义过"%&ph%"这样的变量

点评

下载使用您的 Easy-DS.zip Easy-DS_v2.zip Easy-DS_v2b .zip 在使用还原功能项时 镜像还原到挂接的VHDX,只有Easy-DS.zip能通过 其余二个不能过 语句测试是在打Pecmd.exe 执行窗中进行的,两种写法 获取的值 不  详情 回复 发表于 2025-5-18 15:16
回复

使用道具 举报

59#
发表于 2025-5-18 14:30:34 | 只看该作者
本帖最后由 oym2016 于 2025-5-18 14:34 编辑
Bluebells 发表于 2025-5-10 16:04
如果你有认真看完帖子内容就不用做重复工作

Bluebells 老师:
    这个pecmd.exe 是不是对使用环境(含硬件)有一定的要求? 老师的三个版都有跟进,第一个的功能全能用,第二版、第三版 都是还原时直接跳出来(向vhdx还原)。照老师现成语句测试 就是获取不到值,例:
     fdrv -idlec &drvs=*:
    FORX * %&drvs%,&ph,0, ENVI Listvd=%ph%
要改成:
     fdrv -idlec &drvs=*:
    FORX * %&drvs%,&ph,0,%ph%
    ENVI Listvd=%&ph%  
   才能获取值
pecmd 是不是只能在PE下使用?还是我使用方法 有错 初触pecmd语句

点评

fdrv -idlec &drvs=*: FORX * %&drvs%,&ph, {* ENVI Listvd=%ph% //其他命令写这里 //其他命令写这里 //其他命令写这里 //…… }  详情 回复 发表于 2025-5-18 15:38
没看懂你说啥? 我不记得我有写什么"向vhdx还原", 也不记得有定义过"%&ph%"这样的变量  详情 回复 发表于 2025-5-18 14:38
回复

使用道具 举报

58#
发表于 2025-5-17 09:13:02 | 只看该作者
收藏 下载
回复

使用道具 举报

57#
发表于 2025-5-16 12:43:20 来自手机 | 只看该作者
感谢分享,不知分区列表可不可以加一下主分区和逻辑分区的显示,
回复

使用道具 举报

56#
发表于 2025-5-16 10:56:36 | 只看该作者
感谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-2-4 13:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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