无忧启动论坛

 找回密码
 注册
搜索

Drive Snapshot 分区备份还原 空壳 [开源]

查看数: 7481 | 评论数: 70 | 收藏 5
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-5-9 13:37

正文摘要:

本帖最后由 Bluebells 于 2025-7-15 16:44 编辑 在无忧启动论坛上有不少这种功能简单的备份还原工具的前端工具, 因此我也凑凑热闹, 使用 PECMD 脚本简单编写了一个 这个前端的功能比较单一, 只有简单的分区备份 ...

回复

12qaz 发表于 2025-5-26 10:15:51
感谢分享
Anson4 发表于 2025-5-21 01:43:32
感谢分享!
527104427 发表于 2025-5-18 23:46:50
oym2016 发表于 2025-5-18 16:49
感谢 5大大 百忙中的帮助

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

关于全域、子域问题,要查看完整代码方可分析。
527104427 发表于 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,%]











527104427 发表于 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





z_wd 发表于 2025-5-18 20:47:53
好东西,很小巧,方便。谢谢
oym2016 发表于 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
527104427 发表于 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
oym2016 发表于 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
Bluebells 发表于 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
oym2016 发表于 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
wuxin9712 发表于 2025-5-17 09:13:02
收藏 下载
aimengyu 发表于 2025-5-16 12:43:20
感谢分享,不知分区列表可不可以加一下主分区和逻辑分区的显示,
怀中猫chat 发表于 2025-5-16 10:56:36
感谢分享
loony_316 发表于 2025-5-15 13:36:05
感谢分享
自然而然 发表于 2025-5-14 23:41:21
感谢分享。
newchen2025 发表于 2025-5-14 23:33:33
谢谢分享
12956 发表于 2025-5-13 18:21:18
感谢分享
yazhiliu 发表于 2025-5-13 14:15:42
感谢分享
fegr 发表于 2025-5-13 13:17:16
感谢分享
SGZOU 发表于 2025-5-12 19:21:37
老师,这个能否添加默认选择C盘?
denslin 发表于 2025-5-12 18:01:18
感谢分享。收下
jonyzhr 发表于 2025-5-12 15:03:44
这个是好东西
86933924 发表于 2025-5-12 00:27:33
感谢分享
tanay88 发表于 2025-5-10 18:24:08
还是这个?好东西啊
piaomusic 发表于 2025-5-10 17:20:15
gxbcm 发表于 2025-5-9 18:40
老师的东西,必须支持一下,定位分区,用到TBI格式,也是非常好用的。

分享一下吧。
Bluebells 发表于 2025-5-10 16:04:02
chishingchan 发表于 2025-5-10 14:37
看似是 PECMD 的代码,因为很少接触,大家觉得呢?

如果你有认真看完帖子内容就不用做重复工作

点评

Bluebells 老师: 这个pecmd.exe 是不是对使用环境(含硬件)有一定的要求? 老师的三个版都有跟进,第一个的功能全能用,第二版、第三版 都是还原时直接跳出来(向vhdx还原)。照老师现成语句测试 就是获取不  详情 回复 发表于 2025-5-18 14:30
chishingchan 发表于 2025-5-10 14:37:52
看似是 PECMD 的代码,因为很少接触,大家觉得呢?
  1. @TEAM ENVI^ EnviMode=1| ENVI^ ForceLocal=1
  2. TEAM SET$ &NL=0d 0a| SET$ &TAB=09
  3. ENVI &::MEXE=%&CurDir%\snapshot.exe
  4. IFEX $%&bX64%=0,! IFEX %&CurDir%\snapshot64.exe,ENVI &::MEXE=%&CurDir%\snapshot64.exe
  5. ENVI ?,&DSVer=FVER,%&::MEXE%

  6. _SUB WIN1,W500H450,Drive Snapshot 分区备份还原,,,
  7.     GROU GROU1,L10T5W475H55,
  8.     LABE LABE1,L20T19W145H16,1. 请选择将要执行的操作:,,,
  9.     RADI RADI1,L100T35W85H20,备份分区(&B),CALL ControlSwitch,1,0
  10.     RADI RADI2,L300T35W85H20,还原分区(&R),CALL ControlSwitch,0,0
  11.    
  12.     GROU GROU2,L10T65W475H205,
  13.     LABE LABE2,L18T79W350H18,2. 请选择一个目标分区:,,,
  14.     IMAG IMAG2,L457T75W20H20,shell32.dll#238,CALL OnTable,
  15.     ENVI @IMAG2.MSG=0x02A1:CALL ControlTip "点击此处以刷新磁盘分区信息"
  16.     ENVI @IMAG2.MSG=0x02A3:TIPS -
  17.     SET &&TITLE=+40:序号%&TAB%+40:盘符%&TAB%=70:总大小%&TAB%=70:可用空间%&TAB%+60:分区类型%&TAB%+60:文件系统%&TAB%95:卷标
  18.     TABL TABL2,L18T97W460H165,%&TITLE%,,0x10040
  19.    
  20.     GROU GROU3,L10T275W475H65,
  21.     LABE LABE3,L18T289W350H18,3. 请选择映像文件路径:,,,
  22.     LIST LIST3,L20T310W410H20,,,,0x4
  23.     LIST LIST4,L20T310W410H20,,,,
  24.     ITEM ITEM3,L440T309W35H22,...,CALL PickImageFile,,
  25.    
  26.     ITEM ITEM4,L350T355W60H30,执行,CALL StartingBackupRestore,
  27.     ITEM ITEM5,L425T355W60H30,退出,EXIT FILE,
  28.    
  29.     LABE+ ,L-1T400W500H1,,,
  30.     LABE -left LABE4,L5T405W350H12,,,
  31.     FIND $%&DSVer%=,! LABE -right LABE5,L385T405W105H12,snapshot %DSVer%,EXEC %&::MEXE%,0xFF0000,
  32.    
  33.     CALL Initialize
  34. _END

  35. CALL @WIN1

  36. _SUB OnTable
  37.     ENVI &TableInfo=
  38.     PART list disk ,&AllDisks
  39.     FORX * %&AllDisks%,&DiskNum,
  40.     {
  41.         PART list part %&DiskNum%,&AllParts
  42.         FORX * %&AllParts%,&PartNum,
  43.         {
  44.             IFEX $%&PartNum%>0,! EXIT -
  45.             TEAM ENVI &ID=| &DL=| ENVI &VS=| ENVI &VFS=| ENVI &TP=| ENVI &FS=| ENVI &VL=| ENVI &Unit1=| ENVI &Unit2=
  46.             ENVI &ID=%&DiskNum%:%&PartNum%
  47.             PART list part %&DiskNum%:%&PartNum%,&PartInfo
  48.             MSTR &TP,&VS,&DL=<3><5><8>%PartInfo%
  49.             IFEX \\?\Harddisk%&DiskNum%Partition%&PartNum%\=?,&VFS
  50.             FDRV -vol &VL,&FS=\\?\Harddisk%&DiskNum%Partition%&PartNum%
  51.             IFEX $%&VS%<1024,ENVI &Unit1=Byte
  52.             IFEX $%&VS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VS = %&VS% / 1024 ##2| ENVI &Unit1=KB
  53.             IFEX $%&VS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VS = %&VS% / 1024 ##2| ENVI &Unit1=MB
  54.             IFEX $%&VS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VS = %&VS% / 1024 ##2| ENVI &Unit1=GB
  55.             IFEX $%&VS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VS = %&VS% / 1024 ##2| ENVI &Unit1=TB
  56.             IFEX $%&VFS%<1024,ENVI &Unit2=Byte
  57.             IFEX $%&VFS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VFS = %&VFS% / 1024 ##2| ENVI &Unit2=KB
  58.             IFEX $%&VFS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VFS = %&VFS% / 1024 ##2| ENVI &Unit2=MB
  59.             IFEX $%&VFS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VFS = %&VFS% / 1024 ##2| ENVI &Unit2=GB
  60.             IFEX $%&VFS%>1024,TEAM CALC [        DISCUZ_CODE_0        ]amp;VFS = %&VFS% / 1024 ##2| ENVI &Unit2=TB
  61.             FIND $%TP%<>GPT,ENVI &TP=MBR
  62.             ENVI &TableInfo=%&TableInfo%%&ID%%&TAB%%&DL%%&TAB%%&VS%%&Unit1%%&TAB%%&VFS%%&Unit2%%&TAB%%&TP%%&TAB%%&FS%%&TAB%%&VL%%NL%
  63.         }
  64.     }
  65.     ENVI @TABL2.Val=1*#;%&TableInfo%
  66. _END

  67. _SUB ControlTip
  68.     TEAM TIPS -| ENVI &ShowContent=
  69.     ENVI &ShowContent=%~1
  70.     ENVI @@Cur=?&CurXM;&CurYM
  71.     TIPS ,%&ShowContent%,,0,@AL%&CurXM%T%&CurYM%
  72. _END

  73. _SUB ControlSwitch
  74.     ENVI @LIST3.Visible=%RADI1.Check%
  75.     ENVI @LIST4.Visible=%RADI2.Check%
  76. _END

  77. _SUB Initialize
  78.     CALL OnTable
  79.     CALL ControlSwitch
  80.     THREAD* CALL ScanImageFiles
  81. _END

  82. _SUB ScanImageFiles
  83.     ENVI @LABE4=正在扫描本地磁盘上的 SNA 映像文件...
  84.     FORX /S:3 \*.sna,&ImageFiles,0,ENVI @LIST4.ADD=%&ImageFiles%
  85.     FIND $%LABE4%=正在扫描本地磁盘上的 SNA 映像文件...,ENVI @LABE4=准备就绪
  86. _END

  87. _SUB PickImageFile
  88.     IFEX $%RADI1.Check%=1,
  89.     {
  90.         BROW &ImageFile,&,请指定用于保存备份的映像文件,SNA 映像文件(*.sna)|*.sna|,0x802
  91.         FIND $%&ImageFile%=,!
  92.         {
  93.             FEXT &FileExt=%&ImageFile%
  94.             FIND $%&FileExt%=,ENVI @LIST3.ADDSEL=%&ImageFile%.sna! ENVI @LIST3.ADDSEL=%&ImageFile%
  95.         }
  96.     }
  97.     IFEX $%RADI2.Check%=1,
  98.     {
  99.         BROW &ImageFile,,请指定用于还原备份的映像文件,SNA 映像文件(*.sna)|*.sna|,0x1000
  100.         FIND $%&ImageFile%=,! ENVI @LIST4.ADDSEL=%&ImageFile%
  101.     }
  102. _END

  103. _SUB StartingBackupRestore
  104.     TEAM ENVI &DrvLtr=| ENVI &DiskNum=| ENVI &PartNum=| ENVI &BParam=| ENVI &OParam=
  105.     ENVI @TABL2.Sel=?&&Sel
  106.     ENVI @TABL2.Val=?%Sel%.1;&DiskPart
  107.     ENVI @TABL2.Val=?%Sel%.2;&DrvLtr
  108.     MSTR -delims:: &DiskNum,&PartNum=<1><2>%&DiskPart%
  109.     CALC #&DiskNum = %&DiskNum% + 1
  110.     IFEX $%RADI1.Check%=1,
  111.     {
  112.         IFEX $1>%&Sel%,TEAM MESS+icon6 您尚未选择要备份的源分区!@错误 #OK *-5000| EXIT _SUB
  113.         FIND $%LIST3%=,TEAM MESS+icon6 保存备份映像的路径不能为空!@错误 #OK *-5000| EXIT _SUB
  114.         ENVI &OParam=--usevss
  115.         FIND $%&DrvLtr%=,ENVI &BParam=HD%&DiskNum%:%&PartNum% "%LIST3%"!
  116.         {
  117.             ENVI &BParam=%&DrvLtr% "%LIST3%"
  118.             MESS+icon0 是否要在备份前对源分区执行 CHKDSK /F (修复磁盘错误)?@检查磁盘 #YN $Y
  119.             FIND $%YESNO%=YES,EXEC -wait -hide CHKDSK /F %&DrvLtr%
  120.         }
  121.         TEAM ENVI @LABE4=正在备份分区,请稍等...| ENVI @ITEM4.Enable=0| ENVI @ITEM5.Enable=0
  122.         EXEC -wait %&::MEXE% %&BParam% %&OParam%
  123.         ENVI @LIST4.ADDSEL=%LIST3%
  124.     }
  125.     IFEX $%RADI2.Check%=1,
  126.     {
  127.         IFEX $1>%&Sel%,TEAM MESS+icon6 您尚未选择要还原的目标分区!@错误 #OK *-5000| EXIT _SUB
  128.         IFEX %LIST4%,! TEAM MESS+icon6 您尚未指定映像文件或指定的映像文件不存在!@错误 #OK *-5000| EXIT _SUB
  129.         FIND $%&DrvLtr%=,ENVI &BParam="%LIST4%" HD%&DiskNum%:%&PartNum%! ENVI &BParam="%LIST4%" %&DrvLtr%
  130.         MESS+icon1 您确定要将映像内容还原到"驱动器 %&DiskPart%"?@还原确认 #OKC $C
  131.         FIND $%YESNO%=CANCEL,EXIT _SUB
  132.         TEAM ENVI @LABE4=正在还原分区,请稍等...| ENVI @ITEM4.Enable=0| ENVI @ITEM5.Enable=0
  133.         EXEC -wait %&::MEXE% %&BParam%
  134.     }
  135.     CALL OnTable
  136.     TEAM ENVI @LABE4=准备就绪| ENVI @ITEM4.Enable=1| ENVI @ITEM5.Enable=1
  137. _END
复制代码


点评

如果你有认真看完帖子内容就不用做重复工作  详情 回复 发表于 2025-5-10 16:04
linkz08 发表于 2025-5-10 13:32:00
本帖最后由 linkz08 于 2025-5-10 14:07 编辑

这个方便实用!多谢分享!在有些PE中试用好象点击选择路径没反应,无法下一步操作,应该是PE有点问题!同一PE中用简易版壳正常!

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

闽公网安备 35020302032614号

GMT+8, 2025-7-18 12:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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