无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: dos时代菜鸟
打印 上一主题 下一主题

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

    [复制链接]
31#
发表于 2019-4-2 18:11:58 | 只看该作者
pecmd 给 diskpart 外壳,超级厉害,喜欢,感谢分享
回复

使用道具 举报

32#
发表于 2019-4-2 19:26:53 | 只看该作者
以普通权限执行脚本,发现需要调用4次diskpart才能获取硬盘分区相关信息,建议改进核心算法,不超过两次为宜,如果能结合pecmd做到一次获取那再好不过了。

pecmd建议使用免杀版,要不然还没下完就被杀毒软件杀了。


点评

diskpart 调用次数是硬伤,要获取 更全面的 硬盘和分区数据,而且是 diskpart 体系一致的数据,就要用 diskpart 来做数据搜集, 1 获取硬盘数量等基本信息, 2 根据第一步获取的信息生成diskpart 脚本,用于获取更  详情 回复 发表于 2019-4-2 21:37
回复

使用道具 举报

33#
 楼主| 发表于 2019-4-2 21:37:18 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-2 22:04 编辑
nttwqz 发表于 2019-4-2 19:26
以普通权限执行脚本,发现需要调用4次diskpart才能获取硬盘分区相关信息,建议改进核心算法,不超过两次为 ...


整个脚本 只是用到 pecmd 的窗口 控件 文件读写 等一些功能 ,关于磁盘方面的 一点儿都没用到。

diskpart 调用次数是硬伤,要获取 更全面的 硬盘和分区数据,而且是 diskpart 体系一致的数据,就要用 diskpart 来做数据搜集,
1 获取硬盘数量等基本信息,
2 根据第一步获取的信息生成diskpart 脚本,用于获取更详细的的信息
3 用上一步生成的脚本 获取详细信息,
4 查缺补漏,一些有卷号而没有分区号的 卷,也需要列入列表,甚至有些这样的卷 确实可以明确其 分区号的,还要给其明确下。

如此,就需要运行 4次 diskpart 了。

至于 管理权限,目前还没啥好办法,因为要 pe 下也用,也就没办法用 vbs 权限那种方法了。直接右键管理员运行吧。
其实,我的win10 都是 自己封的wim 安装的,都是离线设置好 管理员账户 封包,对 管理员权限这事很久没 感觉了。

免杀版的 pecmd 到时可以替换下。

点评

1、2合成一步 3、4合成一步 如此就只需两步了。 只需两步即可获取list disk/list part/list vol/detail disk/detail part/detail vol中的所有信息 [attachimg]390445[/attachimg] UAC问题只是用于测试  详情 回复 发表于 2019-4-2 22:52
回复

使用道具 举报

34#
 楼主| 发表于 2019-4-2 22:28:18 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-2 22:41 编辑

刚刚 上传了下
将所有窗口 字号 调整为 9号,但愿能避免受系统默认设置影响
将 pecmd 换成免杀版的了。
回复

使用道具 举报

35#
 楼主| 发表于 2019-4-2 22:29:27 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-2 22:41 编辑
窄口牛 发表于 2019-4-2 17:41
恭喜第一版正式出炉,我的系统是win7,分辨率是2k半,显示dpi是200,所以这种的在我这里都没法用,显示一团 ...


刚把  pecmd 的脚本 中 涉及到窗口 的 字体都设置 成了  9号字,但愿能解决这个问题,
还要麻烦 测试下。
回复

使用道具 举报

36#
发表于 2019-4-2 22:52:44 | 只看该作者
dos时代菜鸟 发表于 2019-4-2 21:37
整个脚本 只是用到 pecmd 的窗口 控件 文件读写 等一些功能 ,关于磁盘方面的 一点儿都没用到。

dis ...

1、2合成一步
3、4合成一步

如此就只需两步了。

只需两步即可获取list disk/list part/list vol/detail disk/detail part/detail vol中的所有信息



UAC问题只是用于测试,无需解决。

点评

第一步 可以用矩阵法代替 第四步 不行,有的卷 detail disk 是看不到的,而通过 select vol 选择 这个卷却可以 知道 这个卷是不是真的 对应着某个分区,至少能够确定其 对应的硬盘。  详情 回复 发表于 2019-4-3 00:06
好的,我再研究研究  详情 回复 发表于 2019-4-2 23:00
回复

使用道具 举报

37#
 楼主| 发表于 2019-4-2 23:00:35 | 只看该作者
nttwqz 发表于 2019-4-2 22:52
1、2合成一步
3、4合成一步

好的,我再研究研究
回复

使用道具 举报

38#
 楼主| 发表于 2019-4-3 00:06:21 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-3 00:08 编辑
nttwqz 发表于 2019-4-2 22:52
1、2合成一步
3、4合成一步


第一步 可以用矩阵法代替

第四步 不行,有的卷 detail disk 是看不到的,而通过 select vol 选择 这个卷却可以 知道 这个卷是不是真的 对应着某个分区,至少能够确定其 对应的硬盘。通过 对 part 的分析能够 知道 part 对应的 vol ,但是 有的 vol 没有 part 对应,就需要 sele vol 、detail vol 来分析卷。不主动选择 卷是不行的。

点评

detail disk看不到这个卷,list vol是否看得到这个卷?如果看不到,你又是怎么知道这个卷存在的?如果看得到,那这是否属于bug,这个可以将list vol放在第一次diskpart脚本中,第二步就可以进一步分析了  详情 回复 发表于 2019-4-3 07:54
回复

使用道具 举报

39#
发表于 2019-4-3 07:54:10 来自手机 | 只看该作者
dos时代菜鸟 发表于 2019-4-3 00:06
第一步 可以用矩阵法代替

第四步 不行,有的卷 detail disk 是看不到的,而通过 select vol 选择 这 ...


detail disk看不到这个卷,list vol是否看得到这个卷?如果看不到,你又是怎么知道这个卷存在的?如果看得到,那这是否属于bug,这个可以将list vol放在第一次diskpart脚本中,第二步就可以进一步分析了

如何建立有卷号没有分区号的卷?

点评

这个还真算是 diskpart 的 bug 第一步中 list vol 列出 vol 第二步中 通过 detail disk 和 list part 获取某硬盘对应的分区和卷,然后最后才能发现 有哪个 vol 没有列出来 还是要有第三步,把 漏网的 vol 再 de  详情 回复 发表于 2019-4-3 08:27
回复

使用道具 举报

40#
发表于 2019-4-3 08:06:16 | 只看该作者
hao
回复

使用道具 举报

41#
 楼主| 发表于 2019-4-3 08:27:03 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-3 08:50 编辑
nttwqz 发表于 2019-4-3 07:54
detail disk看不到这个卷,list vol是否看得到这个卷?如果看不到,你又是怎么知道这个卷存在的?如果 ...

这个还真算是 diskpart 的 bug
第一步中 list vol 列出 vol
第二步中 通过 select disk 、 list part  、detail part、 detail disk  获取某硬盘对应的分区和卷以及卷跟分区的对应关系,然后最后才能发现 有哪个 vol 没有列出来
还是要有第三步,把 漏网的 vol 再 select vol 、detail part  一下。才能知道 这个 vol 是否有对应的 part,有的是没有对应的 part 的,但有的就有如果有,就要把这个 vol 的信息 当作 第二步中 detail disk 获取的信息一样填充到对应的分区信息中。

点评

是的,第一步中已经获取卷号和分区编号,第二部怎么验证都是可以的。 我现在想知道,如何重现下面这三种你说情况? 1. 有卷号没有分区编号的卷 2. 所有磁盘的detail disk中都没有的但是list vol中有的卷 3.  详情 回复 发表于 2019-4-3 12:33
回复

使用道具 举报

42#
发表于 2019-4-3 12:33:41 | 只看该作者
本帖最后由 nttwqz 于 2019-4-3 12:34 编辑
dos时代菜鸟 发表于 2019-4-3 08:27
这个还真算是 diskpart 的 bug
第一步中 list vol 列出 vol
第二步中 通过 select disk 、 list part ...


是的,第一步中已经获取卷号和分区编号,第二部怎么验证都是可以的。

我现在想知道,如何重现下面这三种你说情况?

1. 有卷号没有分区编号的卷
2. 所有磁盘的detail disk中都没有的但是list vol中有的卷
3. 无论是list vol还是所有磁盘的detail disk中都没有的卷,这个卷是如何发现的?

点评

2019ltsc 下建立一个 固定 模式的 vhdx 然后 mbr 模式把一个ntfs主分区 id 改为 ef . 就看到这情况了。以也遇到过这种情况,但是不明原因。 之前我描述的可能有误,是sele part 、 detail part ,显示该分区 没  详情 回复 发表于 2019-4-3 20:42
回复

使用道具 举报

43#
 楼主| 发表于 2019-4-3 20:42:54 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-3 22:27 编辑
nttwqz 发表于 2019-4-3 12:33
是的,第一步中已经获取卷号和分区编号,第二部怎么验证都是可以的。

我现在想知道,如何重现下面这 ...


2019ltsc 下建立一个  固定 模式的 vhdx 然后 mbr 模式把一个ntfs主分区 id 改为 ef .
就看到这情况了。以前也遇到过这种情况,但是不明原因。

之前我描述的可能有误,是sele part 、 detail part ,显示该分区 没有 挂载卷。而实际上通过 sele vol 、detail vol 可以看到 这个卷就是 那个分区。list vol 是可以看到这个卷的。

其实这种情况很少见,基本可以忽略。做一种可能性放上去,没有的,也不运行。

看我楼上的图,就明白了。
回复

使用道具 举报

44#
 楼主| 发表于 2019-4-3 21:26:38 | 只看该作者
刚发现 新思路的 parts.cmd 在获取分区 剩余空间 上 有点偏差,已经修正放一楼。 1.06

点评

顺便说一下,PECMD处理文本的能力比CMD强,那两个批处理完全可以用PECMD代码来替代。  详情 回复 发表于 2019-4-3 22:50
回复

使用道具 举报

45#
发表于 2019-4-3 22:50:11 | 只看该作者
dos时代菜鸟 发表于 2019-4-3 21:26
刚发现 新思路的 parts.cmd 在获取分区 剩余空间 上 有点偏差,已经修正放一楼。 1.06

顺便说一下,PECMD处理文本的能力比CMD强,那两个批处理完全可以用PECMD代码来替代。

点评

pecmd 好像没有 split 这样的函数,怎么处理一条记录中有多个字段的情况? 还有 pecmd 自带说明 关于 rstr 还是 sstr 好像写错了。记不清了。  详情 回复 发表于 2019-4-3 22:54
回复

使用道具 举报

46#
 楼主| 发表于 2019-4-3 22:54:46 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-3 23:08 编辑
527104427 发表于 2019-4-3 22:50
顺便说一下,PECMD处理文本的能力比CMD强,那两个批处理完全可以用PECMD代码来替代。


pecmd 好像没有 split 这样的函数,怎么处理一条记录中有多个字段的情况?
还有 pecmd 自带说明 关于 rstr 还是 sstr  好像写错了。记不清了。

看来需要 慢慢研究消化。

点评

举个例子吧:  详情 回复 发表于 2019-4-4 00:05
回复

使用道具 举报

47#
发表于 2019-4-4 00:05:28 | 只看该作者
本帖最后由 527104427 于 2019-4-4 00:07 编辑
dos时代菜鸟 发表于 2019-4-3 22:54
pecmd 好像没有 split 这样的函数,怎么处理一条记录中有多个字段的情况?
还有 pecmd 自带说明 关于 r ...


举个例子吧:


  1. //捕获diskpart输出
  2. EXEC* -hide &&a=cmd.exe /c echo exit|%ComSpec%/kprompt list$Sdisk$_|diskpart
  3. //mess. %&&a%

  4. //查找第一个"--------"所在行数
  5. LPOS* * ,&&b=--------,1,&&a

  6. //查找最后一个"DISKPART>"所在行数
  7. RPOS* * ,&&c=DISKPART>,1,&&a

  8. //截取"--------"和"DISKPART>"中间的数据
  9. CALC #&&d=%&&b%+1
  10. CALC #&&e=%&&c%-%&&b%-2
  11. READ -*,%&&d%+%&&e%,&&f,&&a
  12. //mess. %&&f%

  13. //截取磁盘号、状态、总大小、可用大小
  14. ENVI &&z=1
  15. LOOP #%&&z%<=%&&e%,
  16. {*
  17.         READ -*,%&&z%,&&g,&&f
  18.         MSTR * &&h,&&i,&&j,&&k,&&l,&&m=<2*>&&g
  19.         mess. [磁盘:%&&h%]  [状态:%&&i%]  [总大小:%&&j%%&&k%]  [可用大小:%&&l%%&&m%]
  20.         CALC #&&z=%&&z%+1
  21. }
复制代码

点评

等研究研究,单独弄个 wcs  详情 回复 发表于 2019-4-4 14:34
回复

使用道具 举报

48#
发表于 2019-4-4 06:36:06 来自手机 | 只看该作者
高手间的交流,有看头。
回复

使用道具 举报

49#
发表于 2019-4-4 12:09:42 | 只看该作者
大佬可以,支持完善呀
回复

使用道具 举报

50#
 楼主| 发表于 2019-4-4 14:34:45 | 只看该作者

等研究研究,单独弄个 wcs
回复

使用道具 举报

51#
 楼主| 发表于 2019-4-4 19:51:16 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-4 19:53 编辑

弄些颜色,这下一眼就能看出不同硬盘的分区

点评

感觉用TABS搞成分页比较好吧。RADI勾选才能操作会有点懵  详情 回复 发表于 2019-4-4 20:22
回复

使用道具 举报

52#
发表于 2019-4-4 20:22:44 | 只看该作者
dos时代菜鸟 发表于 2019-4-4 19:51
弄些颜色,这下一眼就能看出不同硬盘的分区

感觉用TABS搞成分页比较好吧。RADI勾选才能操作会有点懵

点评

还没研究到那 呢,呵呵,是分页么,我想一页 就 显示 硬盘和分区的数据  详情 回复 发表于 2019-4-4 20:51
回复

使用道具 举报

53#
 楼主| 发表于 2019-4-4 20:51:15 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-4 20:52 编辑
527104427 发表于 2019-4-4 20:22
感觉用TABS搞成分页比较好吧。RADI勾选才能操作会有点懵


还没研究到那 呢,呵呵,是分页么,我想一页 就 显示 硬盘和分区的数据


刚研究 着色 的事情,需要根据硬盘表行号奇偶 给不同硬盘分区区分开。之前想的简单了,用硬盘号,不行,有的两个硬盘挨着都是奇数或偶数。

点评

其实还有一种方法,就是,在上面的TABL表中选定了一个硬盘,下面TABL表就只显示该硬盘的分区。这样就避免所有分区都显示出来,看起来就不那么乱了。但有一点不好,鼠标点一下硬盘,就得刷新一下分区情况、调用几次di  详情 回复 发表于 2019-4-4 21:02
回复

使用道具 举报

54#
发表于 2019-4-4 21:02:52 | 只看该作者
dos时代菜鸟 发表于 2019-4-4 20:51
还没研究到那 呢,呵呵,是分页么,我想一页 就 显示 硬盘和分区的数据


其实还有一种方法,就是,在上面的TABL表中选定了一个硬盘,下面TABL表就只显示该硬盘的分区。这样可以避免所有分区都显示出来,看起来不那么乱了。但有一点不好,鼠标点一下硬盘,就得刷新一下分区情况、调用几次diskpart,可能会有点不爽。

点评

这个倒是可以做到,不用调用 多次diskpart,因为表里有区分。就是重绘分区列表就行。 但是 要想知道 全部分区情况,就不行了。比如 要选到某个分区,要先把所有硬盘都点一遍才知道。翻到不好  详情 回复 发表于 2019-4-4 21:47
回复

使用道具 举报

55#
 楼主| 发表于 2019-4-4 21:47:47 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-4-4 21:49 编辑
527104427 发表于 2019-4-4 21:02
其实还有一种方法,就是,在上面的TABL表中选定了一个硬盘,下面TABL表就只显示该硬盘的分区。这样可以 ...


这个倒是可以做到,不用调用 多次diskpart,因为表里有区分。就是重绘分区列表就行。

但是 要想知道 全部分区情况,就不行了。比如 要选到某个分区,要先把所有硬盘都点一遍才知道。翻到费劲了。

我弄那个 radi 就是为了 让脚本能够识别 用户到底要操作分区 还是硬盘,不然,两个表里面都有 被选中的 条目,就乱了。
回复

使用道具 举报

56#
 楼主| 发表于 2019-4-4 23:46:43 | 只看该作者
这回好了,不用 radi 了,分区也可以跟着硬盘的选择而相应变化了。
用到了 鼠标捕捉
回复

使用道具 举报

57#
发表于 2019-4-5 01:12:05 | 只看该作者
本帖最后由 freesoft00 于 2019-4-5 01:17 编辑

文件系统类型还是大写比较顺眼
fat exFat  Raw
改成
FAT exFAT  RAW

创建分区的时候默认卷标为空就可以。

磁盘容量的单位由M改成MB吧

自动分区的时候默认最少是3个,是否可以放开,有时候一个磁盘只想单分区
自动分区,默认是主、扩展、逻辑磁盘,有时候也想全部都为主磁盘,主磁盘分完了,剩下的再为扩展,逻辑磁盘。




点评

已经改完,在一楼 1.13 版  详情 回复 发表于 2019-4-5 18:58
回复

使用道具 举报

58#
 楼主| 发表于 2019-4-5 18:58:02 | 只看该作者
freesoft00 发表于 2019-4-5 01:12
文件系统类型还是大写比较顺眼
fat exFat  Raw
改成

已经改完,在一楼 1.13 版

点评

Ohter_INFO 改成Other_Info是不是更顺眼。这个列表可以稍微再宽一点,默认列标签名称没有显示全 分区列表中的part也可以再稍微宽点,也是默认没有显示全。 现在的默认卷标改成.了吗?好像是以一个英文的点 格式  详情 回复 发表于 2019-4-5 19:35
回复

使用道具 举报

59#
发表于 2019-4-5 19:35:26 | 只看该作者
dos时代菜鸟 发表于 2019-4-5 18:58
已经改完,在一楼 1.13 版

Ohter_INFO
改成Other_Info是不是更顺眼。这个列表可以稍微再宽一点,默认列标签名称没有显示全
分区列表中的part也可以再稍微宽点,也是默认没有显示全。
现在的默认卷标改成.了吗?好像是以一个英文的点
格式化卷,确定按钮放在右侧是不是更好。
激活分区按钮放中间就可以。、
装卸vhdx盘,确定按钮也放在右侧,扩展名vhd和vhdx就不用选择了,在定位文件的时候统一设置vhd和vhdx都显示就可以了。
都是些无关痛痒的意见。

点评

楼主写的代码貌似一直都存在这种问题,可能是习惯使然  详情 回复 发表于 2019-4-5 20:47
回复

使用道具 举报

60#
发表于 2019-4-5 20:47:11 | 只看该作者
freesoft00 发表于 2019-4-5 19:35
Ohter_INFO
改成Other_Info是不是更顺眼。这个列表可以稍微再宽一点,默认列标签名称没有显示全
分区列 ...

楼主写的代码貌似一直都存在这种问题,可能是习惯使然
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-20 19:17

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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