无忧启动论坛

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

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

    [复制链接]
发表于 2018-6-13 01:47:40 | 显示全部楼层 |阅读模式
本帖最后由 nttwqz 于 2023-7-19 23:21 编辑

捕获.PNG


功能简介
        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, 下载次数: 349)

评分

参与人数 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

查看全部评分

 楼主| 发表于 2023-2-21 23:29:37 | 显示全部楼层
本帖最后由 nttwqz 于 2023-2-21 23:55 编辑

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

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



回复

使用道具 举报

发表于 2018-6-13 06:50:59 来自手机 | 显示全部楼层
必须支持,必须回帖

点评

牛牛...... 你现在都不理俺里.......  详情 回复 发表于 2018-6-13 08:17
回复

使用道具 举报

发表于 2018-6-13 08:17:08 | 显示全部楼层
大师就是牛.......

支持支持个.......
回复

使用道具 举报

发表于 2018-6-13 08:17:40 | 显示全部楼层
窄口牛 发表于 2018-6-13 06:50
必须支持,必须回帖

牛牛......

你现在都不理俺里.......

点评

不至于哭成这个样子吧  详情 回复 发表于 2018-6-13 08:24
回复

使用道具 举报

发表于 2018-6-13 08:19:07 | 显示全部楼层
大师的GIF图是用的啥软件呢?????

点评

好神奇,此软件基本每次发帖比有人问! 好像是gifcam  详情 回复 发表于 2018-6-13 10:20
回复

使用道具 举报

发表于 2018-6-13 08:19:42 | 显示全部楼层
回帖支持。
回复

使用道具 举报

发表于 2018-6-13 08:20:08 | 显示全部楼层
是么,真行哈!
回复

使用道具 举报

发表于 2018-6-13 08:23:45 | 显示全部楼层
感谢大师的熬夜劳作。
回复

使用道具 举报

发表于 2018-6-13 08:24:26 | 显示全部楼层
q8155128 发表于 2018-6-13 08:17
牛牛......

你现在都不理俺里.......

不至于哭成这个样子吧

评分

参与人数 1无忧币 +5 收起 理由
q8155128 + 5 很给力! 就是要哭的很伤心,牛牛才会里俺嘛..

查看全部评分

回复

使用道具 举报

发表于 2018-6-13 08:26:54 | 显示全部楼层
大师,有个问题请教一下,我的电脑加载esp以后,不能操作这么解决,百度说是更改安全选项,但是家庭版没这个选择啊?

点评

没那么麻烦,该分区不过需要管理员权限而已 只需任务管理器结束资源管理器(explorer.exe),然后以系统管理权限创建此任务即可正常浏览该分区 如果你觉得麻烦可以保存下面的命令为批处理文件,以管理员身份运  详情 回复 发表于 2018-6-14 22:53
回复

使用道具 举报

发表于 2018-6-13 08:39:01 来自手机 | 显示全部楼层
这是论坛又不是QQ那样的聊天场景。gif是gifcam所录。

评分

参与人数 1无忧币 +5 收起 理由
q8155128 + 5 很给力! 谢谢牛牛.......

查看全部评分

回复

使用道具 举报

发表于 2018-6-13 09:15:54 | 显示全部楼层
感谢付出!      
回复

使用道具 举报

发表于 2018-6-13 09:20:08 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-13 10:15 编辑

请教 :能否确定 ,diskpart 识别为gpt  "系统" 的分区 Id 一定是  efi 的 c12a7328-f81f-11d2-ba4b-00a0c93ec93b 么?

真是代码简洁高效啊,这相当于把列表全都放到内存了。就是不知道 cmd 下 支持 存放多少内存。





我喜欢尽量减少 外部命令的调用,宁可 多用几行  for + if .比如

  1. echo %select%|findstr /r "^[0-9]*$" >nul 2>nul
  2. if not %errorlevel%==0 (

  3. )
复制代码
用下面这个,  可节省 调用 外部命令 findstr

  1. set /a select=%select%
  2. if %select% equ 0 (

  3. )
复制代码


可能是我 有 迂腐了,呵呵。

点评

set /a 判断纯数字漏洞太多,你不妨试试 “5i” “5 i” 这样的情况,我尝试了一番之后才使用这个“比较简单的方式”,而且我之前还搜索了批处理之家,就这个代码短点儿 下面的for是神马情况?用引号作为分隔符,  详情 回复 发表于 2018-6-14 23:58
你不说我还真没考虑过还有其它ID一说,我不是简单看了下帮助 只是findstr用这顺手而已,如果替代不麻烦可以考虑,麻烦还是加文件简单。 话说,列表全部放内存了吗?我记得为何更方便分析调试,写入到文件了。。  详情 回复 发表于 2018-6-13 11:01
应该是固定的。 https://baike.baidu.com/item/%E5%85%A8%E5%B1%80%E5%94%AF%E4%B8%80%E6%A0%87%E8%AF%86%E5%88%86%E5%8C%BA%E8%A1%A8/1956466  详情 回复 发表于 2018-6-13 09:53
回复

使用道具 举报

发表于 2018-6-13 09:53:08 | 显示全部楼层
dos时代菜鸟 发表于 2018-6-13 09:20
能否确定 ,diskpart 识别为gpt  "系统" 的分区 Id 一定是  efi 的 c12a7328-f81f-11d2-ba4b-00a0c93ec93b  ...

应该是固定的。
https://baike.baidu.com/item/%E5 ... BA%E8%A1%A8/1956466

点评

用 diskpart 的 SETID 可以 察觉到这个,但我还是不太确定,这下 明确了。  详情 回复 发表于 2018-6-13 10:18
回复

使用道具 举报

发表于 2018-6-13 10:18:57 | 显示全部楼层
freesoft00 发表于 2018-6-13 09:53
应该是固定的。
https://baike.baidu.com/item/%E5%85%A8%E5%B1%80%E5%94%AF%E4%B8%80%E6%A0%87%E8%AF%8 ...

用  diskpart 的 SETID 可以 察觉到这个,但我还是不太确定,这下 明确了。
回复

使用道具 举报

 楼主| 发表于 2018-6-13 10:20:41 来自手机 | 显示全部楼层
q8155128 发表于 2018-6-13 08:19
大师的GIF图是用的啥软件呢?????

好神奇,此软件基本每次发帖比有人问!

好像是gifcam

点评

在外就是要多说多想多问嘛....... 大师又有什么大惊小怪的啦.......  详情 回复 发表于 2018-6-13 10:42
在外就是要多说多想多问嘛....... 大师又有什么大惊小怪的啦.......  详情 回复 发表于 2018-6-13 10:41
回复

使用道具 举报

发表于 2018-6-13 10:41:43 来自手机 | 显示全部楼层
主要是ta不仔细看,每次说了还要问。
回复

使用道具 举报

发表于 2018-6-13 10:41:56 | 显示全部楼层
nttwqz 发表于 2018-6-13 10:20
好神奇,此软件基本每次发帖比有人问!

好像是gifcam

在外就是要多说多想多问嘛.......

大师又有什么大惊小怪的啦.......

回复

使用道具 举报

发表于 2018-6-13 10:42:29 | 显示全部楼层
nttwqz 发表于 2018-6-13 10:20
好神奇,此软件基本每次发帖比有人问!

好像是gifcam

在外就是要多说多想多问嘛.......

大师又有什么大惊小怪的啦.......

回复

使用道具 举报

 楼主| 发表于 2018-6-13 11:01:02 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2018-6-13 09:20
请教 :能否确定 ,diskpart 识别为gpt  "系统" 的分区 Id 一定是  efi 的 c12a7328-f81f-11d2-ba4b-00a0c9 ...

你不说我还真没考虑过还有其它ID一说,我不是简单看了下帮助

只是findstr用这顺手而已,如果替代不麻烦可以考虑,麻烦还是加文件简单。

话说,列表全部放内存了吗?我记得为何更方便分析调试,写入到文件了。。。

点评

最后一步 写入文件的。呵呵。  详情 回复 发表于 2018-6-13 11:05
回复

使用道具 举报

发表于 2018-6-13 11:03:54 | 显示全部楼层
这个使用很方便啊
回复

使用道具 举报

发表于 2018-6-13 11:05:42 | 显示全部楼层
nttwqz 发表于 2018-6-13 11:01
你不说我还真没考虑过还有其它ID一说,我不是简单看了下帮助

只是findstr用这顺手而已,如果替代不麻烦 ...

最后一步 写入文件的。呵呵。
回复

使用道具 举报

发表于 2018-6-13 12:04:36 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-13 12:23 编辑


运行  diskpart 脚本 我现在都用
  1. type  脚本名 | diskpart
复制代码
的方式

因为  select 命令 没有 noerr 参数 如果选择错误 就会中断脚本。

我有个u盘 就是这样,select disk 到这个盘,diskpart 会自动选择 盘上的 partition ,而手动选,有选不上,说选择错误,结果 脚本运行就断了。

而  用 type 传递 就不会有这问题,而且 会将每个命令结果 用  "DISKPART> " 隔开,也便于查找命令结果,判断命令完成情况。可 通过对 输出文本流中 "DISKPART> "计数来 定位提取数据。
type 也是内部命令。


看效果

  1. ---脚本内容--------------------------------------
  2. select disk 4
  3. select part 1
  4. detail disk
  5. detail part
  6. detail vol

  7. ---用diskpart /s 运行脚本-----------------------------
  8. diskpart /s s.txt
  9. --------------------------------------------------------
  10. Microsoft DiskPart 版本 10.0.14393.0

  11. Copyright (C) 1999-2013 Microsoft Corporation.
  12. 在计算机上: DESKTOP-VS864R9

  13. 磁盘 4 现在是所选磁盘。

  14. 没有选择分区。

  15. Lenovo USB Flash Drive USB Device
  16. 磁盘 ID: 00000001
  17. 类型   : USB
  18. 状态 : 联机
  19. 路径   : 0
  20. 目标 : 0
  21. LUN ID : 0
  22. 位置路径 : UNAVAILABLE
  23. 当前只读状态: 否
  24. 只读: 否
  25. 启动磁盘: 否
  26. 页面文件磁盘: 否
  27. 休眠文件磁盘: 否
  28. 故障转储磁盘: 否
  29. 群集磁盘  : 否

  30.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  31.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  32. * 卷     10    J   USB_FILES    FAT32  可移动         7660 MB  正常                 

  33. 没有选择分区。
  34. 请选择一个分区,再试一次。
  35. ------------------------------------------------------------------------------


  36. ----------用 type 把脚步传递个 diskpart 执行---------------
  37. type s.txt | diskpart
  38. -----------------------------------------------------------
  39. Microsoft DiskPart 版本 10.0.14393.0

  40. Copyright (C) 1999-2013 Microsoft Corporation.
  41. 在计算机上: DESKTOP-VS864R9

  42. DISKPART>
  43. 磁盘 4 现在是所选磁盘。

  44. DISKPART>
  45. 没有选择分区。

  46. DISKPART>
  47. Lenovo USB Flash Drive USB Device
  48. 磁盘 ID: 00000001
  49. 类型   : USB
  50. 状态 : 联机
  51. 路径   : 0
  52. 目标 : 0
  53. LUN ID : 0
  54. 位置路径 : UNAVAILABLE
  55. 当前只读状态: 否
  56. 只读: 否
  57. 启动磁盘: 否
  58. 页面文件磁盘: 否
  59. 休眠文件磁盘: 否
  60. 故障转储磁盘: 否
  61. 群集磁盘  : 否

  62.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  63.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  64. * 卷     10    J   USB_FILES    FAT32  可移动         7660 MB  正常                 

  65. DISKPART>
  66. 没有选择分区。
  67. 请选择一个分区,再试一次。

  68. DISKPART>
  69.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  70.   --------  -------------  -------  -------  ---  ---
  71. * 磁盘 4    联机             7660 MB      0 B         

  72. 只读                   : 否
  73. 隐藏                   : 否
  74. 没有默认驱动器号       : 否
  75. 卷影副本               : 否
  76. 脱机                : 否
  77. BitLocker 已加密       : 否
  78. 可安装            : 否

  79. 卷容量                 : 7645 MB
  80. 卷可用空间             : 3395 MB

  81. DISKPART>
复制代码

选不了那个分区,可 list part 的时候 却 加了 *
  1. DISKPART> select disk 4

  2. 磁盘 4 现在是所选磁盘。

  3. DISKPART> list part

  4.   分区 ###       类型              大小     偏移量
  5.   -------------  ----------------  -------  -------
  6. * 分区      1    主要                7660 MB      0 B

  7. DISKPART>
复制代码



点评

没想到还有这样的妙用,type类似的妙用还真不少。有空了试一下,看那种判断更简洁好用。 我正好有这样的移动设备(TF卡),列表分区时自动选中分区,而且手动diskpart也无法选择分区,无法detail part,该问题上  详情 回复 发表于 2018-6-13 13:56
回复

使用道具 举报

发表于 2018-6-13 12:17:33 | 显示全部楼层
非常实用的工具,希望增加挂载盘符读写ESP分区功能,谢谢。

点评

读写 某个卷 的 软件 有很多,个人认为 楼主 只要 提供 挂盘符 功能就足够了。其他的 用户自己选择。  详情 回复 发表于 2018-6-13 12:25
回复

使用道具 举报

发表于 2018-6-13 12:25:19 | 显示全部楼层
wdtx 发表于 2018-6-13 12:17
非常实用的工具,希望增加挂载盘符读写ESP分区功能,谢谢。

读写 某个卷 的 软件 有很多,个人认为 楼主 只要 提供 挂盘符 功能就足够了。其他的 用户自己选择。
回复

使用道具 举报

发表于 2018-6-13 12:37:41 | 显示全部楼层
本帖最后由 Anson4 于 2018-6-13 12:38 编辑

请问 findstr fsutil 需要什么版本?
正常系统英文版 Windows 10 1803,运行出现下图(管理员权限也是):
查找活动及ESP分区_2.0.png

点评

就是呀。你的英文系统cmd能显示中文。是你设置了输入法的部分吧。我记着好像是设置了中文输入后中文的文本就可以显示正确了。 忘记是不是这个原因了。  详情 回复 发表于 2018-6-13 13:59
英文环境,怎么能在 cmd 下显示中文呢? 运行脚本前 运行  详情 回复 发表于 2018-6-13 13:40
关键词使用的是中文名称,无法在英文系统中使用。 需要修改关键词。  详情 回复 发表于 2018-6-13 12:51
回复

使用道具 举报

发表于 2018-6-13 12:51:03 | 显示全部楼层
Anson4 发表于 2018-6-13 12:37
请问 findstr fsutil 需要什么版本?
正常系统英文版 Windows 10 1803,运行出现下图(管理员权限也是): ...

关键词使用的是中文名称,无法在英文系统中使用。
需要修改关键词。

点评

能不能做到与语言无关呢?  详情 回复 发表于 2018-6-13 12:59
回复

使用道具 举报

发表于 2018-6-13 12:59:54 | 显示全部楼层
freesoft00 发表于 2018-6-13 12:51
关键词使用的是中文名称,无法在英文系统中使用。
需要修改关键词。

能不能做到与语言无关呢?

点评

我想到的只是设置两套系统的不同关键词。 批处理先判断系统语言环境,然后根据环境使用不同的关键词作为变量值。这样两套系统都可以在一个批处理用。  详情 回复 发表于 2018-6-13 13:57
回复

使用道具 举报

发表于 2018-6-13 13:40:59 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-13 13:49 编辑
Anson4 发表于 2018-6-13 12:37
请问 findstr fsutil 需要什么版本?
正常系统英文版 Windows 10 1803,运行出现下图(管理员权限也是): ...


英文环境,怎么能在  cmd 下显示中文呢?
在脚本前端加入
  1. mode con: cp select=936
复制代码


难道是  diskpart 缺少  中文语言文件?
用这个 的 中文版 看看,能不能正常,如果能,就说明 是 diskpart 却语言文件导致的。
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

 楼主| 发表于 2018-6-13 13:56:21 | 显示全部楼层
本帖最后由 nttwqz 于 2018-6-13 14:01 编辑
dos时代菜鸟 发表于 2018-6-13 12:04
运行  diskpart 脚本 我现在都用   的方式

因为  select 命令 没有 noerr 参数 如果选择错误 就会中断 ...


没想到还有这样的妙用,type类似的妙用还真不少。有空了试一下,看那种判断更简洁好用。

我正好有这样的移动设备(TF卡),列表分区时自动选中分区,而且手动diskpart也无法选择分区,无法detail part,该问题上周已解决。

我和你的思路不同,我是用if来判断是不是*开头,第二个是不是“分区”,然后生成不同的diskpart脚本内容,直接detail disk,不选择分区(没法选),这样就不会有这样的情况了。

和上次编写不同,本次脚本并没有计数磁盘总数和各磁盘分区总数,我是在解析中生成磁盘索引表和各磁盘分区索引表,如果解析正确,那么磁盘和各分区排序顺序和diskpart一致,如果diskpart没有索引为3的硬盘,脚本执行结果中也不会有,分区顺序如果是1 0,那么最终也是这样显示的。

点评

detail disk 获取 vol 信息没有问题,但是 怎么来获取 是否 是 active 呢? 如果涉及到 要 select part 的操作可能就不灵了,比如删除分区,不过我没试过 通过 select vol 选中焦点 再delete part 是否会成功。 如  详情 回复 发表于 2018-6-13 14:09
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 18:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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