无忧启动论坛

标题: 又一个 diskpart 硬盘分区信息搜集脚本,玩具。 [打印本页]

作者: dos时代菜鸟    时间: 2022-9-1 18:54
标题: 又一个 diskpart 硬盘分区信息搜集脚本,玩具。
本帖最后由 dos时代菜鸟 于 2022-9-5 10:43 编辑

此脚本 仅仅就 通过 获取分区 offset 数据来 计算出 各个 卷 与 分区 间的 关联,用以尝试规避 已存在的 一些 Diskpart 在此方面的 bug .
脚本思路 仅做 参考 ,不打算 做 长期研究 和更新。

请在 win7 及以上 简体中文版本系统运行。
带 debug 参数,可以显示 一些细节。

把结果 传递给文件x.txt 同时附带 Debug 信息。
  1. echo 0|parts6.44-select.cmd debug>x.txt
复制代码


把只包含硬盘分区列表的信息 存入 z.txt
  1. (for /f "skip=23 delims=" %c in ('parts6.44-select.cmd debug2') do @(echo %c))>z.txt
复制代码

diskpart硬盘与分区列表应用举例 parts6.49-.cmd.zip (6.24 KB, 下载次数: 61)

死循环播放 硬盘及其分区 信息 parts6.492-screen.cmd.zip (6.39 KB, 下载次数: 31)










作者: dos时代菜鸟    时间: 2022-9-1 18:59
本帖最后由 dos时代菜鸟 于 2022-9-3 18:08 编辑

欢迎广泛测试 ,
脚本代码 公开。
欢迎 修缮。

parts6.49-.cmd.zip (6.24 KB, 下载次数: 12)

parts6.41.cmd.zip (3.15 KB, 下载次数: 8)   初步解决 部分中英文 显示站位不同(卷标) 导致 里出外进 问题

parts6.4.cmd.7z (2.56 KB, 下载次数: 12)

各版本暂存区。

作者: dos时代菜鸟    时间: 2022-9-1 19:40
本帖最后由 dos时代菜鸟 于 2022-9-1 19:42 编辑

调用了 4 次 diskpart

用到 管道 传递 diskpart 指令,通过 对输出结果中 "DISKPART>"的个数 ,判断 输出的信息是 哪一个 指令的运行结果,进而 有针对性的 分析文本流。

作者: chishingchan    时间: 2022-9-1 20:43

建议
1、格式缩小空格!CMD窗口看不完,要向右滚动;
2、有点格式对不齐;
3、将英文译为中文。

作者: chishingchan    时间: 2022-9-1 20:45
值得称赞的是没有使用额外文件!例如:>filename.txt
作者: 9527sss    时间: 2022-9-1 20:50
谢谢分享
作者: freesoft00    时间: 2022-9-1 21:08
chishingchan 发表于 2022-9-1 20:43
建议
1、格式缩小空格!CMD窗口看不完,要向右滚动;
2、有点格式对不齐;

cmd窗口不太好对齐,cmd窗口就那么大,例如卷标,有些长有些短这样就会不齐
作者: dos时代菜鸟    时间: 2022-9-1 21:25
cmd 下运行:
  1.     (echo.&echo.)|parts6.3.cmd debug>x.txt
复制代码
就会把结果 传递给文件x.txt 同时附带 Debug 信息。



作者: dos时代菜鸟    时间: 2022-9-1 21:31
本帖最后由 dos时代菜鸟 于 2022-9-1 21:40 编辑
chishingchan 发表于 2022-9-1 20:43
建议
1、格式缩小空格!CMD窗口看不完,要向右滚动;
2、有点格式对不齐;

如果 只是 为了 观赏,就失去 脚本的意义了。

而且 中文字符 实际占用两个字符位,而 win 下是按照一个字符计算的,所以 有中文的行,就会有错位,
需要单独编辑 脚本 通过比较大小的方式 对文本行逐一字符进行比较,确认哪些信息存在中文,可能造成错位,然后,把其他没有中文的信息 加长处理。

如果是 把这个 列表结果用于 其他脚本调用,是否美观 意义不大,能识别调用就行了,关键是 方便其他脚本调用,兼顾人眼识别方便即可。

分区 id 是考虑 gpt 格式下 分区 有 36个字符,所以 mbr 分区 的id 才会有 一些空格。


这个脚本 ,讨论的主要是算法上的事,就是 针对 diskpart 一些 已知的bug ,对卷运行 detail part 来获取卷的 字节偏移 ,进而 通过对 分区 的 detail part 来 双重确定 卷与分区的 对应关系,规避 bug 可能导致的 分区列表获取错误。


也不知道 可不可行。所以需要 广泛 测试。





作者: dos时代菜鸟    时间: 2022-9-1 22:56
chishingchan 发表于 2022-9-1 20:43
建议
1、格式缩小空格!CMD窗口看不完,要向右滚动;
2、有点格式对不齐;

暂时,先不考虑美观的事儿,
这个算法是否可行还说不准呢。
作者: dos时代菜鸟    时间: 2022-9-2 08:53
硬盘的gtp特征识别有误,已经纠正了。
作者: zlzx01    时间: 2022-9-2 11:56
谢谢分享
作者: dos时代菜鸟    时间: 2022-9-2 16:09
本帖最后由 dos时代菜鸟 于 2022-9-2 16:14 编辑

部分解决显示 站位 错位问题。
解决方法就是 , 计算其中的中文文字个数,把 字符串 按 英文长度 用空格 填充加倍,再把字符串按中文个数缩短。

感觉,这个动作 拖慢了 列表显示时间。



作者: dfw9    时间: 2022-9-2 16:52
取了X.txt

x局部

作者: dos时代菜鸟    时间: 2022-9-2 17:42
dfw9 发表于 2022-9-2 16:52
取了X.txt

x局部

设置字体,能容易看一些。
作者: nttwqz    时间: 2022-9-2 17:59
dos时代菜鸟 发表于 2022-9-2 16:09
部分解决显示 站位 错位问题。
解决方法就是 , 计算其中的中文文字个数,把 字符串 按 英文长度 用空格  ...

是虚拟磁盘拖慢了速度…
作者: dos时代菜鸟    时间: 2022-9-2 18:08
nttwqz 发表于 2022-9-2 17:59
是虚拟磁盘拖慢了速度…

用 6.4 版,要快一秒多。
作者: nttwqz    时间: 2022-9-2 18:23
dos时代菜鸟 发表于 2022-9-2 18:08
用 6.4 版,要快一秒多。

我看你想我一样,弄了标签,call调用专门用于计算长度,不过我用的是写入文本文件计算大小再换算的方法,因为英文中的符号数量也是很多的,远不止你批处理中的这点数量,这只不过是很常用的,严格来说不够准确。

不过呢,我用了“字典”法,打开diskpart的mui文件,尽可能把里面的字词提取出来,并直接赋予长度值,这样除了卷标以外,基本上就不用计算了。因为大量call的调用太影响效率,这种需要多次调用的“函数”,感觉每次都复制粘贴一次代码也不是很合适,也不太方便以后维护。
作者: wybuct    时间: 2022-9-2 18:31
貌似不错,收藏了
作者: dos时代菜鸟    时间: 2022-9-2 20:40
nttwqz 发表于 2022-9-2 18:23
我看你想我一样,弄了标签,call调用专门用于计算长度,不过我用的是写入文本文件计算大小再换算的方法, ...

所以说是初步实现,中文显示位占两个字符计算这个事儿,成了硬伤。
目前看,也只是先这样了。毕竟重点是要其他脚本调取的数据,不是观赏。

作者: dos时代菜鸟    时间: 2022-9-3 00:23
本帖最后由 dos时代菜鸟 于 2022-9-3 00:27 编辑

做了个简单的 列表应用 脚本。

选择 序号后,会 根据 所选 判断 选择的是 硬盘 还是分区 或是 卷,然后 运行 diskpart 指令 查看 对应的 信息。

要想把 列表 结果 存入 文件 可以运行

  1. echo 0 | parts6.42-select.cmd debug >x.txt
复制代码
把运行过程 和 debug 信息都 存入 x.txt 文件,如果不带 debug 参数,则 只传递 简单的运行信息 和 硬盘分区列表。


作者: dos时代菜鸟    时间: 2022-9-3 10:01
本帖最后由 dos时代菜鸟 于 2022-9-3 10:02 编辑

屏幕小的,可以手动把 cmd 窗口 字体 调整为 宋体 14,






作者: dos时代菜鸟    时间: 2022-9-3 17:28


作者: dos时代菜鸟    时间: 2022-9-3 18:58
那个 diskpart 擅自 * 选分区的毛病,还是嘚考虑规避。
作者: iyg429    时间: 2022-9-3 19:46
没看懂 这个软件是干啥的
作者: dos时代菜鸟    时间: 2022-9-3 20:23
iyg429 发表于 2022-9-3 19:46
没看懂 这个软件是干啥的

你说的是 diskpart
还是这个脚本?
这个脚本,啥也不干。
只是一个关于算法的讨论贴。

要想找用 diskpart分区的,可以看我的其他贴,比如 pecmd 给 diskpart 做的壳。
作者: dos时代菜鸟    时间: 2022-9-3 21:58
本帖最后由 dos时代菜鸟 于 2022-9-3 22:08 编辑

既然 无聊,就 用这个脚本 做个无聊的 死循环脚本,每隔几秒就 调用下 diskpart 。

死循环 播放 硬盘及分区列表的信息,每循环一圈,重新 刷新一次列表。

时间控制方面 用 外部命令 choice.exe ,是个老牌 外部程序了,从 dos 时代就存在的 程序。

choice.zip (38.57 KB, 下载次数: 5)

脚本在1楼
把窗口手动设置成 半透明,看上去就更 “高大上了”
作者: 18588452015    时间: 2022-9-10 23:55
楼主可以把与diskpart.exe相关的文件都提取出来吗?
那样就方便在有些过度精简的PE中运行了。
先谢谢了!!!
作者: dos时代菜鸟    时间: 2022-9-11 20:43
18588452015 发表于 2022-9-10 23:55
楼主可以把与diskpart.exe相关的文件都提取出来吗?
那样就方便在有些过度精简的PE中运行了。
先谢谢了! ...

依托 系统部分服务,不好提取。
作者: 18588452015    时间: 2022-9-11 20:46
dos时代菜鸟 发表于 2022-9-11 20:43
依托 系统部分服务,不好提取。

额,好吧,有没有试过Depends,我试了下,提取的体积太大了,哎。。。
作者: yjkl    时间: 2022-9-26 18:32
谢谢分享
作者: yjkl    时间: 2022-9-27 09:27
学习学习
作者: 3360788520    时间: 2022-10-14 19:11
666

作者: lemontea888    时间: 2022-10-17 19:41
多谢分享,收藏备用。
作者: 香国妙手    时间: 2022-10-23 09:55
给力给力
作者: zllfcx    时间: 2022-11-29 10:53
感谢分享
作者: laonat    时间: 2022-12-1 18:28
谢谢分享
作者: Hackxnet    时间: 2022-12-11 21:02
谢谢分享
作者: kid23    时间: 2022-12-15 20:41
感谢分享
作者: wfaming    时间: 2023-2-6 08:18
感谢分享
作者: 610644034    时间: 2023-2-6 12:48
一直用自己感觉不错的脚本!没有见到更合意的!


DiskPart 磁盘管理工具_备份.bat.txt

83.22 KB, 下载次数: 16


作者: dos时代菜鸟    时间: 2023-2-6 15:20
610644034 发表于 2023-2-6 12:48
一直用自己感觉不错的脚本!没有见到更合意的!

呵呵哈。

图形界面的 diskpart 了解下

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D2
作者: yyz2191958    时间: 2023-2-6 17:59
好像不错 谢谢
作者: 610644034    时间: 2023-2-6 18:09
本帖最后由 610644034 于 2023-2-6 18:14 编辑
dos时代菜鸟 发表于 2023-2-6 15:20
呵呵哈。

图形界面的 diskpart 了解下

我的是bat,正常系统中可以用,PE中,无PEcmd 也可以用, 你这个图形界面的,依赖PEcmd ,不适合我! 再说了,离开pecmd ,同样可以用hta 做一个差不多的图形界面!所以如果离开bat,我首先会考虑 hta 基于diskpart 做个同样的工具,岂不美哉!
作者: dos时代菜鸟    时间: 2023-2-7 06:47
610644034 发表于 2023-2-6 18:09
我的是bat,正常系统中可以用,PE中,无PEcmd 也可以用, 你这个图形界面的,依赖PEcmd ,不适合我! 再 ...

美哉美哉。你说的对。
作者: dos时代菜鸟    时间: 2023-2-7 08:59
本帖最后由 dos时代菜鸟 于 2023-2-7 09:04 编辑
610644034 发表于 2023-2-6 18:09
我的是bat,正常系统中可以用,PE中,无PEcmd 也可以用, 你这个图形界面的,依赖PEcmd ,不适合我! 再 ...

你说的对。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409455&extra=

不知道为啥现在的 批处理都要用 bat 做扩展名。那是 dos 时代批处理扩展名。进入 winXP 时代 后,cmd 下的批处理都用 cmd 做扩展名了,直接由 cmd.exe 解析。
bat 扩展名容易让人以为是 纯dos 下的批处理呢。

批处理做个菜单实现简化命令行操作,简单快捷。但也有一些弊端。我在 2018年时就用 批处理实现了 diskpart 的主要功能操作。但是批处理操作 还是有一些掣肘的地方。
比如:
每实现一个目的,都要调用一次 diskpart
通过diskpart 实现磁盘、分区、卷的三级信息搜集至少需要调用三次 diskpart .

所以我就考虑用 pecmd 给diskpart 做外壳,利用 pecmd 对 cmd 窗口的处理能力,运行一次 diskpart 就足够了,通过程序直接与 diskpart 窗口和diskpart输出的结果做交互处理。同时还可以通过 pecmd 实现硬盘未使用空间的精准定位,通过鼠标点选对这些未使用区域进行分区。通过功能按钮开关设置,一定程度避免误操作和无效操作,比如 Gpt 分区下或者mbr的非主分区,其激活活动分区的功能按钮就关闭了。这些都是 批处理难以完成的。

系统中diskpart功能的实现,需要诸多系统文件支撑,多一个 1M大小的 pecmd.exe 也就无所谓了,而且,还可以把pecmd脚本内置到 pecmd.exe 中,做成单文件,把pecmd 改个名字,就是又一个第三方磁盘分区软件,何乐而不为呢?

智者见智,仁者见仁吧。



作者: Allreal    时间: 2023-2-7 09:31
这玩意真神了。!!!!要不是各种分区软件这么方便。。。。
作者: 知非胜改    时间: 2023-2-7 10:34
必须顶一下啊
作者: dos时代菜鸟    时间: 2023-2-7 11:15
Allreal 发表于 2023-2-7 09:31
这玩意真神了。!!!!要不是各种分区软件这么方便。。。。

分区软件是么?
给你一个

DISKPART_SHELL-Ver_1.28.1(x64).7z (959.69 KB, 下载次数: 9)

作者: Allreal    时间: 2023-2-7 17:26
dos时代菜鸟 发表于 2023-2-7 11:15
分区软件是么?
给你一个

  一直知道你的名号。没想到这么亲民。
命令行写的比编程软件还好。
作者: 判官    时间: 2023-2-7 20:39
加入VIP会员,获无忧币,赠积分,送勋章,下载无限制,获论坛最高级会员权限 !
作者: nttwqz    时间: 2023-2-19 00:38
我看,你这个所谓的“尝试通过 字节偏移 找到分区对应的卷信息”只不过是磁盘信息和卷信息的变量转换。
  1. sel vol #/det part/det vol
  2. sel disk #/sel part #/det part
复制代码

后者部分使用了前者卷获得的信息,这和我多年来使用的方法基本相同,也想不到什么好办法,操作卷获取的信息正确,操作磁盘分区获取的信息错误,就用前者正确替换后者的错误,反之亦然。

很遗憾,通过卷获取的卷和分区信息也不一定是正确的,由于这个原因我的dpinfo更新已经搁置好几个月了,我尝试了同时操作磁盘分区获取分区和卷信息、操作卷获取获取分区和卷信息,最后对比再bug修复,这种方法对效率影响不小;还尝试了操作卷获取获取分区和卷信息,操作磁盘分区获取分区信息(忽略卷信息以规避一些bug),最后将卷获取的磁盘分区信息转换成与之对应的磁盘分区信息,再修复剩下的bug,这种方法效率比前面好了不少,比之前已发布版本使用的操作磁盘分区获取为主,个别卷为辅的方法还是慢了10%。


之前改来改去没空看这个脚本,核心代码应该就是这几行。另外,69行少了一个双引号
  1. if "%%c"=="字节偏移" (
  2.     set "off=                      %%d"
  3.     for %%h in (!vols_off!) do (
  4.         for /f "tokens=1,2,3 delims=." %%r  in ("%%h") do (
  5.             if "%%d"=="%%t" (if !disk! equ %%s (
  6.                 set vol_info=!vol%%r!
  7.                 set "free=!vol_%%r_free!"
  8.                 set online=!vol_%%r_online!
  9.                 set rw=!vol_%%r_rw!
  10.                 set /a vn+=1
  11.             ))
  12.         )
  13.     )
  14. )
复制代码


diskpart [sel vol #/det part/det vol] 已知 bug,欢迎补充:
动态磁盘,sel vol #/det part提示没有选择分区,但sel part #/det part/det vol正常



作者: dos时代菜鸟    时间: 2023-2-19 07:14
nttwqz 发表于 2023-2-19 00:38
我看,你这个所谓的“尝试通过 字节偏移 找到分区对应的卷信息”只不过是磁盘信息和卷信息的变量转换。

...

多谢
作者: dos时代菜鸟    时间: 2023-2-19 10:24
nttwqz 发表于 2023-2-19 00:38
我看,你这个所谓的“尝试通过 字节偏移 找到分区对应的卷信息”只不过是磁盘信息和卷信息的变量转换。

...

可以理解为diskpart依托的众多文件的内部函数句柄对同一个事物的理解不一致。导致分区与卷对应关系出现偏差。
作者: nttwqz    时间: 2023-2-19 11:47
dos时代菜鸟 发表于 2023-2-19 10:24
可以理解为diskpart依托的众多文件的内部函数句柄对同一个事物的理解不一致。导致分区与卷对应关系出现偏 ...

我怀疑巨硬都没有认真测试过,虽说8.1之后取消了测试团队,但是有的bug从7到现在都一直存在,看来世界上使用这个工具的人较少,或者只使用简单功能,无人反馈,以至于这么多bug一直留存到今天……
作者: dos时代菜鸟    时间: 2023-2-21 08:59
nttwqz 发表于 2023-2-19 11:47
我怀疑巨硬都没有认真测试过,虽说8.1之后取消了测试团队,但是有的bug从7到现在都一直存在,看来世界上 ...

如果 以分区 offset 代替分区号作为分区索引,把分区的 offset 与 卷号做对应关系。或许能 规避问题。
作者: oluolio    时间: 2023-2-21 14:41
本帖最后由 oluolio 于 2024-1-14 23:53 编辑

.
作者: nttwqz    时间: 2023-2-21 18:31
dos时代菜鸟 发表于 2023-2-21 08:59
如果 以分区 offset 代替分区号作为分区索引,把分区的 offset 与 卷号做对应关系。或许能 规避问题。

我看了一下,获取分区字节偏移的方法有两种set vol #/det part;sel disk #/sel part #/det part,也就是说无论操作卷还是分区,最后都需要det part。就目前来说,list vol获取卷号等信息,再set vol #/det part获取的信息也都是正确的,只有无法获取的情况,暂时没有遇到返回错误信息的情况,比如返回的分区编号错误,也就是说,凡是能返回属性信息的,分区编号和卷号以及字节偏移等也是正确的,此时并不需要根据字节偏移等分析卷与分区的对应关系。如果操作卷无法获取分区属性,自然也没有字节偏移等信息,就不知道这个卷对应哪个分区,此时一般通过操作分区来获取分区属性获得对应卷号、字节偏移等信息,如果此时获取的信息也是正确的,直接将结果赋值给相关卷变量即可,不需要根据字节偏移建立卷和分区的对应关系;如果是错误的,你怎么根据字节偏移分析获得卷和分区的对应关系?即使分析各个分区的字节偏移大小得出分区结构,但是又如何算出这个错误的分区卷号?

根据以前的经验,sel disk #/det disk和sel disk #/sel part #/det part获取的磁盘卷卷列表和每个分区对应的卷信息错误较多,特别是分区有属性的情况很容易出错。 所以目前的方法是通过list vol获取卷号及文件系统等信息,在通过获取的卷号列表获取卷属性和分区属性,这样卷号对应的磁盘和分区就有了,最后转换成磁盘分区相关变量。由于并非所有分区都有卷号,所以还需要sel disk #/sel part #/det part,前面获取不到分区属性的也在这里补上,已有的忽略,这样就规避了操作磁盘和磁盘分区获取信息的诸多错误。如果顺利,dpinfo新的测试版将于近期发布!
作者: 精灵尾巴    时间: 2023-2-21 18:48
谢谢分享
作者: dos时代菜鸟    时间: 2023-2-21 19:15
nttwqz 发表于 2023-2-21 18:31
我看了一下,获取分区字节偏移的方法有两种set vol #/det part;sel disk #/sel part #/det part,也就是 ...


作者: yyz2191958    时间: 2023-2-21 19:32
谢谢分享
作者: yjkl    时间: 2023-3-2 12:09
谢谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3