无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
15511#
发表于 2020-12-31 16:12:57 | 只看该作者
求代码:
备份第一块本地硬盘第32~34扇区数据到文件?
从文件恢复数据到第一块本地硬盘第32~34扇区?
回复

使用道具 举报

15512#
发表于 2020-12-31 16:31:19 来自手机 | 只看该作者
feiyike 发表于 2020-12-31 16:12
求代码:
备份第一块本地硬盘第32~34扇区数据到文件?
从文件恢复数据到第一块本地硬盘第32~34扇区?

GETF和putf
回复

使用道具 举报

15513#
发表于 2020-12-31 16:47:28 | 只看该作者
本帖最后由 红毛樱木 于 2020-12-31 16:55 编辑
feiyike 发表于 2020-12-31 16:12
求代码:
备份第一块本地硬盘第32~34扇区数据到文件?
从文件恢复数据到第一块本地硬盘第32~34扇区?


备份第一块本地硬盘第32~34扇区数据到文件
  1. ENVI &hd=0
  2. PART -iv=6 list disk %&hd%,&SectorSize
  3. GETF \\.\PhysicalDrive%&hd%,(31*%&SectorSize%)#(33*%&SectorSize%),&infos
  4. IFEX "%&CurDir%\infos.Dat", FILE "%&CurDir%\infos.Dat"
  5. PUTF "%&CurDir%\infos.Dat",0#,%&infos%
复制代码


恢复的话,套一下PUTF就行了
不过扇区大小不一样的话,恢复过去可能需要自己拆成之前备份时候扇区的大小,一个个的扇区恢复
回复

使用道具 举报

15514#
发表于 2021-1-1 10:14:40 | 只看该作者
红毛樱木 发表于 2020-12-31 16:47
备份第一块本地硬盘第32~34扇区数据到文件

多谢!反复实验,搞懂了
再请教:
内置的 .MSI文件怎么运行?不想用临时文件的方式
   
     PUTF -dd -bs=10M %&F1%,0,"."#101|EXEDATA
     EXEC =msiexec.exe /i %&F1%


回复

使用道具 举报

15515#
发表于 2021-1-1 22:57:47 | 只看该作者
feiyike 发表于 2021-1-1 10:14
多谢!反复实验,搞懂了
再请教:
内置的 .MSI文件怎么运行?不想用临时文件的方式

MSI需要msiexec.exe调用的,首先msiexec.exe就不支持吧?
回复

使用道具 举报

15516#
发表于 2021-1-2 10:32:39 | 只看该作者
DFMT命令格式化磁盘时,能不能使用磁盘号去定位磁盘而不是盘符?比如0:1去格式化0磁盘1分区
回复

使用道具 举报

15517#
发表于 2021-1-2 15:57:11 来自手机 | 只看该作者
caocaofff 发表于 2021-1-2 10:32
DFMT命令格式化磁盘时,能不能使用磁盘号去定位磁盘而不是盘符?比如0:1去格式化0磁盘1分区

这个需求能简化几行代码,哈哈
回复

使用道具 举报

15518#
 楼主| 发表于 2021-1-2 16:18:03 | 只看该作者
caocaofff 发表于 2021-1-2 10:32
DFMT命令格式化磁盘时,能不能使用磁盘号去定位磁盘而不是盘符?比如0:1去格式化0磁盘1分区



TEAM  FDRV *rsort *idle  &&Drvs=*:| MSTR &&Drv1=<1>%&Drvs%| FIND *<>&&Drvs, TEAM~  SHOW & 0:1,%&&Drv1%~ DFMT  %&&Drv1%,NTFS,RamDisk,1~ SUBJ  &  %&&Drv1%
回复

使用道具 举报

15519#
发表于 2021-1-2 19:44:31 | 只看该作者
mdyblog 发表于 2021-1-2 16:18
TEAM  FDRV *rsort *idle  &&Drvs=*:| MSTR &&Drv1=%&Drvs%| FIND *&&Drvs, TEAM~  SHOW & 0:1,%&&Dr ...

他意思应该是想用DFMT后面直接接分区号,省事的代码那种
回复

使用道具 举报

15520#
发表于 2021-1-4 18:50:50 | 只看该作者
mdyblog 发表于 2021-1-2 16:18
TEAM  FDRV *rsort *idle  &&Drvs=*:| MSTR &&Drv1=%&Drvs%| FIND *&&Drvs, TEAM~  SHOW & 0:1,%&&Dr ...

BootOrder_EFI-Set.wcs 中的括号是不是多了一个?


回复

使用道具 举报

15521#
 楼主| 发表于 2021-1-4 19:06:01 | 只看该作者
527104427 发表于 2021-1-4 18:50
BootOrder_EFI-Set.wcs 中的括号是不是多了一个?

还真是的。 已修改。
回复

使用道具 举报

15522#
 楼主| 发表于 2021-1-10 06:42:22 | 只看该作者
本帖最后由 mdyblog 于 2021-1-10 11:23 编辑

获得启动分区    GetBootDev2.wcs.zip (2.84 KB, 下载次数: 9)
效果:
GetSystemSystemPartition  &&BootDrv1  "-m"

//Bootdev: [\Device\HarddiskVolume2      "L:"    "\??\Volume{fafc2065-0000-0000-001e-cc0114000000}"]

GetBootDrv  &&BootDrv  "-m"

//[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk1\Partition2"  "\Device\HarddiskVolume2"      "L:"    "\??\Volume{fafc2065-0000-0000-001e-cc0114000000}"
//SystemBootDevice "\ArcName\multi(0)disk(0)vdisk(0)partition(1)"  "\Device\Harddisk2\Partition1"  "\Device\HarddiskVolume9"      "C:"    "\??\Volume{3e245a5f-0000-0000-0000-100000000000}"]


GetBootDrv  &&BootDrv  "-b"


//[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk1\Partition2"  "\Device\HarddiskVolume2"      "L:"    "\??\Volume{fafc2065-0000-0000-001e-cc0114000000}"


如果没有盘符,加载盘符

TEAM FDRV *idlec *sort &&Drvs=*:| MSTR  &Drv1=<1>%&Drvs%| SUBJ  & \Device\HarddiskVolume2,%Drv1%
//SUBJ  &  %Drv1%,\Device\Harddisk2\Partition1
//EXEC -su -incmd =PECMD   SUBJ * \Device\HarddiskVolume2,%Drv1%
//用完  SUBJ  &-  %Drv1%


另外, 没有盘符也可以直接操作

列出文件:
FORX  /S  \\?\Harddisk1Partition2\*.*,&V,,*
MESS。 %&V%
FORX  /S  \\?\HarddiskVolume2\*.*,&V,,*


拷出文件:
FILE -file \\?\HarddiskVolume2\boot\bcd=>bcd
//FILE -file \\?\Harddisk1Partition2\boot\bcd=>bcd


//修改 BCD 。。。


拷回文件:
FILE -file -su bcd=>\\?\HarddiskVolume2\boot\bcd
//FILE -file -su bcd=>\\?\Harddisk1Partition2\boot\bcd
//EXEC -su -incmd =PECMD   FILE -file -su bcd=>\\?\Harddisk1Partition2\boot\bcd


测试 对 设定“只读+无盘符+隐藏”的GPT-ESP分区, 这样 读写操作也有效
//[相反] 对 系统已自动分配盘符的   “只读”普通GPT分区,写均失败。 真的只读保护了。(必须先去掉只读保护)
回复

使用道具 举报

15523#
发表于 2021-1-10 09:19:45 | 只看该作者
mdyblog 发表于 2021-1-10 06:42
获得启动分区   
效果:
GetSystemSystemPartition  &&BootDrv1  "-m"

原来file和forx也能这么用,太好了
回复

使用道具 举报

15524#
 楼主| 发表于 2021-1-10 09:41:48 | 只看该作者
本帖最后由 mdyblog 于 2021-1-10 09:49 编辑
527104427 发表于 2021-1-10 09:19
原来file和forx也能这么用,太好了

GETF READ WRIT IFEX  等文件操作都可以这么用。
IFEX \\?\Harddisk1Partition3\efi\microsoft\boot\bcd, MESS YYY! MESS NNN
GETF \\?\Harddisk1Partition3\efi\microsoft\boot\bcd,0#2,&V
READ  \\?\Harddisk1Partition2\boot\grub\grub.cfg,1,&V

WRIT  \\?\Harddisk1Partition2\AAA.INI,$+0,%&V%


回复

使用道具 举报

15525#
发表于 2021-1-10 10:15:10 | 只看该作者
mdyblog 发表于 2021-1-10 09:41
GETF READ WRIT IFEX  等文件操作都可以这么用。
IFEX \\?\Harddisk1Partition3\efi\microsoft\boot\bcd ...

说明书上都没有,我以为不支持呢。另外,fdir能这么用吗,上次试了一下,貌似不能
回复

使用道具 举报

15526#
 楼主| 发表于 2021-1-10 10:22:10 | 只看该作者
本帖最后由 mdyblog 于 2021-1-10 10:29 编辑
527104427 发表于 2021-1-10 10:15
说明书上都没有,我以为不支持呢。另外,fdir能这么用吗,上次试了一下,貌似不能

说明书上有:





FDIR可以:
FDIR &V=\\?\Harddisk1Partition2\boot\grub\grub.cfg
MESS. [%&V%]
//  [\\?\Harddisk1Partition2\boot\grub]


FDRV也可以:
FDRV &V=\\?\Harddisk1Partition2\boot\grub\grub.cfg
MESS. [%&V%]
//  [\\?\Harddisk1Partition2]


回复

使用道具 举报

15527#
发表于 2021-1-10 11:51:42 | 只看该作者

好的
回复

使用道具 举报

15528#
发表于 2021-1-10 16:09:20 | 只看该作者
下面数据剔除重复行,怎么处理?
1,,53335.730,31347.620,52.460
2,,53331.150,31333.340,49.379
3,,53331.150,31333.340,49.379
4,,53335.730,31347.620,52.460
.......
13,,53362.800,31340.890,53.642
14,,53362.800,31340.890,53.642
15,,53344.100,31322.260,48.737
16,,53362.800,31340.890,53.642
17,,53348.660,31364.210,56.508
18,,53331.840,31362.690,53.322
19,,53362.800,31340.890,53.642
......

有n多行,第1、4行,第2、3行,第13、14、19行,判定为重复行
回复

使用道具 举报

15529#
发表于 2021-1-10 16:42:58 来自手机 | 只看该作者
feiyike 发表于 2021-1-10 16:09
下面数据剔除重复行,怎么处理?
1,,53335.730,31347.620,52.460
2,,53331.150,31333.340,49.379

变相的把数据都放到list里,再取出来
回复

使用道具 举报

15530#
发表于 2021-1-10 21:31:28 | 只看该作者

老大,发现 LTSB 2016 运行 GetBootDev.wcs 有点问题,并不能发现盘符。系统是从
https://next.itellyou.cn 中下载的。
步骤1:先用 SUBJ *Z:,\Device\HarddiskVolume4 挂载ESP分区

步骤2:运行 GetBootDev.wcs



系统下载地址:cn_windows_10_enterprise_2016_ltsb_x64_dvd_9060409.iso (3.56 GB)
用这个迅雷下载很快,破解会员加速的:http://bbs.wuyou.net/forum.php?m ... &fromuid=378114



点评

SUBJ 强行加的DRV, 不在核心。(当然可以分析,配对 用户层盘符, 那还要加代码) 简单的方法, 可以调整顺序 步骤1:运行 GetBootDev.wcs 如果没有没有盘符, SUBJ & Z:,\Device\HarddiskVolume4 挂载E  详情 回复 发表于 2021-1-11 09:49
回复

使用道具 举报

15531#
 楼主| 发表于 2021-1-11 09:44:54 | 只看该作者
feiyike 发表于 2021-1-10 16:09
下面数据剔除重复行,怎么处理?
1,,53335.730,31347.620,52.460
2,,53331.150,31333.340,49.379

前面的 “19,,”也是改行数据的一部分吗?
回复

使用道具 举报

15532#
 楼主| 发表于 2021-1-11 09:49:13 | 只看该作者
527104427 发表于 2021-1-10 21:31
老大,发现 LTSB 2016 运行 GetBootDev.wcs 有点问题,并不能发现盘符。系统是从 https://next.itellyou. ...

SUBJ 强行加的DRV, 不在核心。(当然可以分析,配对 用户层盘符, 那还要加代码)


简单的方法,
可以调整顺序
步骤1:运行 GetBootDev.wcs

如果没有没有盘符, SUBJ & Z:,\Device\HarddiskVolume4 挂载ESP分区
//。。。。


SUBJ &-  Z:

点评

加盘符是个办法,但也有特殊情况,比如盘符耗尽的时候。 不知道part命令能否直接通过\Device\HarddiskVolume4这种形式获取到详细信息呢,这样就比较靠谱了  详情 回复 发表于 2021-1-11 10:45
回复

使用道具 举报

15533#
 楼主| 发表于 2021-1-11 10:26:22 | 只看该作者
feiyike 发表于 2021-1-10 16:09
下面数据剔除重复行,怎么处理?
1,,53335.730,31347.620,52.460
2,,53331.150,31333.340,49.379

导入数组, 再剔除。
TrimX.WCS.zip (732 Bytes, 下载次数: 6)
  1. ENVI^ ForceLocal=1
  2. @IFEX  %CurFile%.LOG, LOGS * %CurFile%.LOG

  3. SET$ NL=0d 0a
  4. SET &VS=
  5. \1,,53335.730,31347.620,52.460
  6. \%NL%2,,53331.150,31333.340,49.379
  7. \%NL%3,,53331.150,31333.340,49.379
  8. \%NL%4,,53335.730,31347.620,52.460
  9. \%NL%13,,53362.800,31340.890,53.642
  10. \%NL%14,,53362.800,31340.890,53.642
  11. \%NL%15,,53344.100,31322.260,48.737
  12. \%NL%16,,53362.800,31340.890,53.642
  13. \%NL%17,,53348.660,31364.210,56.508
  14. \%NL%18,,53331.840,31362.690,53.322
  15. \%NL%19,,53362.800,31340.890,53.642

  16. //剔除重复行
  17. _SUB  TrimX  // &VS 3  [,]
  18.     FIND $%~3=,SET &tr=,! SET &tr=%~3
  19.     SET id=%~2
  20.     SET &I=0
  21.     FORX *NL %~1,&&Vi, @TEAM @CALC #I=%I%+1| SET &Vi[%&I%]=%Vi%
  22.     SET &N=%I%
  23.     SET &V2=
  24.     SET &I=0
  25.     LOOP #%I%<%N%,
  26.     {   CALC #&I=%I% + 1
  27.         ^FIND *Vi[%I%]=, EXIT -
  28.         ^SET<  V2=%%NL%%%%Vi[%I%]%%
  29.         ^MSTR * -delims:%tr%  &&Vi3=<%id%->&Vi[%I%]
  30.         CALC #&&J=%I%
  31.         LOOP #%J%<%N%,
  32.         {   CALC #&J=%J% + 1
  33.             ^MSTR * -delims:%tr% &&VJ3=<%id%->&Vi[%J%]
  34.             ^FIND *Vi3=Vj3, SET Vi[%J%]=
  35.         }
  36.     }

  37.     MSTR * V2=3,0,V2
  38.     ENVI-ret~ %~1=&V2
  39. _END

  40. TrimX  &VS  3   ,  //逗号分开, 第3列开始
  41. MESS. %&VS%
复制代码


点评

谢谢m大,有够学习一阵儿了  详情 回复 发表于 2021-1-11 15:57
回复

使用道具 举报

15534#
发表于 2021-1-11 10:45:38 | 只看该作者
mdyblog 发表于 2021-1-11 09:49
SUBJ 强行加的DRV, 不在核心。(当然可以分析,配对 用户层盘符, 那还要加代码)

加盘符是个办法,但也有特殊情况,比如盘符耗尽的时候。
不知道part命令能否直接通过\Device\HarddiskVolume4这种形式获取到详细信息呢,这样就比较靠谱了

点评

[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)" "\Device\Harddisk0\Partition2" "\Device\HarddiskVolume2" \Device\Harddisk0\Partition2 就是分区 0:2 PART -phy# list part 0:  详情 回复 发表于 2021-1-11 11:42
回复

使用道具 举报

15535#
 楼主| 发表于 2021-1-11 11:42:22 | 只看该作者
本帖最后由 mdyblog 于 2021-1-11 11:55 编辑
527104427 发表于 2021-1-11 10:45
加盘符是个办法,但也有特殊情况,比如盘符耗尽的时候。
不知道part命令能否直接通过\Device\HarddiskVo ...

[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk0\Partition2"  "\Device\HarddiskVolume2"
\Device\Harddisk0\Partition2  就是分区 0:2

PART -phy#  list   part 0:2,&&V
MESS. %&V%
// 2     7   1    85929500160   107374182400   167831055   193303682560    2  C:
//这里可得到用户层的盘符

用 "\Device\HarddiskVolume2 也可以 , \Device\换为 \\.\
part list volume \\.\HarddiskVolume2,&&V
// \\.\Harddisk0Partition2\ 0 2 7 7 85929500160 107374182400
\Device\Harddisk0\Partition2 也可对应
part list volume \\.\Harddisk0Partition2,V
// \\.\Harddisk0Partition2\ 0 2 7 7 85929500160 107374182400





点评

这个好!如果能有个 -fill 参数就更好了,直接返回盘符 part -fill list volume \\.\HarddiskVolume2,&&V  详情 回复 发表于 2021-1-11 12:02
回复

使用道具 举报

15536#
发表于 2021-1-11 12:02:03 | 只看该作者
mdyblog 发表于 2021-1-11 11:42
[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk0\Partition2" ...

这个好!如果能有个 -fill 参数就更好了,直接返回盘符
part -fill list volume \\.\HarddiskVolume2,&&V

点评

PART -iv=8 list part 0:2,&&V MESS. %&V% //C:  详情 回复 发表于 2021-1-11 12:07
回复

使用道具 举报

15537#
 楼主| 发表于 2021-1-11 12:07:07 | 只看该作者
527104427 发表于 2021-1-11 12:02
这个好!如果能有个 -fill 参数就更好了,直接返回盘符
part -fill list volume \\.\HarddiskVolume2,&& ...

PART -iv=8  list   part 0:2,&&V
MESS. %&V%
//C:
回复

使用道具 举报

15538#
发表于 2021-1-11 15:57:45 | 只看该作者
mdyblog 发表于 2021-1-11 10:26
导入数组, 再剔除。

谢谢m大,有够学习一阵儿了
回复

使用道具 举报

15539#
 楼主| 发表于 2021-1-11 23:22:35 | 只看该作者
本帖最后由 mdyblog 于 2021-1-12 09:19 编辑
527104427 发表于 2021-1-11 12:02
这个好!如果能有个 -fill 参数就更好了,直接返回盘符
part -fill list volume \\.\HarddiskVolume2,&& ...

GetBootDev3.wcs.zip (2.92 KB, 下载次数: 7)

PECMD2012.1.88.05.84Stable-210111.7z
回复

使用道具 举报

15540#
发表于 2021-1-12 08:09:04 | 只看该作者
本帖最后由 527104427 于 2021-1-12 08:11 编辑
mdyblog 发表于 2021-1-10 06:42
获得启动分区   
效果:
……
//EXEC -su -incmd =PECMD   SUBJ * \Device\HarddiskVolume2,%Drv1%

EXEC -su -incmd =PECMD   SUBJ * \Device\HarddiskVolume2,%Drv1%
这里是不是搞反了,是不是应该这样写:
EXEC -su -incmd =PECMD   SUBJ * %Drv1%,\Device\HarddiskVolume2

点评

对。 EXEC -su -incmd =PECMD SUBJ * %Drv1%,\Device\HarddiskVolume2  详情 回复 发表于 2021-1-12 09:17
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 04:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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