无忧启动论坛

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

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

    [复制链接]
跳转到指定楼层
#
发表于 2018-6-13 01:47:40 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 nttwqz 于 2023-7-19 23:21 编辑



功能简介
        1. 显示磁盘及分区的相关信息。磁盘大小,名称、分区表类型、磁盘属性;分区大小、类型、可用空间、文件系统、分区属性、活动/ESP分区等等,支持非Windows文件系统识别(基于ID)
        2. 磁盘及分区的各种信息都并定义成了变量,方便定制修改涉及磁盘分区方面的脚本,实现各种用途,您只需要套用现成的变量就能写出功能强大的脚本,脚本末尾附有变量说明可供参考。
        3. dpinfo基于diskpart开发,WinPE下使用需要有diskpart组件,不需要任何第三方工具支持,仅支持Win7以上简体中文操作系统。仅具有获取磁盘、虚拟磁盘、分区、卷等信息的功能,并不会操作磁盘分区(删除、新建、格式化、清空等),目前尚未遇到获取信息就丢失数据的先例。
        4. 作者nttwqz尽可能的修复bug,哪怕是diskpart本身的bug,但仍然无法保证有瑕疵。有问题,请回帖反馈。
        5. 您基于本脚本定制的工具,可以用于商业用途,请您充分测试,以免发生灾难性后果,特别是涉及全自动分区类的工具,作者不会为此造成的任何损失负责,不放心不同意此条款的请勿使用。


基于dpinfo开发的工具
        1. DP盘符整理


diskpart已知问题

部分问题不一定会发生,但确实都遇到过

  • 某些移动设备list part时自动选中分区,且无法选择分区,可以选择卷,sel vol #/det part也会提示没有选择分区
  • Win10,GPT,det part获取分区属性非0000000000000000的分区时卷号等信息可能错误,det disk/list vol卷号正确
  • Win10,GPT,恢复分区,sel part #/det vol无法显示卷容量等信息,但sel vol #/det part/detail vol正常
  • Win10,MBR,ID=EF时(ESP),sel part #/det part无法显示卷,但sel vol #/det part/detail vol正常
  • Win10,U盘多分区支持不完善,卷选择、获取卷、磁盘信息异常,无法获取全部卷信息
  • 动态磁盘,sel vol #/det part提示没有选择分区,但sel part #/det part/det vol正常



更新日志
        1. 解决部分已知问题


下载
dpinfo_2.6.4.7z (16.95 KB, 下载次数: 354)


测试版下载 2.6.5 beta2
dpinfo_2.6.5_beta_2.7z (16.34 KB, 下载次数: 15)

其它地址
https://sourceforge.net/projects/dpinfo/

评分

参与人数 12无忧币 +60 收起 理由
pda8888 + 5
wuxin9712 + 5 很给力!
879792799 + 5 很给力!
shan + 5 很给力!
rrscsm2000 + 5 很给力!
chshrm + 5 很给力!
gtc + 5 很给力!
有阴也有阳 + 5 无忧论坛在批处理上除五大等少数人外你是最.
20090101 + 5 批处理写得真是6
q8155128 + 5 很给力! 大师就是牛......
dos时代菜鸟 + 5 赞一个!
freesoft00 + 5

查看全部评分

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

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

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



回复

使用道具 举报

157#
发表于 2024-3-16 06:12:34 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

156#
发表于 2023-3-29 19:15:38 | 只看该作者
学习一下
回复

使用道具 举报

155#
发表于 2023-3-29 19:04:52 来自手机 | 只看该作者
顶顶
回复

使用道具 举报

154#
发表于 2023-3-16 18:20:58 | 只看该作者
支持大佬
回复

使用道具 举报

153#
发表于 2023-3-15 21:49:33 | 只看该作者
支持大大更新
回复

使用道具 举报

152#
 楼主| 发表于 2023-3-15 21:40:29 | 只看该作者
更新一下,继续完善修复因diskpart自身bug引起的bug
回复

使用道具 举报

151#
发表于 2023-3-4 12:05:26 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

150#
发表于 2023-3-3 20:43:53 | 只看该作者


还是自己打造的工具用起来习惯,一般也不用坐轮椅! 在这里也分享给大家。(bat 文件)

DiskPart 磁盘管理工具.bat.txt

83.24 KB, 下载次数: 3, 下载积分: 无忧币 -2

回复

使用道具 举报

149#
发表于 2023-3-2 17:04:41 | 只看该作者
初学CMD  希望大佬能够指点
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

146#
发表于 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)



回复

使用道具 举报

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

使用道具 举报

144#
 楼主| 发表于 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
回复

使用道具 举报

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

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



点评

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

DiskPart 版本 6.1.7601
WIN7 32位,打过SP1

型号未显示。
回复

使用道具 举报

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

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

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

使用道具 举报

135#
 楼主| 发表于 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
回复

使用道具 举报

134#
发表于 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
回复

使用道具 举报

133#
 楼主| 发表于 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/
回复

使用道具 举报

132#
发表于 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
回复

使用道具 举报

131#
 楼主| 发表于 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
回复

使用道具 举报

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

点评

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

使用道具 举报

129#
 楼主| 发表于 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大小,最后一个只能减去上个分区的字节偏移了,如果你会变量嵌套的话,这并不是什么难事,超范围计算函数你在批处理之家找找。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-25 04:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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