无忧启动论坛

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

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

    [复制链接]
1#
发表于 2022-9-2 17:59:01 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2022-9-2 16:09
部分解决显示 站位 错位问题。
解决方法就是 , 计算其中的中文文字个数,把 字符串 按 英文长度 用空格  ...

是虚拟磁盘拖慢了速度…

点评

用 6.4 版,要快一秒多。  详情 回复 发表于 2022-9-2 18:08
回复

使用道具 举报

2#
发表于 2022-9-2 18:23:43 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2022-9-2 18:08
用 6.4 版,要快一秒多。

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

不过呢,我用了“字典”法,打开diskpart的mui文件,尽可能把里面的字词提取出来,并直接赋予长度值,这样除了卷标以外,基本上就不用计算了。因为大量call的调用太影响效率,这种需要多次调用的“函数”,感觉每次都复制粘贴一次代码也不是很合适,也不太方便以后维护。

点评

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

使用道具 举报

3#
发表于 2023-2-19 00:38:47 | 显示全部楼层
我看,你这个所谓的“尝试通过 字节偏移 找到分区对应的卷信息”只不过是磁盘信息和卷信息的变量转换。
  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正常


点评

可以理解为diskpart依托的众多文件的内部函数句柄对同一个事物的理解不一致。导致分区与卷对应关系出现偏差。  详情 回复 发表于 2023-2-19 10:24
多谢  详情 回复 发表于 2023-2-19 07:14
回复

使用道具 举报

4#
发表于 2023-2-19 11:47:16 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2023-2-19 10:24
可以理解为diskpart依托的众多文件的内部函数句柄对同一个事物的理解不一致。导致分区与卷对应关系出现偏 ...

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

点评

如果 以分区 offset 代替分区号作为分区索引,把分区的 offset 与 卷号做对应关系。或许能 规避问题。  详情 回复 发表于 2023-2-21 08:59
回复

使用道具 举报

5#
发表于 2023-2-21 18:31:12 来自手机 | 显示全部楼层
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新的测试版将于近期发布!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 20:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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