无忧启动论坛

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

[原创] dpinfo 2.6.5 beta2 磁盘分区信息 分区相关工具定制脚本

    [复制链接]
121#
发表于 2020-7-13 19:20:48 | 只看该作者
兄弟,图中信息,如何导出到文本
>
代码太长懒的看了。
想导出到当前目录txt文本中
回复

使用道具 举报

122#
 楼主| 发表于 2020-7-13 19:44:02 | 只看该作者
本帖最后由 nttwqz 于 2020-7-13 19:46 编辑
freesoft00 发表于 2020-7-13 19:20
兄弟,图中信息,如何导出到文本
>
代码太长懒的看了。

搜索脚本定制


:sel
    中间内容删除,改为
    call :menu>"%~dp0\dpinfo.txt"
    如果需要获取几乎全部变量信息,则再加一行
    (set dk&set allvol&set vol)>>"%~dp0\dpinfo.txt"
exit
如果只需要磁盘0的变量信息,那个
set dk_0>>"%~dp0\dpinfo.txt"
回复

使用道具 举报

123#
发表于 2020-7-13 19:46:49 | 只看该作者
nttwqz 发表于 2020-7-13 19:44
搜索脚本定制


好的。多谢!
回复

使用道具 举报

124#
发表于 2020-12-24 21:31:17 | 只看该作者
谢谢大神分享!
回复

使用道具 举报

125#
发表于 2021-1-6 10:01:51 | 只看该作者
楼主辛苦了
回复

使用道具 举报

126#
发表于 2021-1-6 10:02:06 | 只看该作者
谢谢分享
回复

使用道具 举报

127#
 楼主| 发表于 2021-3-24 19:54:14 | 只看该作者
Win10的卷号错误bug修复原理是:
通过det disk获取的每个磁盘卷号列表是正确的,但是det part获取的分区卷号错误,找出磁盘卷列表中没有的卷号,就是错误卷号,去掉正确卷号,就是错误卷号对应的正确卷号。如果只有一个分区卷号错误,其肯定是相对应的;如果2个以上错误,对比其大小、文件系统、卷标(一般为空),一个分区只有一个与之相同的才能修复,如果错误卷号中两个分区的大小、文件系统、卷标(一般为空)完全相同,则无法修复,但是此种情况一般少见,因为错误的恢复分区居多。
回复

使用道具 举报

128#
发表于 2021-3-25 20:59:39 | 只看该作者
收下试试看
回复

使用道具 举报

129#
发表于 2021-4-11 10:50:35 | 只看该作者
磁盘大小能否显示为MB?因为分区时是按MB分的,能看到MB的话分区可以更精确些。
回复

使用道具 举报

130#
 楼主| 发表于 2021-4-11 22:26:14 | 只看该作者
本帖最后由 nttwqz 于 2021-4-11 22:51 编辑
szwp 发表于 2021-4-11 10:50
磁盘大小能否显示为MB?因为分区时是按MB分的,能看到MB的话分区可以更精确些。

问题是,怎么通过diskpart获取磁盘大小的单位MB数值?用GB换算成MB本身已经不准确。list disk/det disk都是自动单位,如果能使用diskpart以外的工具则另说。

下面是1T机械800G以上的GPT分区无损调整为三个区的脚本,调整好之后,是300G、300G、剩余空间
你说的应该是压缩过之后的第一个300G分区,因为分区单位GB,大小GB*1024-307208只能得到大概的数值,这就造成了实际调整后的分区可能是300.32G这样的情况,你想要的应该是更准确的数值,我不知道怎么获取磁盘分区MB这样的数值?下个分区的分区偏移量字节值换算?分区偏移量也不一定等于分区大小吧?何况这涉及超范围计算,批处理之家倒是有封装好的函数直接用call来调用。批处理本身直接计算仅支持2G以下空间的字节值,就是2147483647/1024/1024=2047,无法计算大于2147483647的数值

  1.         rem 生成GPT分区无损分区脚本
  2.         if /i "!dk_%sel_hd%_parttable!"=="GPT" (
  3.                 echo;rem %remtip%
  4.                 echo;sel disk %sel_hd%
  5.                 echo;sel part %sel_p%
  6.                 set /a desired=dk_%sel_hd%_%sel_p%_size_num*1024-307208
  7.                 echo;shrink desired=!desired!
  8.                 echo;cre part pri size=307208
  9.                 echo;format fs=ntfs quick override
  10.                 echo;assign
  11.                 echo;cre part pri
  12.                 echo;format fs=ntfs quick override
  13.                 echo;assign
  14.         )>"%temp%\dpscript.sfb"
复制代码


所以,个人忽略了上述情况,因为很多时候300.**文件管理器里也是显示成300G的,至于不是的,无所谓了。你若需要更精确的分区,可以自己写代码,本工具中就是将下个分区的偏移量字节值处理计算后设置成上个分区的MB大小,最后一个只能减去上个分区的字节偏移了,如果你会变量嵌套的话,这并不是什么难事,超范围计算函数你在批处理之家找找。
回复

使用道具 举报

131#
发表于 2021-4-12 11:00:34 | 只看该作者
最近发现同一批次的盘容量也有几十兆的差距。diskpart对于显示单位好像是自动根据容量来显示成GB、MB、KB,或许先分一次区,看剩余可用能精确些,在磁盘管理的磁盘属性-卷里显示的容量是MB。俺再看看有没其它方式获取磁盘的总扇区数。

点评

全新一键分区不同知道具体MB,都是现成方案直接创建  详情 回复 发表于 2021-4-12 11:07
回复

使用道具 举报

132#
 楼主| 发表于 2021-4-12 11:07:29 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2021-4-12 11:09 编辑
szwp 发表于 2021-4-12 11:00
最近发现同一批次的盘容量也有几十兆的差距。diskpart对于显示单位好像是自动根据容量来显示成GB、MB、KB, ...


全新一键分区不用知道具体MB,都是现成方案直接创建

点评

硬盘管理里显示的分区单位通常是G,有2位小数,误差在5兆内才会显示.00。有点强迫症吧,所以经常要在脚本里调整下数字。  详情 回复 发表于 2021-4-12 11:24
回复

使用道具 举报

133#
发表于 2021-4-12 11:24:03 | 只看该作者
nttwqz 发表于 2021-4-12 11:07
全新一键分区不用知道具体MB,都是现成方案直接创建

硬盘管理里显示的分区单位通常是G,有2位小数,误差在5兆内才会显示.00。有点强迫症吧,所以经常要在脚本里调整下数字。

点评

一般整数MB+8就好,比如307205就显示整数300G,102408就显示整数100GB  详情 回复 发表于 2021-4-12 11:37
回复

使用道具 举报

134#
 楼主| 发表于 2021-4-12 11:37:31 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2021-4-12 12:40 编辑
szwp 发表于 2021-4-12 11:24
硬盘管理里显示的分区单位通常是G,有2位小数,误差在5兆内才会显示.00。有点强迫症吧,所以经常要在脚本 ...


一般整数MB+8就好,比如307208就显示整数300G,102408就显示整数100GB

有整数分区计算器,可以搜搜,下面就是一个

https://www.iplaysoft.com/tools/partition-calculator/
回复

使用道具 举报

135#
发表于 2021-4-12 16:18:57 | 只看该作者


不知道为啥有台电脑的硬盘型号没显示出来。

磁盘管理中保留2位小数,所以大于0.005G=5.12MB就有零头.01显示,而硬盘容量只到MB话,还是有可能会有不到0.5MB零头,安全的无零头显示还是+4以内。如果以shrink方式的话,+5也是安全的,下次试试,不过怕会影响分区序号,以前增删后序号有变化引起多引导的错误。


点评

刚研究了下偏移量字节值相减对比分区大小差距,有的相同,有的差几M,有的差几K,有的甚至差1G,看来这个不太准确,也或许需要其它计算方法。  详情 回复 发表于 2021-4-12 17:48
之前用Win7测试的时候发现其不能显示硬盘型号,所以添加限制以防出错,刚测试发现Win7不行,Win7 SP1可以,也就是7601可以。 所以需要改变系统版本号判断如下 并将搜索到的第一个name行if %ver% gtr 61 if  详情 回复 发表于 2021-4-12 17:43
回复

使用道具 举报

136#
 楼主| 发表于 2021-4-12 17:43:34 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2021-4-12 17:50 编辑
szwp 发表于 2021-4-12 16:18
不知道为啥有台电脑的硬盘型号没显示出来。

磁盘管理中保留2位小数,所以大于0.005G=5.12MB就有零头 ...


之前用Win7测试的时候发现其不能显示硬盘型号,所以添加限制以防出错,刚测试发现Win7不行,Win7 SP1可以,也就是7601可以。

所以需要改变系统版本号判断如下

  1. for /f "tokens=2 delims=[]" %%Q in ('ver') do for /f "tokens=2-4 delims=. " %%R in ("%%Q") do set "ver=%%R%%S"&set "verbuild=%%T"
复制代码


并将搜索到的第一个name行if %ver% gtr 61 if not defined dk_!dn!_name开头的if %ver% gtr 61改成if %ver% gtr 60 if %verbuild% gtr 7600

简单试了下,删除版本限制也并没有获取到错误的值

点评

DiskPart 版本 6.1.7601 WIN7 32位,打过SP1 型号未显示。  详情 回复 发表于 2021-4-12 18:09
回复

使用道具 举报

137#
 楼主| 发表于 2021-4-12 17:48:27 来自手机 | 只看该作者
szwp 发表于 2021-4-12 16:18
不知道为啥有台电脑的硬盘型号没显示出来。

磁盘管理中保留2位小数,所以大于0.005G=5.12MB就有零头 ...

刚研究了下偏移量字节值相减对比分区大小差距,有的相同,有的差几M,有的差几K,有的甚至差1G,看来这个不太准确,也或许需要其它计算方法。
回复

使用道具 举报

138#
发表于 2021-4-12 18:09:24 | 只看该作者
nttwqz 发表于 2021-4-12 17:43
之前用Win7测试的时候发现其不能显示硬盘型号,所以添加限制以防出错,刚测试发现Win7不行,Win7 SP1可 ...

DiskPart 版本 6.1.7601
WIN7 32位,打过SP1

型号未显示。
回复

使用道具 举报

139#
发表于 2021-4-12 18:13:49 | 只看该作者
脚本修改后可以显示了。
回复

使用道具 举报

140#
发表于 2021-4-23 20:09:27 | 只看该作者
谢谢分享
回复

使用道具 举报

141#
发表于 2021-5-6 15:46:49 | 只看该作者
谢谢分享!
回复

使用道具 举报

142#
发表于 2021-6-25 08:25:44 | 只看该作者
大师就是牛.......
回复

使用道具 举报

143#
 楼主| 发表于 2022-8-31 22:23:42 | 只看该作者
时隔将近一年,再次更新一下
回复

使用道具 举报

144#
发表于 2022-8-31 22:40:07 | 只看该作者
对于 diskpart bug ,确定 分区 与 卷 对应关系上,
能否考虑 通过下面命令, 获取 字节偏移
  1. select vol 卷号
  2. detail part
复制代码

,配合 下面命令 ,来精准找出 对应关系?
  1. sele disk 盘号
  2. select part 分区号
  3. detail part
复制代码



回复

使用道具 举报

145#
 楼主| 发表于 2022-9-1 01:49:07 | 只看该作者
dos时代菜鸟 发表于 2022-8-31 22:40
对于 diskpart bug ,确定 分区 与 卷 对应关系上,
能否考虑 通过下面命令, 获取 字节偏移
,配合 下 ...

看了下之前的回复,上次研究此bug已经是差不多一年半以前的事情了,我也记不太清除当初为何才用了这种信息对比排除法,感觉代码写多了有时候想法会陷入误区,无法达到当局者也清的境界。

根据之前的记载及刚刚的测试,det disk/list vol获取的卷号的确是正确的,sel part/det part获取的卷号是错误的。既然如此,以det disk/list vol获取的正确卷号通过sel vol/det vol /det part就能获取对应的磁盘与分区的关系,这样依然能获取卷对应的磁盘分区,磁盘的卷列表,这样就跳过这个卷号错误的bug了。

不过呢,选择卷和选择分区获取信息都有bug,我记得有的选择卷获取不到分区信息,有的选择分区获取不到卷信息

刚刚又试了一下,目前发现det disk/list vol获取的卷号还是比较准确的,sel part/det part的bug远不止卷号错误这么简单,目前发现的bug可能只是冰山一角,有属性的都容易出错,下面这种情形连卷号都获取不到了(这也导致了2.6.4中该卷号无法获取的bug),但是选择卷获取正常。diskpart真是从让人从研究到放弃,这bug何其多啊,让人产生一种用编程语言重写的冲动,可惜我不会……

我在考虑,要不要从第一步list vol获取卷号及卷部分信息,det disk获取磁盘所属卷信息,改成将获取的磁盘卷号通过sel vol/det vol/det part获取信息来规避卷号错误bug,不过不知道用的多了会不会发现新的bug。

8.1系统
  1. DISKPART> det disk

  2. Microsoft Virtual Disk
  3. 磁盘 ID: {F728F485-3491-4096-AC8A-F1DD4A3682E1}
  4. 类型   : 虚拟备份的文件
  5. 状态 : 联机
  6. 路径   : 0
  7. 目标 : 0
  8. LUN ID : 2
  9. 位置路径 : UNAVAILABLE
  10. 当前只读状态: 否
  11. 只读: 否
  12. 启动磁盘: 否
  13. 页面文件磁盘: 否
  14. 休眠文件磁盘: 否
  15. 故障转储磁盘: 否
  16. 群集磁盘  : 否

  17.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  18.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  19.   卷     8                      RAW    磁盘分区        2048 MB  正常         已隐藏
  20.   卷     9                      NTFS   磁盘分区          28 GB  正常
  21.   卷     10                     RAW    磁盘分区         100 MB  正常         已隐藏
  22.   卷     11                     NTFS   磁盘分区        1024 MB  正常         已隐藏

  23. DISKPART> list part

  24.   分区 ###       类型              大小     偏移量
  25.   -------------  ----------------  -------  -------
  26.   分区      1    保留                 128 MB    17 KB
  27.   分区      2    系统                 100 MB   129 MB
  28.   分区      3    恢复                1024 MB   229 MB
  29.   分区      4    主要                2048 MB  1253 MB
  30.   分区      5    主要                  28 GB  3301 MB

  31. DISKPART> sel part 4

  32. 分区 4 现在是所选分区。

  33. DISKPART> det vol

  34. 没有选择卷。
  35. 请选择一个卷,再试一次。

  36. DISKPART> det part

  37. 分区 4
  38. 类型    : ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
  39. 隐藏  : 是
  40. 必需: 是
  41. 属性  : 0XF000000000000001
  42. 字节偏移: 1313865728

  43. 没有跟这个分区相关联的卷。

  44. <blockquote>DISKPART> sel vol 8
复制代码


点评

搞了一个 通过 分区 字节偏移量 来定位 分区 与 卷 对应关系的 脚本。不知道 能不能规避 一些bug . [attachimg]506764[/attachimg]  详情 回复 发表于 2022-9-1 13:06
回复

使用道具 举报

146#
 楼主| 发表于 2022-9-1 08:36:23 来自手机 | 只看该作者
论坛又把贴子后半部分吃掉了
回复

使用道具 举报

147#
发表于 2022-9-1 13:06:17 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-9-1 13:22 编辑
nttwqz 发表于 2022-9-1 01:49
看了下之前的回复,上次研究此bug已经是差不多一年半以前的事情了,我也记不太清除当初为何才用了这种信 ...

搞了一个 通过 分区 字节偏移量 来定位 分区 与 卷 对应关系的 脚本。不知道 能不能规避 一些bug .
parts6.7z (1.98 KB, 下载次数: 2)



回复

使用道具 举报

148#
发表于 2023-1-13 19:54:49 | 只看该作者
这么多的代码,楼主辛苦了,感谢分享
回复

使用道具 举报

149#
 楼主| 发表于 2023-2-21 23:29:37 | 只看该作者
本帖最后由 nttwqz 于 2023-2-21 23:55 编辑

测试版更新日志
尝试规避或修复diskpart本身的bug引起的bug

由于diskpart脚本行数的增加等原因效率比2.6.4下降了大约15%



回复

使用道具 举报

150#
发表于 2023-2-21 23:53:33 | 只看该作者
感谢分享 很实用
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-1 13:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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