freesoft00 发表于 2020-7-13 19:20:48

兄弟,图中信息,如何导出到文本
>
代码太长懒的看了。
想导出到当前目录txt文本中

nttwqz 发表于 2020-7-13 19:44:02

本帖最后由 nttwqz 于 2020-7-13 19:46 编辑

freesoft00 发表于 2020-7-13 19:20
兄弟,图中信息,如何导出到文本
>
代码太长懒的看了。

搜索脚本定制


:sel
    中间内容删除,改为
    call :menu>"%~dp0\dpinfo.txt"
    如果需要获取几乎全部变量信息,则再加一行
    (set dk&set allvol&set vol)>>"%~dp0\dpinfo.txt"
exit
如果只需要磁盘0的变量信息,那个
set dk_0>>"%~dp0\dpinfo.txt"

freesoft00 发表于 2020-7-13 19:46:49

nttwqz 发表于 2020-7-13 19:44
搜索脚本定制




好的。多谢!

liuzhaoyzz 发表于 2020-12-24 21:31:17

谢谢大神分享!

秋水长天369 发表于 2021-1-6 10:01:51

楼主辛苦了

秋水长天369 发表于 2021-1-6 10:02:06

谢谢分享

nttwqz 发表于 2021-3-24 19:54:14

Win10的卷号错误bug修复原理是:
通过det disk获取的每个磁盘卷号列表是正确的,但是det part获取的分区卷号错误,找出磁盘卷列表中没有的卷号,就是错误卷号,去掉正确卷号,就是错误卷号对应的正确卷号。如果只有一个分区卷号错误,其肯定是相对应的;如果2个以上错误,对比其大小、文件系统、卷标(一般为空),一个分区只有一个与之相同的才能修复,如果错误卷号中两个分区的大小、文件系统、卷标(一般为空)完全相同,则无法修复,但是此种情况一般少见,因为错误的恢复分区居多。

shan 发表于 2021-3-25 20:59:39

收下试试看{:1_194:}

szwp 发表于 2021-4-11 10:50:35

磁盘大小能否显示为MB?因为分区时是按MB分的,能看到MB的话分区可以更精确些。

nttwqz 发表于 2021-4-11 22:26:14

本帖最后由 nttwqz 于 2021-4-11 22:51 编辑

szwp 发表于 2021-4-11 10:50
磁盘大小能否显示为MB?因为分区时是按MB分的,能看到MB的话分区可以更精确些。
问题是,怎么通过diskpart获取磁盘大小的单位MB数值?用GB换算成MB本身已经不准确。list disk/det disk都是自动单位,如果能使用diskpart以外的工具则另说。

下面是1T机械800G以上的GPT分区无损调整为三个区的脚本,调整好之后,是300G、300G、剩余空间
你说的应该是压缩过之后的第一个300G分区,因为分区单位GB,大小GB*1024-307208只能得到大概的数值,这就造成了实际调整后的分区可能是300.32G这样的情况,你想要的应该是更准确的数值,我不知道怎么获取磁盘分区MB这样的数值?下个分区的分区偏移量字节值换算?分区偏移量也不一定等于分区大小吧?何况这涉及超范围计算,批处理之家倒是有封装好的函数直接用call来调用。批处理本身直接计算仅支持2G以下空间的字节值,就是2147483647/1024/1024=2047,无法计算大于2147483647的数值

      rem 生成GPT分区无损分区脚本
      if /i "!dk_%sel_hd%_parttable!"=="GPT" (
                echo;rem %remtip%
                echo;sel disk %sel_hd%
                echo;sel part %sel_p%
                set /a desired=dk_%sel_hd%_%sel_p%_size_num*1024-307208
                echo;shrink desired=!desired!
                echo;cre part pri size=307208
                echo;format fs=ntfs quick override
                echo;assign
                echo;cre part pri
                echo;format fs=ntfs quick override
                echo;assign
      )>"%temp%\dpscript.sfb"

所以,个人忽略了上述情况,因为很多时候300.**文件管理器里也是显示成300G的,至于不是的,无所谓了。你若需要更精确的分区,可以自己写代码,本工具中就是将下个分区的偏移量字节值处理计算后设置成上个分区的MB大小,最后一个只能减去上个分区的字节偏移了,如果你会变量嵌套的话,这并不是什么难事,超范围计算函数你在批处理之家找找。

szwp 发表于 2021-4-12 11:00:34

最近发现同一批次的盘容量也有几十兆的差距。diskpart对于显示单位好像是自动根据容量来显示成GB、MB、KB,或许先分一次区,看剩余可用能精确些,在磁盘管理的磁盘属性-卷里显示的容量是MB。俺再看看有没其它方式获取磁盘的总扇区数。

nttwqz 发表于 2021-4-12 11:07:29

本帖最后由 nttwqz 于 2021-4-12 11:09 编辑

szwp 发表于 2021-4-12 11:00
最近发现同一批次的盘容量也有几十兆的差距。diskpart对于显示单位好像是自动根据容量来显示成GB、MB、KB, ...

全新一键分区不用知道具体MB,都是现成方案直接创建

szwp 发表于 2021-4-12 11:24:03

nttwqz 发表于 2021-4-12 11:07
全新一键分区不用知道具体MB,都是现成方案直接创建

硬盘管理里显示的分区单位通常是G,有2位小数,误差在5兆内才会显示.00。有点强迫症吧,所以经常要在脚本里调整下数字。

nttwqz 发表于 2021-4-12 11:37:31

本帖最后由 nttwqz 于 2021-4-12 12:40 编辑

szwp 发表于 2021-4-12 11:24
硬盘管理里显示的分区单位通常是G,有2位小数,误差在5兆内才会显示.00。有点强迫症吧,所以经常要在脚本 ...

一般整数MB+8就好,比如307208就显示整数300G,102408就显示整数100GB

有整数分区计算器,可以搜搜,下面就是一个

https://www.iplaysoft.com/tools/partition-calculator/

szwp 发表于 2021-4-12 16:18:57



不知道为啥有台电脑的硬盘型号没显示出来。

磁盘管理中保留2位小数,所以大于0.005G=5.12MB就有零头.01显示,而硬盘容量只到MB话,还是有可能会有不到0.5MB零头,安全的无零头显示还是+4以内。如果以shrink方式的话,+5也是安全的,下次试试,不过怕会影响分区序号,以前增删后序号有变化引起多引导的错误。


nttwqz 发表于 2021-4-12 17:43:34

本帖最后由 nttwqz 于 2021-4-12 17:50 编辑

szwp 发表于 2021-4-12 16:18
不知道为啥有台电脑的硬盘型号没显示出来。

磁盘管理中保留2位小数,所以大于0.005G=5.12MB就有零头 ...

之前用Win7测试的时候发现其不能显示硬盘型号,所以添加限制以防出错,刚测试发现Win7不行,Win7 SP1可以,也就是7601可以。

所以需要改变系统版本号判断如下

for /f "tokens=2 delims=[]" %%Q in ('ver') do for /f "tokens=2-4 delims=. " %%R in ("%%Q") do set "ver=%%R%%S"&set "verbuild=%%T"

并将搜索到的第一个name行if %ver% gtr 61 if not defined dk_!dn!_name开头的if %ver% gtr 61改成if %ver% gtr 60 if %verbuild% gtr 7600

简单试了下,删除版本限制也并没有获取到错误的值

nttwqz 发表于 2021-4-12 17:48:27

szwp 发表于 2021-4-12 16:18
不知道为啥有台电脑的硬盘型号没显示出来。

磁盘管理中保留2位小数,所以大于0.005G=5.12MB就有零头 ...

刚研究了下偏移量字节值相减对比分区大小差距,有的相同,有的差几M,有的差几K,有的甚至差1G,看来这个不太准确,也或许需要其它计算方法。

szwp 发表于 2021-4-12 18:09:24

nttwqz 发表于 2021-4-12 17:43
之前用Win7测试的时候发现其不能显示硬盘型号,所以添加限制以防出错,刚测试发现Win7不行,Win7 SP1可 ...

DiskPart 版本 6.1.7601
WIN7 32位,打过SP1

型号未显示。

szwp 发表于 2021-4-12 18:13:49

脚本修改后可以显示了。

2011slkj 发表于 2021-4-23 20:09:27

谢谢分享

cchessy 发表于 2021-5-6 15:46:49

谢谢分享!

f2021z 发表于 2021-6-25 08:25:44

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

nttwqz 发表于 2022-8-31 22:23:42

时隔将近一年,再次更新一下

dos时代菜鸟 发表于 2022-8-31 22:40:07

对于 diskpart bug ,确定 分区 与 卷 对应关系上,
能否考虑 通过下面命令, 获取 字节偏移 select vol 卷号
detail part
,配合 下面命令 ,来精准找出 对应关系?sele disk 盘号
select part 分区号
detail part


nttwqz 发表于 2022-9-1 01:49:07

dos时代菜鸟 发表于 2022-8-31 22:40
对于 diskpart bug ,确定 分区 与 卷 对应关系上,
能否考虑 通过下面命令, 获取 字节偏移
,配合 下 ...

看了下之前的回复,上次研究此bug已经是差不多一年半以前的事情了,我也记不太清除当初为何才用了这种信息对比排除法,感觉代码写多了有时候想法会陷入误区,无法达到当局者也清的境界。

根据之前的记载及刚刚的测试,det disk/list vol获取的卷号的确是正确的,sel part/det part获取的卷号是错误的。既然如此,以det disk/list vol获取的正确卷号通过sel vol/det vol /det part就能获取对应的磁盘与分区的关系,这样依然能获取卷对应的磁盘分区,磁盘的卷列表,这样就跳过这个卷号错误的bug了。

不过呢,选择卷和选择分区获取信息都有bug,我记得有的选择卷获取不到分区信息,有的选择分区获取不到卷信息{:1_201:}

刚刚又试了一下,目前发现det disk/list vol获取的卷号还是比较准确的,sel part/det part的bug远不止卷号错误这么简单,目前发现的bug可能只是冰山一角,有属性的都容易出错,下面这种情形连卷号都获取不到了(这也导致了2.6.4中该卷号无法获取的bug),但是选择卷获取正常。diskpart真是从让人从研究到放弃,这bug何其多啊,让人产生一种用编程语言重写的冲动,可惜我不会……

我在考虑,要不要从第一步list vol获取卷号及卷部分信息,det disk获取磁盘所属卷信息,改成将获取的磁盘卷号通过sel vol/det vol/det part获取信息来规避卷号错误bug,不过不知道用的多了会不会发现新的bug。

8.1系统
DISKPART> det disk

Microsoft Virtual Disk
磁盘 ID: {F728F485-3491-4096-AC8A-F1DD4A3682E1}
类型   : 虚拟备份的文件
状态 : 联机
路径   : 0
目标 : 0
LUN ID : 2
位置路径 : UNAVAILABLE
当前只读状态: 否
只读: 否
启动磁盘: 否
页面文件磁盘: 否
休眠文件磁盘: 否
故障转储磁盘: 否
群集磁盘: 否

卷 ###      LTR标签         FS   类型      大小   状态       信息
---------------------------------------------------------------
卷   8                      RAW    磁盘分区      2048 MB正常         已隐藏
卷   9                      NTFS   磁盘分区          28 GB正常
卷   10                     RAW    磁盘分区         100 MB正常         已隐藏
卷   11                     NTFS   磁盘分区      1024 MB正常         已隐藏

DISKPART> list part

分区 ###       类型            大小   偏移量
-------------------------------------------
分区      1    保留               128 MB    17 KB
分区      2    系统               100 MB   129 MB
分区      3    恢复                1024 MB   229 MB
分区      4    主要                2048 MB1253 MB
分区      5    主要                  28 GB3301 MB

DISKPART> sel part 4

分区 4 现在是所选分区。

DISKPART> det vol

没有选择卷。
请选择一个卷,再试一次。

DISKPART> det part

分区 4
类型    : ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
隐藏: 是
必需: 是
属性: 0XF000000000000001
字节偏移: 1313865728

没有跟这个分区相关联的卷。

<blockquote>DISKPART> sel vol 8

nttwqz 发表于 2022-9-1 08:36:23

论坛又把贴子后半部分吃掉了

dos时代菜鸟 发表于 2022-9-1 13:06:17

本帖最后由 dos时代菜鸟 于 2022-9-1 13:22 编辑

nttwqz 发表于 2022-9-1 01:49
看了下之前的回复,上次研究此bug已经是差不多一年半以前的事情了,我也记不太清除当初为何才用了这种信 ...
搞了一个 通过 分区 字节偏移量 来定位 分区 与 卷 对应关系的 脚本。不知道 能不能规避 一些bug .




sn4735 发表于 2023-1-13 19:54:49

这么多的代码,楼主辛苦了,感谢分享

nttwqz 发表于 2023-2-21 23:29:37

本帖最后由 nttwqz 于 2023-2-21 23:55 编辑

测试版更新日志
尝试规避或修复diskpart本身的bug引起的bug

由于diskpart脚本行数的增加等原因效率比2.6.4下降了大约15%


p1509101 发表于 2023-2-21 23:53:33

感谢分享 很实用
页: 1 2 3 4 [5] 6
查看完整版本: dpinfo 2.6.5 beta2 磁盘分区信息 分区相关工具定制脚本