无忧启动论坛

 找回密码
 注册
搜索
系统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建议使用免杀版,要不然还没下完就被杀毒软件杀了。


回复

使用道具 举报

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 到时可以替换下。
回复

使用道具 举报

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问题只是用于测试,无需解决。

回复

使用道具 举报

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 来分析卷。不主动选择 卷是不行的。
回复

使用道具 举报

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脚本中,第二步就可以进一步分析了

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

使用道具 举报

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 获取的信息一样填充到对应的分区信息中。
回复

使用道具 举报

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中都没有的卷,这个卷是如何发现的?
回复

使用道具 举报

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
回复

使用道具 举报

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  好像写错了。记不清了。

看来需要 慢慢研究消化。
回复

使用道具 举报

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 编辑

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

回复

使用道具 举报

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勾选才能操作会有点懵


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


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

使用道具 举报

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 版
回复

使用道具 举报

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-6-7 02:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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