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:55 编辑
测试版更新日志
尝试规避或修复diskpart本身的bug引起的bug
由于diskpart脚本行数的增加等原因效率比2.6.4下降了大约15%
必须支持,必须回帖 大师就是牛.......
支持支持个....... 窄口牛 发表于 2018-6-13 06:50
必须支持,必须回帖
牛牛......
你现在都不理俺里.......
{:1_189:} 大师的GIF图是用的啥软件呢?????
{:1_189:} 回帖支持。 是么,真行哈! 感谢大师的熬夜劳作。 q8155128 发表于 2018-6-13 08:17
牛牛......
你现在都不理俺里.......
不至于哭成这个样子吧{:1_201:} 大师,有个问题请教一下,我的电脑加载esp以后,不能操作这么解决,百度说是更改安全选项,但是家庭版没这个选择啊? 这是论坛又不是QQ那样的聊天场景。gif是gifcam所录。 感谢付出! 本帖最后由 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 (
)
可能是我 有 迂腐了,呵呵。
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 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 可以 察觉到这个,但我还是不太确定,这下 明确了。 q8155128 发表于 2018-6-13 08:19
大师的GIF图是用的啥软件呢?????
好神奇,此软件基本每次发帖比有人问!
好像是gifcam 主要是ta不仔细看,每次说了还要问。 nttwqz 发表于 2018-6-13 10:20
好神奇,此软件基本每次发帖比有人问!
好像是gifcam
在外就是要多说多想多问嘛.......
大师又有什么大惊小怪的啦.......
{:1_192:} nttwqz 发表于 2018-6-13 10:20
好神奇,此软件基本每次发帖比有人问!
好像是gifcam
在外就是要多说多想多问嘛.......
大师又有什么大惊小怪的啦.......
{:1_192:} dos时代菜鸟 发表于 2018-6-13 09:20
请教 :能否确定 ,diskpart 识别为gpt"系统" 的分区 Id 一定是efi 的 c12a7328-f81f-11d2-ba4b-00a0c9 ...
你不说我还真没考虑过还有其它ID一说,我不是简单看了下帮助
只是findstr用这顺手而已,如果替代不麻烦可以考虑,麻烦还是加文件简单。
话说,列表全部放内存了吗?我记得为何更方便分析调试,写入到文件了。。。 这个使用很方便啊 nttwqz 发表于 2018-6-13 11:01
你不说我还真没考虑过还有其它ID一说,我不是简单看了下帮助
只是findstr用这顺手而已,如果替代不麻烦 ...
最后一步 写入文件的。呵呵。 本帖最后由 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>
非常实用的工具,希望增加挂载盘符读写ESP分区功能,谢谢。 wdtx 发表于 2018-6-13 12:17
非常实用的工具,希望增加挂载盘符读写ESP分区功能,谢谢。
读写 某个卷 的 软件 有很多,个人认为 楼主 只要 提供 挂盘符 功能就足够了。其他的 用户自己选择。
本帖最后由 Anson4 于 2018-6-13 12:38 编辑
请问 findstr fsutil 需要什么版本?
正常系统英文版 Windows 10 1803,运行出现下图(管理员权限也是):
Anson4 发表于 2018-6-13 12:37
请问 findstr fsutil 需要什么版本?
正常系统英文版 Windows 10 1803,运行出现下图(管理员权限也是): ...
关键词使用的是中文名称,无法在英文系统中使用。
需要修改关键词。 freesoft00 发表于 2018-6-13 12:51
关键词使用的是中文名称,无法在英文系统中使用。
需要修改关键词。
能不能做到与语言无关呢? 本帖最后由 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 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,那么最终也是这样显示的。