无忧启动论坛

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

又一个 diskpart 硬盘分区信息搜集脚本,玩具。

    [复制链接]
跳转到指定楼层
1#
发表于 2022-9-1 18:54:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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, 下载次数: 55)

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









评分

参与人数 7无忧币 +35 收起 理由
Allreal + 5
纯脆entropy + 5 赞一个!
wybuct + 5 很给力!
928274096 + 5 赞一个!
wuxin9712 + 5
chishingchan + 5 赞一个!
freesoft00 + 5

查看全部评分

2#
 楼主| 发表于 2022-9-1 18:59:56 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-9-3 18:08 编辑

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

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

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

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

各版本暂存区。

点评

600多行脚本啊,算巨著了,学习了!  发表于 2023-8-13 13:43

评分

参与人数 1无忧币 +5 收起 理由
pda8888 + 5 赞一个!

查看全部评分

回复

使用道具 举报

3#
 楼主| 发表于 2022-9-1 19:40:29 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-9-1 19:42 编辑

调用了 4 次 diskpart

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

使用道具 举报

4#
 楼主| 发表于 2022-9-1 21:25:30 | 显示全部楼层
cmd 下运行:
  1.     (echo.&echo.)|parts6.3.cmd debug>x.txt
复制代码
就会把结果 传递给文件x.txt 同时附带 Debug 信息。


回复

使用道具 举报

5#
 楼主| 发表于 2022-9-1 21:31:17 | 显示全部楼层
本帖最后由 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 可能导致的 分区列表获取错误。


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




回复

使用道具 举报

6#
 楼主| 发表于 2022-9-1 22:56:19 来自手机 | 显示全部楼层
chishingchan 发表于 2022-9-1 20:43
建议
1、格式缩小空格!CMD窗口看不完,要向右滚动;
2、有点格式对不齐;

暂时,先不考虑美观的事儿,
这个算法是否可行还说不准呢。

点评

太谦虚了。您的代码看上去赏心悦目!  发表于 2023-8-13 13:46
回复

使用道具 举报

7#
 楼主| 发表于 2022-9-2 08:53:17 | 显示全部楼层
硬盘的gtp特征识别有误,已经纠正了。
回复

使用道具 举报

8#
 楼主| 发表于 2022-9-2 16:09:47 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-9-2 16:14 编辑

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

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


点评

是虚拟磁盘拖慢了速度…  详情 回复 发表于 2022-9-2 17:59
回复

使用道具 举报

9#
 楼主| 发表于 2022-9-2 17:42:26 来自手机 | 显示全部楼层
dfw9 发表于 2022-9-2 16:52
取了X.txt

x局部

设置字体,能容易看一些。
回复

使用道具 举报

10#
 楼主| 发表于 2022-9-2 18:08:21 来自手机 | 显示全部楼层
nttwqz 发表于 2022-9-2 17:59
是虚拟磁盘拖慢了速度…

用 6.4 版,要快一秒多。

点评

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

使用道具 举报

11#
 楼主| 发表于 2022-9-2 20:40:10 来自手机 | 显示全部楼层
nttwqz 发表于 2022-9-2 18:23
我看你想我一样,弄了标签,call调用专门用于计算长度,不过我用的是写入文本文件计算大小再换算的方法, ...

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

使用道具 举报

12#
 楼主| 发表于 2022-9-3 00:23:36 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-9-3 00:27 编辑

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

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

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

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

回复

使用道具 举报

13#
 楼主| 发表于 2022-9-3 10:01:24 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-9-3 10:02 编辑

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





回复

使用道具 举报

14#
 楼主| 发表于 2022-9-3 17:28:36 | 显示全部楼层

回复

使用道具 举报

15#
 楼主| 发表于 2022-9-3 18:58:23 来自手机 | 显示全部楼层
那个 diskpart 擅自 * 选分区的毛病,还是嘚考虑规避。
回复

使用道具 举报

16#
 楼主| 发表于 2022-9-3 20:23:09 来自手机 | 显示全部楼层
iyg429 发表于 2022-9-3 19:46
没看懂 这个软件是干啥的

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

要想找用 diskpart分区的,可以看我的其他贴,比如 pecmd 给 diskpart 做的壳。
回复

使用道具 举报

17#
 楼主| 发表于 2022-9-3 21:58:08 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-9-3 22:08 编辑

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

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

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

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

脚本在1楼
把窗口手动设置成 半透明,看上去就更 “高大上了”
回复

使用道具 举报

18#
 楼主| 发表于 2022-9-11 20:43:31 | 显示全部楼层
18588452015 发表于 2022-9-10 23:55
楼主可以把与diskpart.exe相关的文件都提取出来吗?
那样就方便在有些过度精简的PE中运行了。
先谢谢了! ...

依托 系统部分服务,不好提取。

点评

额,好吧,有没有试过Depends,我试了下,提取的体积太大了,哎。。。  详情 回复 发表于 2022-9-11 20:46
回复

使用道具 举报

19#
 楼主| 发表于 2023-2-6 15:20:39 | 显示全部楼层
610644034 发表于 2023-2-6 12:48
一直用自己感觉不错的脚本!没有见到更合意的!

呵呵哈。

图形界面的 diskpart 了解下

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D2

点评

我的是bat,正常系统中可以用,PE中,无PEcmd 也可以用, 你这个图形界面的,依赖PEcmd ,不适合我!  详情 回复 发表于 2023-2-6 18:09
回复

使用道具 举报

20#
 楼主| 发表于 2023-2-7 06:47:32 来自手机 | 显示全部楼层
610644034 发表于 2023-2-6 18:09
我的是bat,正常系统中可以用,PE中,无PEcmd 也可以用, 你这个图形界面的,依赖PEcmd ,不适合我! 再 ...

美哉美哉。你说的对。
回复

使用道具 举报

21#
 楼主| 发表于 2023-2-7 08:59:48 | 显示全部楼层
本帖最后由 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 改个名字,就是又一个第三方磁盘分区软件,何乐而不为呢?

智者见智,仁者见仁吧。


回复

使用道具 举报

22#
 楼主| 发表于 2023-2-7 11:15:48 | 显示全部楼层
Allreal 发表于 2023-2-7 09:31
这玩意真神了。!!!!要不是各种分区软件这么方便。。。。

分区软件是么?
给你一个

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

点评

一直知道你的名号。没想到这么亲民。 命令行写的比编程软件还好。  详情 回复 发表于 2023-2-7 17:26
回复

使用道具 举报

23#
 楼主| 发表于 2023-2-19 07:14:14 来自手机 | 显示全部楼层
nttwqz 发表于 2023-2-19 00:38
我看,你这个所谓的“尝试通过 字节偏移 找到分区对应的卷信息”只不过是磁盘信息和卷信息的变量转换。

...

多谢
回复

使用道具 举报

24#
 楼主| 发表于 2023-2-19 10:24:26 来自手机 | 显示全部楼层
nttwqz 发表于 2023-2-19 00:38
我看,你这个所谓的“尝试通过 字节偏移 找到分区对应的卷信息”只不过是磁盘信息和卷信息的变量转换。

...

可以理解为diskpart依托的众多文件的内部函数句柄对同一个事物的理解不一致。导致分区与卷对应关系出现偏差。

点评

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

使用道具 举报

25#
 楼主| 发表于 2023-2-21 08:59:05 | 显示全部楼层
nttwqz 发表于 2023-2-19 11:47
我怀疑巨硬都没有认真测试过,虽说8.1之后取消了测试团队,但是有的bug从7到现在都一直存在,看来世界上 ...

如果 以分区 offset 代替分区号作为分区索引,把分区的 offset 与 卷号做对应关系。或许能 规避问题。

点评

我看了一下,获取分区字节偏移的方法有两种set vol #/det part;sel disk #/sel part #/det part,也就是说无论操作卷还是分区,最后都需要det part。就目前来说,list vol获取卷号等信息,再set vol #/det part获取  详情 回复 发表于 2023-2-21 18:31
回复

使用道具 举报

26#
 楼主| 发表于 2023-2-21 19:15:57 | 显示全部楼层
nttwqz 发表于 2023-2-21 18:31
我看了一下,获取分区字节偏移的方法有两种set vol #/det part;sel disk #/sel part #/det part,也就是 ...

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 14:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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