nttwqz 发表于 2018-6-13 01:47:40

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

本帖最后由 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. 解决部分已知问题


下载



测试版下载 2.6.5 beta2


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

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

必须支持,必须回帖

q8155128 发表于 2018-6-13 08:17:08

大师就是牛.......

支持支持个.......

q8155128 发表于 2018-6-13 08:17:40

窄口牛 发表于 2018-6-13 06:50
必须支持,必须回帖

牛牛......

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

{:1_189:}

q8155128 发表于 2018-6-13 08:19:07

大师的GIF图是用的啥软件呢?????

{:1_189:}

freesoft00 发表于 2018-6-13 08:19:42

回帖支持。

rrscsm2000 发表于 2018-6-13 08:20:08

是么,真行哈!

wsgdmzr 发表于 2018-6-13 08:23:45

感谢大师的熬夜劳作。

wsgdmzr 发表于 2018-6-13 08:24:26

q8155128 发表于 2018-6-13 08:17
牛牛......

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

不至于哭成这个样子吧{:1_201:}

zhangmi 发表于 2018-6-13 08:26:54

大师,有个问题请教一下,我的电脑加载esp以后,不能操作这么解决,百度说是更改安全选项,但是家庭版没这个选择啊?

窄口牛 发表于 2018-6-13 08:39:01

这是论坛又不是QQ那样的聊天场景。gif是gifcam所录。

2010fzone 发表于 2018-6-13 09:15:54

感谢付出!      

dos时代菜鸟 发表于 2018-6-13 09:20:08

本帖最后由 dos时代菜鸟 于 2018-6-13 10:15 编辑

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

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





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

echo %select%|findstr /r "^*$" >nul 2>nul
if not %errorlevel%==0 (

)
用下面这个,可节省 调用 外部命令 findstr

set /a select=%select%
if %select% equ 0 (

)

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

freesoft00 发表于 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%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

dos时代菜鸟 发表于 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 可以 察觉到这个,但我还是不太确定,这下 明确了。

nttwqz 发表于 2018-6-13 10:20:41

q8155128 发表于 2018-6-13 08:19
大师的GIF图是用的啥软件呢?????

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

好像是gifcam

窄口牛 发表于 2018-6-13 10:41:43

主要是ta不仔细看,每次说了还要问。

q8155128 发表于 2018-6-13 10:41:56

nttwqz 发表于 2018-6-13 10:20
好神奇,此软件基本每次发帖比有人问!

好像是gifcam

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

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

{:1_192:}

q8155128 发表于 2018-6-13 10:42:29

nttwqz 发表于 2018-6-13 10:20
好神奇,此软件基本每次发帖比有人问!

好像是gifcam

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

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

{:1_192:}

nttwqz 发表于 2018-6-13 11:01:02

dos时代菜鸟 发表于 2018-6-13 09:20
请教 :能否确定 ,diskpart 识别为gpt"系统" 的分区 Id 一定是efi 的 c12a7328-f81f-11d2-ba4b-00a0c9 ...

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

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

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

20121010168 发表于 2018-6-13 11:03:54

这个使用很方便啊

dos时代菜鸟 发表于 2018-6-13 11:05:42

nttwqz 发表于 2018-6-13 11:01
你不说我还真没考虑过还有其它ID一说,我不是简单看了下帮助

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

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

dos时代菜鸟 发表于 2018-6-13 12:04:36

本帖最后由 dos时代菜鸟 于 2018-6-13 12:23 编辑


运行diskpart 脚本 我现在都用type脚本名 | diskpart 的方式

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

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

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


看效果

---脚本内容--------------------------------------
select disk 4
select part 1
detail disk
detail part
detail vol

---用diskpart /s 运行脚本-----------------------------
diskpart /s s.txt
--------------------------------------------------------
Microsoft DiskPart 版本 10.0.14393.0

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

磁盘 4 现在是所选磁盘。

没有选择分区。

Lenovo USB Flash Drive USB Device
磁盘 ID: 00000001
类型   : USB
状态 : 联机
路径   : 0
目标 : 0
LUN ID : 0
位置路径 : UNAVAILABLE
当前只读状态: 否
只读: 否
启动磁盘: 否
页面文件磁盘: 否
休眠文件磁盘: 否
故障转储磁盘: 否
群集磁盘: 否

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

没有选择分区。
请选择一个分区,再试一次。
------------------------------------------------------------------------------


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

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

DISKPART>
磁盘 4 现在是所选磁盘。

DISKPART>
没有选择分区。

DISKPART>
Lenovo USB Flash Drive USB Device
磁盘 ID: 00000001
类型   : USB
状态 : 联机
路径   : 0
目标 : 0
LUN ID : 0
位置路径 : UNAVAILABLE
当前只读状态: 否
只读: 否
启动磁盘: 否
页面文件磁盘: 否
休眠文件磁盘: 否
故障转储磁盘: 否
群集磁盘: 否

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

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

DISKPART>
磁盘 ###状态         大小   可用   DynGpt
-----------------------------------------
* 磁盘 4    联机             7660 MB      0 B         

只读                   : 否
隐藏                   : 否
没有默认驱动器号       : 否
卷影副本               : 否
脱机                : 否
BitLocker 已加密       : 否
可安装            : 否

卷容量               : 7645 MB
卷可用空间             : 3395 MB

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

磁盘 4 现在是所选磁盘。

DISKPART> list part

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

DISKPART>


wdtx 发表于 2018-6-13 12:17:33

非常实用的工具,希望增加挂载盘符读写ESP分区功能,谢谢。

dos时代菜鸟 发表于 2018-6-13 12:25:19

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

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

Anson4 发表于 2018-6-13 12:37:41

本帖最后由 Anson4 于 2018-6-13 12:38 编辑

请问 findstr fsutil 需要什么版本?
正常系统英文版 Windows 10 1803,运行出现下图(管理员权限也是):

freesoft00 发表于 2018-6-13 12:51:03

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

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

Anson4 发表于 2018-6-13 12:59:54

freesoft00 发表于 2018-6-13 12:51
关键词使用的是中文名称,无法在英文系统中使用。
需要修改关键词。

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

dos时代菜鸟 发表于 2018-6-13 13:40:59

本帖最后由 dos时代菜鸟 于 2018-6-13 13:49 编辑

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

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


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

nttwqz 发表于 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,那么最终也是这样显示的。
页: [1] 2 3 4 5 6
查看完整版本: dpinfo 2.6.5 beta2 磁盘分区信息 分区相关工具定制脚本