找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: dos时代菜鸟

diskpart shell ,用 pecmd 给 diskpart 做个外壳 ver:1.29.3

   火... [复制链接]
 楼主| 发表于 2019-7-26 10:52:41 | 显示全部楼层
1.22.1
改进 指令组 运行中 中断 功能,用户可以 在指令运行时间长不想再运行时,选择中断。
回复

使用道具 举报

 楼主| 发表于 2019-7-26 20:02:50 | 显示全部楼层
调试,各种问题。
1.22.3 算是基本稳定了吧。
也没感觉快多少,就是 二次获取 硬盘分区序列 时要快一点点。可能是我的电脑太旧了。

用 pecmd 调取 diskpart 获取硬盘分区序列,对 硬盘以及分区进行 一些操作,
用到了 向 diskpart 常驻进程 发送指令 并 获取结果的思路,同时 采用双 diskpart 进程来交替 接收操作,来减缓因 输出文件过大而 延时变慢的问题。

这些权当是个 思路吧。

点评

那就没办法了。 线程只对有余力的电脑有效果,多出来的余力干更多的事。 我的电脑运行简单的Sel和Detail命令,连续运行1500次,平均耗时 35 ms -切换diskpart 和 70 ms - 单一diskpart。  详情 回复 发表于 2019-7-26 21:20
回复

使用道具 举报

发表于 2019-7-26 21:20:48 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-26 20:02
调试,各种问题。
1.22.3 算是基本稳定了吧。
也没感觉快多少,就是 二次获取 硬盘分区序列 时要快一点点 ...

那就没办法了。

线程只对有余力的电脑有效果,多出来的余力干更多的事。

我的电脑运行简单的Sel和Detail命令,连续运行1500次,平均耗时 35 ms -切换diskpart 和 70 ms - 单一diskpart。

点评

diskpart 的命令是要有个连续性的, 盲目换进程肯定不行, 比如,在一个进程 SELECT DISK 0 了,在另一个进程 DETAIL DISK 就会显示让你选个盘,因为第二进程不知道你选了哪个硬盘。  详情 回复 发表于 2019-7-27 11:00
如果读取文件大小 ,应该 比读取文件行数更节省时间。  详情 回复 发表于 2019-7-27 08:51
回复

使用道具 举报

 楼主| 发表于 2019-7-27 08:51:26 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-27 08:52 编辑
datbik189 发表于 2019-7-26 21:20
那就没办法了。

线程只对有余力的电脑有效果,多出来的余力干更多的事。


如果读取文件大小 ,应该 比读取文件行数更节省时间。
读取文件最后一行,跟读取 少量十几行 用时应该差不多。

点评

写个简单脚本测试下就好。  详情 回复 发表于 2019-7-27 11:46
回复

使用道具 举报

 楼主| 发表于 2019-7-27 11:00:47 来自手机 | 显示全部楼层
datbik189 发表于 2019-7-26 21:20
那就没办法了。

线程只对有余力的电脑有效果,多出来的余力干更多的事。

diskpart 的命令是要有个连续性的,
盲目换进程肯定不行,
比如,在一个进程 SELECT DISK 0 了,在另一个进程 DETAIL DISK  就会显示让你选个盘,因为第二进程不知道你选了哪个硬盘。

点评

无缝衔接,处理下就好了,可以用diskpart查询,也可以分析历史记录。  详情 回复 发表于 2019-7-27 11:45
回复

使用道具 举报

发表于 2019-7-27 11:45:08 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-27 11:00
diskpart 的命令是要有个连续性的,
盲目换进程肯定不行,
比如,在一个进程 SELECT DISK 0 了,在另一 ...


无缝衔接,处理下就好了,可以用diskpart查询,也可以分析历史记录。
回复

使用道具 举报

发表于 2019-7-27 11:46:34 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-27 08:51
如果读取文件大小 ,应该 比读取文件行数更节省时间。
读取文件最后一行,跟读取 少量十几行 用时应该 ...

写个简单脚本测试下就好。
回复

使用道具 举报

 楼主| 发表于 2019-7-27 23:11:39 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-27 23:20 编辑

pecmd 调取并行 窗口 通常会用
  1. call @-win0
复制代码

但有时窗口中的控件会显示不出来,所以我用
  1. thrd call @win0
复制代码

然后再用这个关闭窗口
  1. kill \%win0%
复制代码


但是 thrd 方式开启并行窗口 会有延时,如果 kill 指令在这个延时内运行,就是说 窗口还没有打开就运行 关闭指令,那么窗口将一直没有被关闭。
所以,在 thrd call @win0 以后要先进行一个 循环判断,判断指定标题的窗口确实存在了以后再运行下面的指令。

  1.   loop #1=1,  //循环判断 窗口已经开启
  2.   {
  3.       find --forpid:%&__PID% --wid*@ &win_info,窗口标题
  4.       find $%&win_info%!=,exit loop
  5.   }
复制代码

这问题一直没有发现,导致左改改,右改改的,还以为什么地方的循环没有设置好,导致窗口一直没有被关闭。
再次更新下,1.22.6


以前只会用 find 当 if 用,这下会用他判断窗口了。哈哈哈,也算有点儿长进。

回复

使用道具 举报

发表于 2019-7-27 23:24:32 来自手机 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-27 23:34 编辑

新文本比较旧文本获取更新部份还有一种方法,用size命令获取新旧文本的差值,再用GETE#获取更新部份的文本原样,最后用code命令转成uni,不知道这样会不会快些,也不用切换diskpart. 该方法没测试过,也许也行不通.

点评

可以试试看。 其实慢就慢在读取临时文件上了。 那么 getf 怎么用呢? 文件的查询位置又如何计算呢,还要计算最后一行是否为特定内容来判断 diskpart 指令是否运行完了。  详情 回复 发表于 2019-7-27 23:33
回复

使用道具 举报

 楼主| 发表于 2019-7-27 23:33:40 | 显示全部楼层
datbik189 发表于 2019-7-27 23:24
新文本比较旧文本获取更新部份还有一种方法,用size命令获取旧文本的大小值,再用GETE#获取更新部份的文本 ...

可以试试看。
其实慢就慢在读取临时文件上了。
那么 getf 怎么用呢? 文件的查询位置又如何计算呢,还要计算最后一行是否为特定内容来判断 diskpart 指令是否运行完了。

点评

换工作了手里没电脑,不然可以通过代码演示一下。 人为的在代码后加2回车,如set. v=list disk\n\n,判断最后二行作为代码运行完毕的标志。GETF# 123.txt,(旧文本大小+5)#*,&V,再用code **-ansi,&V,**-uni,&  详情 回复 发表于 2019-7-27 23:50
回复

使用道具 举报

发表于 2019-7-27 23:50:21 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-27 23:33
可以试试看。
其实慢就慢在读取临时文件上了。
那么 getf 怎么用呢? 文件的查询位置又如何计算呢,还 ...

换工作了手里没电脑,不然可以通过代码演示一下。

人为的在代码后加2回车,如set. v=list disk\n\n,判断最后二行作为代码运行完毕的标志。GETF# 123.txt,(旧文本大小+5)#*,&V,再用code **-ansi,&V,**-uni,&V

点评

好的, 初步测试了一下,你这个方法,可以用秒算结果来形容了。  详情 回复 发表于 2019-7-28 11:17
回复

使用道具 举报

 楼主| 发表于 2019-7-28 11:17:18 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-28 11:47 编辑
datbik189 发表于 2019-7-27 23:50
换工作了手里没电脑,不然可以通过代码演示一下。

人为的在代码后加2回车,如set. v=list disk\n\n, ...


好的,
初步测试了一下,你这个方法,可以用秒算结果来形容了。

新版本已经更新到1楼

点评

解决了就好,附件是我的测试结果,看起来还可以。 用的电脑是T420i,7年前的电脑,奔腾处理器 [attachimg]398887[/attachimg]  详情 回复 发表于 2019-8-13 22:25
回复

使用道具 举报

 楼主| 发表于 2019-7-29 08:07:14 | 显示全部楼层
回复

使用道具 举报

发表于 2019-7-29 23:30:04 | 显示全部楼层
可喜可贺,速度终于大幅超越了我写的批处理!

但是发现一些错误,就是那种list part就默认选中分区,无法执行选择分区操作的情况。

捕获.PNG

点评

看来没有获得到 卷信息。 selece disk 1 detail disk 看看能获取卷的信息么, 还有 list vol  详情 回复 发表于 2019-7-30 08:31
回复

使用道具 举报

 楼主| 发表于 2019-7-30 08:31:41 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-30 10:31 编辑
nttwqz 发表于 2019-7-29 23:30
可喜可贺,速度终于大幅超越了我写的批处理!

但是发现一些错误,就是那种list part就默认选中分区,无 ...





看来没有获得到 卷信息。
看看这个行不行 diskpart Shell 1.23.2.7z (1.63 MB, 下载次数: 4)

select disk 1
detail disk

如果能的话
select vol 3
detail  part

帮忙看下结果呗
十分怀疑 选择这个卷以后 ,detail part 的时候,分区焦点没有定位到这个卷,也就 行首没有 *
从图片看,应该 是 只获取到 list part 中 分区的部分信息,脚本应该是 识别处这个卷是一个分区,但是却没有通过 detail part 获取到这个卷的具体信息。



看看能获取卷的信息么,

还有
list vol  

点评

没有什么变化。。。  详情 回复 发表于 2019-7-30 22:04
回复

使用道具 举报

 楼主| 发表于 2019-7-30 14:27:19 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-30 14:59 编辑

获取硬盘分区序列的算法:
1、list disk获取硬盘列表 计算硬盘个数/dyn/sta/size/free
2、逐个选取硬盘 sele disk x
        3、detail disk 获取硬盘信息和所包含的各个卷
               硬盘的 name/prot/gpt/rw/info
         4、获得卷的信息
               卷的 卷号/盘符/卷标/FS/STA/info
         5、逐个选择卷 sele vol x
         6、detail part 获得卷及对应分区编号和部分分区信息
                卷对应的 分区号/act/id
          7、detail vol 获取卷的一些信息
                 卷对应的 rw/hid/free
     8、list part 获取该硬盘对应的分区列表 获取各个分区的一部分信息
          分区对应的 硬盘/分区号/type/size/offset
     9、逐个判断分区是否有对应的卷,如果有,就用(4/5/6步)已提取过的卷数据冲入该分区对应的变量组中,如果没有
          10、选择这个分区 sele part x
          11、detail part  获取分区对应的另一部分信息,因为其没有对应的卷也就不需要提取计算其对应的卷信息。
12、list vdisk  获取虚拟硬盘列表,将虚拟硬盘的部分信息修改进对应硬盘的信息中,name/port等


这个算法
1、绕开了,对于 mbr 模式下 的 id=ef 的分区,在 win10-2019-ltsc 下 不能通过 select part /detail part 的方式 获取卷信息的情况,用 select vol /detail part 却可以获取 卷信息。
2、同时对于第10步 ,某些 part 会被自动选择 自动定位焦点 * ,导致 select part x 失效的情况,事实上,这样的盘都是卡盘,只有一个分区,detail part 仍然可以成功获取这个分区的信息,只需要在获取分析输出信息时将 "*" 这个字符 替换掉或者绕开读取就可以了。
3、针对楼上 的反馈,可能 sele vol /detail part 不能获取 卷焦点,导致无法获取卷行信息的情况,直接在 detail disk 阶段就获取 该硬盘个卷信息也就是了。
回复

使用道具 举报

发表于 2019-7-30 22:04:40 | 显示全部楼层
本帖最后由 nttwqz 于 2019-7-30 22:09 编辑
dos时代菜鸟 发表于 2019-7-30 08:31
看来没有获得到 卷信息。
看看这个行不行


没有什么变化。。。

  1. DISKPART> list disk

  2.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  3.   --------  -------------  -------  -------  ---  ---
  4.   磁盘 0    联机               59 GB  2031 KB        *
  5.   磁盘 1    联机               59 GB      0 B

  6. DISKPART> sel disk 1

  7. 磁盘 1 现在是所选磁盘。

  8. DISKPART> det disk

  9. Generic STORAGE DEVICE USB Device
  10. 磁盘 ID: 00000001
  11. 类型   : USB
  12. 状态 : 联机
  13. 路径   : 0
  14. 目标 : 0
  15. LUN ID : 0
  16. 位置路径 : UNAVAILABLE
  17. 当前只读状态: 否
  18. 只读: 否
  19. 启动磁盘: 否
  20. 页面文件磁盘: 否
  21. 休眠文件磁盘: 否
  22. 故障转储磁盘: 否
  23. 群集磁盘  : 否

  24.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  25.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  26.   卷     3     D                NTFS   可移动           59 GB  正常


  27. DISKPART> list vol

  28.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  29.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  30.   卷     0     C                NTFS   磁盘分区          59 GB  正常         启动
  31.   卷     1                      FAT32  磁盘分区         128 MB  正常         系统
  32.   卷     2                      NTFS   磁盘分区         400 MB  正常         已隐藏
  33.   卷     3     D                NTFS   可移动           59 GB  正常


  34. DISKPART> sel vol 3

  35. 卷 3 是所选卷。

  36. DISKPART> det part

  37. 没有选择分区。
  38. 请选择一个分区,再试一次。

  39. DISKPART> list vol

  40.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  41.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  42.   卷     0     C                NTFS   磁盘分区          59 GB  正常         启动
  43.   卷     1                      FAT32  磁盘分区         128 MB  正常         系统
  44.   卷     2                      NTFS   磁盘分区         400 MB  正常         已隐藏
  45. * 卷     3     D                NTFS   可移动           59 GB  正常


  46. DISKPART> det vol

  47.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  48.   --------  -------------  -------  -------  ---  ---
  49. * 磁盘 1    联机               59 GB      0 B

  50. 只读                   : 否
  51. 隐藏                   : 否
  52. 没有默认驱动器号       : 否
  53. 卷影副本               : 否
  54. 脱机                : 否
  55. BitLocker 已加密       : 否
  56. 可安装            : 否

  57. 卷容量                 :   59 GB
  58. 卷可用空间             :   34 GB
复制代码

点评

调整了一下算法 还得请老弟帮忙测试下。 获取硬盘分区序列的算法: 1、list disk获取硬盘列表 计算硬盘个数/dyn/sta/size/free 2、逐个选取硬盘 sele disk x 3、detail disk 获取硬盘信息和所包含的  详情 回复 发表于 2019-7-31 10:03
多谢反馈。 明白了,果然如此,问题出在detail part 上了,原来是 select vol 后,不能通过detail part 获取分区信息。脚本判断这个卷没有对应的分区,没有采集这个卷的信息。 而 select part 以后,因为前面的  详情 回复 发表于 2019-7-30 23:31
回复

使用道具 举报

 楼主| 发表于 2019-7-30 23:31:39 来自手机 | 显示全部楼层
nttwqz 发表于 2019-7-30 22:04
没有什么变化。。。

多谢反馈。

明白了,果然如此,问题出在detail part 上了,原来是 select vol 后,不能通过detail part 获取分区信息。脚本判断这个卷没有对应的分区,没有采集这个卷的信息。
而 select part 以后,因为前面的判断这个分区没有对应的卷,如同扩展分区,也就没有采集这个分区的卷信息。
明天改进下。
回复

使用道具 举报

 楼主| 发表于 2019-7-31 10:03:50 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-31 10:06 编辑
nttwqz 发表于 2019-7-30 22:04
没有什么变化。。。


调整了一下算法
diskpart Shell 1.23.3.7z (1.63 MB, 下载次数: 1) 还得请老弟帮忙测试下。

获取硬盘分区序列的算法:
1、list disk获取硬盘列表 计算硬盘个数/dyn/sta/size/free
2、逐个选取硬盘 sele disk x
        3、detail disk 获取硬盘信息和所包含的各个卷
               硬盘的 name/prot/gpt/rw/info
         4、逐个选择卷 sele vol x
         5、detail part 获得卷及对应分区编号和部分分区信息,如果无法获取改卷对应的分区,也将该卷信息存储备用。
                卷对应的 分区号/act/id/hid#
         6、获得卷的信息
               卷的 卷号/盘符/卷标/FS/STA/info
         7、detail vol 获取卷的一些信息
                 卷对应的 rw/hid*/free
     8、list part 获取该硬盘对应的分区列表 获取各个分区的一部分信息
          分区对应的 硬盘/分区号/type/size/offset
     9、逐个判断分区是否有对应的卷,如果有,就用(5/6/7步)已提取过的卷数据冲入该分区对应的变量组中,如果没有
          10、选择这个分区 sele part x
          11、detail part  获取分区对应的另一部分信息  分区号/act/id/hid#/卷号 (与第5步内容相同)
          12、如果获取到分区对应的卷,就将前面 (6/7步)获取的卷信息冲入分区变量组中
13、list vdisk  获取虚拟硬盘列表,将虚拟硬盘的部分信息修改进对应硬盘的信息中,name/port等

常常情况下 diskpart 内建的 vol+part 体系会互相关联,也就是 select vol 时,相关的part 也会获得焦点,而 select part 时 ,对应的 vol 也会获得焦点。
但是,
有的分区信息不能通过 select vol + detail part +detail vol方式获取(比如某些移动卡 part 被自动选择焦点),
而另有一些分区信息又不能通过select disk + select part + detail part 的方式获取(比如 win10-2019-ltsc中的 id=ef 的分区),这个算法照顾到这两种情况而设计。
算法设计绝不是将某个 特例 当作特例而添加 “如果。。。那么” 来解决,而是将两套算法融合,使用于将来可能更广泛的情况。

点评

问题依旧!  详情 回复 发表于 2019-7-31 20:57
回复

使用道具 举报

发表于 2019-7-31 20:57:27 | 显示全部楼层
本帖最后由 nttwqz 于 2019-7-31 21:02 编辑
dos时代菜鸟 发表于 2019-7-31 10:03
调整了一下算法
还得请老弟帮忙测试下。


问题依旧!


我就是添加 “如果。。。那么” 来解决来解决的,因为我认为这属于diskpart的一个bug,哈哈哈哈哈哈。

点评

彻底晕了。 能 sele part detail part detail vol 看下 结果么?  详情 回复 发表于 2019-7-31 21:07
回复

使用道具 举报

 楼主| 发表于 2019-7-31 21:07:39 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-31 21:54 编辑


彻底晕了。

----------------------
sele vol
detail part
detail vol
list part
-----------------------
sele part
detail part
detail vol
list vol

看下 结果么?
难道 sele part 后 detail part 也不能获取 分区信息?难道需要 sele part + list vol 来确定 分区与卷的对应关系?

如果问题只出现在 移动卡 上,也就无所谓,这样的卡,用 diskpart 从新分区就没这毛病了,如果不想对它进行分区,diskpart 识别不出它的信息也就无所谓了。diskpart 就是分区用的。

点评

这就是我电脑的第二步的diskpart脚本  详情 回复 发表于 2019-7-31 22:10
针对这个bug,列表分区自动选中,无法通过sel vol,detail part获取信息,因为无法sel part! 正确的或者说我的解决办法是: sel disk det disk list part sel vol det vol  详情 回复 发表于 2019-7-31 22:07
回复

使用道具 举报

发表于 2019-7-31 22:07:37 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-31 21:07
彻底晕了。

----------------------
  1. 我写的脚本获取磁盘分区序列的核心算法是:

  2. 1. 列表磁盘,逐个获取磁盘详细信息,逐个磁盘列表分区,并将这些信息定义为变量,生成第二步的diskpart脚本
  3. 2. 逐个选择磁盘,选择分区或卷,获取分区详细信息、卷详细信息,并将这些信息定义为变量
复制代码



针对这个bug,列表分区自动选中,无法通过sel vol,detail part获取信息,因为无法sel part!
正确的或者说我的解决办法是:
sel disk
det disk
list part
sel vol
det vol
回复

使用道具 举报

发表于 2019-7-31 22:10:08 | 显示全部楼层
本帖最后由 nttwqz 于 2019-7-31 22:12 编辑
dos时代菜鸟 发表于 2019-7-31 21:07
彻底晕了。

----------------------


这就是我电脑的第二步的diskpart脚本

  1. sel disk 0
  2. sel part 1
  3. detail part
  4. detail vol
  5. sel part 2
  6. detail part
  7. detail vol
  8. sel part 3
  9. detail part
  10. sel part 4
  11. detail part
  12. detail vol
  13. sel disk 1
  14. detail disk
  15. sel vol 3
  16. detail vol
复制代码


第二步脚本执行结果

  1. Microsoft DiskPart 版本 6.3.9600

  2. Copyright (C) 1999-2013 Microsoft Corporation.
  3. 在计算机上: SSJ-PC

  4. 磁盘 0 现在是所选磁盘。

  5. 分区 1 现在是所选分区。

  6. 分区 1
  7. 类型    : c12a7328-f81f-11d2-ba4b-00a0c93ec93b
  8. 隐藏  : 是
  9. 必需: 否
  10. 属性  : 0X8000000000000000
  11. 字节偏移: 1048576

  12.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  13.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  14. * 卷     1                      FAT32  磁盘分区         128 MB  正常         系统      

  15.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  16.   --------  -------------  -------  -------  ---  ---
  17. * 磁盘 0    联机               59 GB  2031 KB        *

  18. 脱机                : 否

  19. 分区 2 现在是所选分区。

  20. 分区 2
  21. 类型    : de94bba4-06d1-4d40-a16a-bfd50179d6ac
  22. 隐藏  : 是
  23. 必需: 是
  24. 属性  : 0X8000000000000001
  25. 字节偏移: 135266304

  26.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  27.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  28. * 卷     2                      NTFS   磁盘分区         400 MB  正常         已隐藏     

  29.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  30.   --------  -------------  -------  -------  ---  ---
  31. * 磁盘 0    联机               59 GB  2031 KB        *

  32. 脱机                : 否

  33. 分区 3 现在是所选分区。

  34. 分区 3
  35. 类型    : e3c9e316-0b5c-4db8-817d-f92df00215ae
  36. 隐藏  : 是
  37. 必需: 否
  38. 属性  : 0X8000000000000000
  39. 字节偏移: 555745280

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

  41. 分区 4 现在是所选分区。

  42. 分区 4
  43. 类型    : ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
  44. 隐藏  : 否
  45. 必需: 否
  46. 属性  : 0X8000000000000000
  47. 字节偏移: 658505728

  48.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  49.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  50. * 卷     0     C                NTFS   磁盘分区          59 GB  正常         启动      

  51.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  52.   --------  -------------  -------  -------  ---  ---
  53. * 磁盘 0    联机               59 GB  2031 KB        *

  54. 只读                   : 否
  55. 隐藏                   : 否
  56. 没有默认驱动器号       : 否
  57. 卷影副本               : 否
  58. 脱机                : 否
  59. BitLocker 已加密       : 否
  60. 可安装            : 是

  61. 卷容量                 :   59 GB
  62. 卷可用空间             :   13 GB

  63. 磁盘 1 现在是所选磁盘。

  64. Generic STORAGE DEVICE USB Device
  65. 磁盘 ID: 00000001
  66. 类型   : USB
  67. 状态 : 联机
  68. 路径   : 0
  69. 目标 : 0
  70. LUN ID : 0
  71. 位置路径 : UNAVAILABLE
  72. 当前只读状态: 否
  73. 只读: 否
  74. 启动磁盘: 否
  75. 页面文件磁盘: 否
  76. 休眠文件磁盘: 否
  77. 故障转储磁盘: 否
  78. 群集磁盘  : 否

  79.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  80.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  81.   卷     3     D                NTFS   可移动           59 GB  正常                 

  82. 卷 3 是所选卷。

  83.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  84.   --------  -------------  -------  -------  ---  ---
  85. * 磁盘 1    联机               59 GB      0 B         

  86. 只读                   : 否
  87. 隐藏                   : 否
  88. 没有默认驱动器号       : 否
  89. 卷影副本               : 否
  90. 脱机                : 否
  91. BitLocker 已加密       : 否
  92. 可安装            : 否

  93. 卷容量                 :   59 GB
  94. 卷可用空间             :   34 GB
复制代码

点评

我想知道 如果他 自动选择了 part ,那么 detail disk 和 list vol 的时候,那个bug分区对应的卷是否也会被自动选择了呢?如果是的话,就可以 确定 part 与 vol 的对应关系了。  详情 回复 发表于 2019-7-31 22:15
回复

使用道具 举报

 楼主| 发表于 2019-7-31 22:15:57 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-31 22:20 编辑
nttwqz 发表于 2019-7-31 22:10
这就是我电脑的第二步的diskpart脚本


我想知道 如果他 自动选择了 part ,那么 detail disk 和 list vol 的时候,那个bug分区对应的卷是否也会被自动选择了呢?如果是的话,就可以 确定 part 与 vol 的对应关系了。

如果 detail part 无法运行,那么 id  隐藏 激活 之类的信息也就无法获取了。

点评

你想多了,没有!  详情 回复 发表于 2019-7-31 22:24
回复

使用道具 举报

发表于 2019-7-31 22:24:57 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-31 22:15
我想知道 如果他 自动选择了 part ,那么 detail disk 和 list vol 的时候,那个bug分区对应的卷是否也 ...

你想多了,没有!

点评

原来我也有这么个 卡,后来被我 diskpart 弄了一遍,就没这毛病了。 也不知道这毛病怎么弄出来的。 如果一个卡 里面有俩这样的分区,就麻烦了。 sele vol 以后,list part,看 * 焦点 ,应该能确定 那个卷对应的  详情 回复 发表于 2019-7-31 22:32
回复

使用道具 举报

 楼主| 发表于 2019-7-31 22:32:58 | 显示全部楼层
nttwqz 发表于 2019-7-31 22:24
你想多了,没有!

原来我也有这么个 卡,后来被我 diskpart 弄了一遍,就没这毛病了。
也不知道这毛病怎么弄出来的。 如果一个卡 里面有俩这样的分区,就麻烦了。

sele vol 以后,list part,看 * 焦点 ,应该能确定 那个卷对应的分区。因为 它不是 自动 * 的么?呵呵
那么,如果 sele part 然后 list vol 能看到  vol 的焦点落在对应的卷上么?

要是 不论  sele vol 还是 selel part ,都不能 detail part 来获取结果,那,我可以考虑,将分区信息与卷信息分两行显示在列表中,可以看出他们是找不到对方的分区 或者卷,

点评

我在很久之前就考虑过多分区的情况,后来好像证实是我想多了,这样的情况只能有一个分区。 sel vol/list part sel part/list vol 都是相互对应的,可以用这两种方法判断分区和卷的对应关系。 也不知道你有没  详情 回复 发表于 2019-7-31 22:45
回复

使用道具 举报

发表于 2019-7-31 22:45:35 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-31 22:32
原来我也有这么个 卡,后来被我 diskpart 弄了一遍,就没这毛病了。
也不知道这毛病怎么弄出来的。 如果 ...

我在很久之前就考虑过多分区的情况,后来好像证实是我想多了,这样的情况只能有一个分区。

sel vol/list part
sel part/list vol
都是相互对应的,可以用这两种方法判断分区和卷的对应关系。

也不知道你有没有从我第二步的diskpart脚本中看出点什么来,我的算法中,磁盘-分区-卷的本来就是对应的,不用做额外判断!

点评

这就好办了 获取硬盘分区序列的算法: 1、list disk获取硬盘列表 计算硬盘个数/dyn/sta/size/free 2、逐个选取硬盘 sele disk x 3、detail disk 获取硬盘信息和所包含的各个卷 硬盘  详情 回复 发表于 2019-7-31 23:27
回复

使用道具 举报

 楼主| 发表于 2019-7-31 23:27:10 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-31 23:35 编辑
nttwqz 发表于 2019-7-31 22:45
我在很久之前就考虑过多分区的情况,后来好像证实是我想多了,这样的情况只能有一个分区。

sel vol/li ...


这就好办了
diskpart Shell 1.23.4.7z (1.63 MB, 下载次数: 6)

正常是应该先考虑 list part + sele part + detail part +list vol+ detail vol  ,
但是有那个 id=ef 的情况,我就考虑 detail disk + sele vol +detail part +detail vol 再 list part +sele part +detail part ,就是先把 vol 的信息都跟分区对应着存好,list part 的时候,就只剩下没有 卷的分区信息需要搜集了,没有卷的分区对应的信息也少。结果现在出现 找不到对应分区的卷这种情况,也就是 预 * 了的分区,如果sele vol + list part 可以获取焦点分区 能够把卷跟分区对应上,也就没问题了。

获取硬盘分区序列的算法:
1、list disk获取硬盘列表 计算硬盘个数/dyn/sta/size/free
2、逐个选取硬盘 sele disk x
        3、detail disk 获取硬盘信息和所包含的各个卷
               硬盘的 name/prot/gpt/rw/info
         4、逐个选择卷 sele vol x
         5、detail part 获得卷及对应分区编号和部分分区信息,
                卷对应的 分区号/act/id/hid#
           如果无法获取改卷对应的分区,尝试通过
           5.1  list part 获取当前分区焦点的方式获取对应的分区号,但将无法获取 /act/id/hid#
           如果明确了卷 对应的 分区       
           6、获得卷的信息
               卷的 卷号/盘符/卷标/FS/STA/info
           7、detail vol 获取卷的一些信息
                 卷对应的 rw/hid*/free
     8、list part 获取该硬盘对应的分区列表 获取各个分区的一部分信息
          分区对应的 硬盘/分区号/type/size/offset
     9、结合第5步逐个判断分区是否有对应的卷,如果有,就用(5/6/7步)已提取过的卷数据冲入该分区对应的变量组中,如果没有
          10、选择这个分区 sele part x
          11、detail part  获取分区对应的另一部分信息  分区号/act/id/hid#/卷号
12、list vdisk  获取虚拟硬盘列表,将虚拟硬盘的部分信息修改进对应硬盘的信息中,name/port等

点评

这个本版已经可以获取上次获取不到的信息,但是文件系统未获取,也不知道是不是你刻意为之以区分其它磁盘。  详情 回复 发表于 2019-8-3 21:22
回复

使用道具 举报

发表于 2019-8-3 21:22:44 | 显示全部楼层

这个本版已经可以获取上次获取不到的信息,但是文件系统未获取,也不知道是不是你刻意为之以区分其它磁盘。

点评

多谢帮忙测试反馈 果然,原来是我 把 只能通过 list part 获取卷对应分区的 FS 设置成了 . , 这可真是,在程序面前,一点儿也不能差呀。哈哈 已经纠正了,放在了一楼  详情 回复 发表于 2019-8-4 21:15
回复

使用道具 举报

 楼主| 发表于 2019-8-4 21:15:59 | 显示全部楼层
nttwqz 发表于 2019-8-3 21:22
这个本版已经可以获取上次获取不到的信息,但是文件系统未获取,也不知道是不是你刻意为之以区分其它磁盘 ...

多谢帮忙测试反馈

果然,原来是我 把 只能通过 list part 获取卷对应分区的 FS 设置成了 . ,
这可真是,在程序面前,一点儿也不能差呀。哈哈

已经纠正了,放在了一楼
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-12 19:14

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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