无忧启动论坛

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

diskpart shell ,用 pecmd 给 diskpart 做个外壳 2022.03.23 ver:1.28 改进

    [复制链接]
121#
发表于 2019-7-24 21:36:59 来自手机 | 只看该作者
dos时代菜鸟 发表于 2019-7-24 20:47
可以考虑试试看。


从上面的图片,发现一个奇怪的问题,运行同样的命令sel disk 0 + detail disk,150遍后时间没有显注增加,我怀疑我的脚本计算总时那出问题了,而不是因为临时文件太长了导致时长的增加。

运行了1遍:19+22=41ms
运行了50遍:12+26=38ms
运行了100遍:15+27=42ms
运行了150遍:18+36=54ms
回复

使用道具 举报

122#
发表于 2019-7-25 15:03:27 | 只看该作者
本帖最后由 datbik189 于 2019-7-25 17:01 编辑



从测试来看, 建议采取切换WID的办法且不保存历史记录(将 &DISKPART_OLD 改成 &), 获得DISKPART的回显.

测试了一下,脚本运行速度没什么变化, 没办法了.

固定WID 和 切换不同的WID (换DISKPART), 运行100遍 "sel disk 0 + detail disk" 时间都是约 14 秒.

运行了1500次以后, 不保存历史记录(将 &DISKPART_OLD 改成 &), 结果如下:

固定WID: 临时文件有 43508 行,最后一次运行的时间为 217 ms, 总的运行时间 227 秒.

变换WID:  临时文件小于 500 行,最后一次运行的时间为 33 ms, 总的运行时间为 109 秒.





变换WID脚本:

envi^ envimode=1

set-raw &启动副本=thread* -here -tid:&备用tid team wait 50|set &DISKPART_备用WID=|load #998 & &DISKPART_备用WID &DISKPART_备用FILE & &|SET-RET &DISKPART_备用WID=%&DISKPART_备用WID%|SET-RET &DISKPART_备用FILE=%&DISKPART_备用FILE%
team set. &exit=exit\n|load #999*命令_宽字符 &exit

load #998 & &DISKPART_WID &DISKPART_FILE &DISKPART_OLD &DISKPART_NEWS //启动diskpart
%&启动副本%

load #999*命令_数字循环 &num 1 1 100 //生成数字序列
date &t1 uptime
forx * %&num%,&,
{* set. &指令=sel disk 0 \n detail disk
   load #998 &指令 &DISKPART_WID &DISKPART_FILE &DISKPART_OLD &DISKPART_NEWS
   Team read %&DISKPART_file%,**,&V|read -*,-1,&V,&V
   IFEX $[%&V%>500 & %&DISKPART_备用WID%>0],
   {* forx * %&exit%,&V,ENVI @@SENDMSG=%&DISKPART_WID%;0X102;0x%&V%
      Team set &DISKPART_WID=%&DISKPART_备用WID%|set &DISKPART_FILE=%&DISKPART_备用FILE%
      %&启动副本%
    }
}
date &t2 uptime
calc &t=%&t2%-%&t1%
team set. &line=%&DISKPART_OLD%\n%&DISKPART_NEWS%|read -*,-1,&line,&line
mess %&DISKPART_OLD%\n%&DISKPART_NEWS%@耗时 %&t% ms %&line% 行
kill diskpart.exe



DISKPART.7z

985.1 KB, 下载次数: 8, 下载积分: 无忧币 -2

点评

结合我自己的实际情况 按照双 diskpart 进程的想法,也弄了一个。你那个 代码有的地方不适合我这里用。 1.22.0 使用 双 diskpart 进程模式, 一个进程用完一次就 thrd方式 重启并换成另一个,如此往复,保证 su  详情 回复 发表于 2019-7-25 23:02
回复

使用道具 举报

123#
 楼主| 发表于 2019-7-25 15:04:31 | 只看该作者
小改动
1.21.4
优化 获取硬盘序列的 部分代码,减少指令条数。
纠正一处因为 使用 evnimode=1 导致的 %% 问题
回复

使用道具 举报

124#
 楼主| 发表于 2019-7-25 23:02:23 | 只看该作者
datbik189 发表于 2019-7-25 15:03
从测试来看, 建议采取切换WID的办法且不保存历史记录(将 &DISKPART_OLD 改成 &), 获得DISKPART的回显 ...

结合我自己的实际情况 按照双 diskpart 进程的想法,也弄了一个。你那个 代码有的地方不适合我这里用。

1.22.0
使用 双 diskpart 进程模式,
一个进程用完一次就 thrd方式 重启并换成另一个,如此往复,保证 sub:get_parts 使用的 diskpart 的临时文件是最小的。以此提高效率。
设置diskpart 进程重启的 行数阈值(160行),如果 当前 diskpart 进程对应的临时文件行数超过160 就另开启线程 重启之。

点评

问题解决了就好,原理都一样,剩下就是看测试反馈了。  详情 回复 发表于 2019-7-25 23:32
回复

使用道具 举报

125#
发表于 2019-7-25 23:32:46 来自手机 | 只看该作者
dos时代菜鸟 发表于 2019-7-25 23:02
结合我自己的实际情况 按照双 diskpart 进程的想法,也弄了一个。你那个 代码有的地方不适合我这里用。
...


问题解决了就好,原理都一样,剩下就是看测试反馈了。
回复

使用道具 举报

126#
 楼主| 发表于 2019-7-26 10:52:41 | 只看该作者
1.22.1
改进 指令组 运行中 中断 功能,用户可以 在指令运行时间长不想再运行时,选择中断。
回复

使用道具 举报

127#
 楼主| 发表于 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
回复

使用道具 举报

128#
发表于 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
回复

使用道具 举报

129#
 楼主| 发表于 2019-7-27 08:51:26 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-7-27 08:52 编辑
datbik189 发表于 2019-7-26 21:20
那就没办法了。

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


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

点评

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

使用道具 举报

130#
 楼主| 发表于 2019-7-27 11:00:47 来自手机 | 只看该作者
datbik189 发表于 2019-7-26 21:20
那就没办法了。

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

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

点评

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

使用道具 举报

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


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

使用道具 举报

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

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

使用道具 举报

133#
 楼主| 发表于 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 用,这下会用他判断窗口了。哈哈哈,也算有点儿长进。

回复

使用道具 举报

134#
发表于 2019-7-27 23:24:32 来自手机 | 只看该作者
本帖最后由 datbik189 于 2019-7-27 23:34 编辑

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

点评

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

使用道具 举报

135#
 楼主| 发表于 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
回复

使用道具 举报

136#
发表于 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
回复

使用道具 举报

137#
 楼主| 发表于 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
回复

使用道具 举报

138#
 楼主| 发表于 2019-7-29 08:07:14 | 只看该作者
回复

使用道具 举报

139#
发表于 2019-7-29 23:30:04 | 只看该作者
可喜可贺,速度终于大幅超越了我写的批处理!

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

点评

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

使用道具 举报

140#
 楼主| 发表于 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
回复

使用道具 举报

141#
 楼主| 发表于 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 阶段就获取 该硬盘个卷信息也就是了。
回复

使用道具 举报

142#
发表于 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
回复

使用道具 举报

143#
 楼主| 发表于 2019-7-30 23:31:39 来自手机 | 只看该作者
nttwqz 发表于 2019-7-30 22:04
没有什么变化。。。

多谢反馈。

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

使用道具 举报

144#
 楼主| 发表于 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
回复

使用道具 举报

145#
发表于 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
回复

使用道具 举报

146#
 楼主| 发表于 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
回复

使用道具 举报

147#
发表于 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
回复

使用道具 举报

148#
发表于 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
回复

使用道具 举报

149#
 楼主| 发表于 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
回复

使用道具 举报

150#
发表于 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
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 10:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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