无忧启动论坛

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

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

    [复制链接]
121#
 楼主| 发表于 2021-7-9 12:12:44 | 显示全部楼层
高分屏 没用过,不知道咋 调试。
脚本中 已经加入 设置每个窗口的字体,不知道能有效果不。
回复

使用道具 举报

122#
 楼主| 发表于 2021-10-23 11:27:31 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2021-10-23 13:11 编辑
zhxy9804 发表于 2021-9-25 19:47
给加个整数分区计算功能就完美

对于NTFS格式的硬盘分区,原理比较复杂。NTFS分区的最小容量不能精确到1MB,而是柱面大小。硬盘一般有255个磁头,63个扇区,故每个柱面的大小为:512bit*255*63=8,225,280bit=7.84423828125MB。 
如果要分个10GB的NTFS分区,理应为10*1024MB=10240MB,实际需要的柱面数10240÷7.84423828125=1305.4。因柱面只能算整数,即1306个柱面,这样实际分配的M数为
1306*7.84423828125=10244.575MB,不管小数点后面几位都进1,也就是10245MB,这样才会被Windows系统认成是10GB。

也就是说,需要有多出一点点而的空间供分区,才能实现整数,而,这个是需要做判断的,如果你要分区的区域,不能满足多出那么一点点儿,diskpart 就会分区失败。

这个如果用来制作 vhd 倒是问题不大,但是落到分区上,一些实际情况恐怕就不允许了。
弄到 自动均分 上到时可以考虑,不计算尾巴分区的整G,应该就可以,但是,自动均分这个事情,本身就有人不认同。

而且自动均分上,如果均分的数额本身就不是 整 G ,即便考虑到磁柱整数的问题,结果也不是整G,比如 给10G的空间均分成3份,总不能3+3+4 这么分呀,这就不是均分了。

回复

使用道具 举报

123#
 楼主| 发表于 2021-10-23 13:35:02 | 显示全部楼层
zhxy9804 发表于 2021-9-25 19:47
给加个整数分区计算功能就完美

1.25.0-2021.10.23-diskpart2x.7z (17.93 KB, 下载次数: 5)
1.25.0 2021.10.23 测试用核心脚本
用于 创建、均分 分区是 在条件允许的情况下 ,取 整G .
需要广泛测试。在 均分是,如果分区大小是 1024 5120 等之类的,应该是取整G的。手动创建分区,单个分区取整G后,如果空间允许,就取整G了,比如 10G 就会计算成 10245M 。


回复

使用道具 举报

124#
 楼主| 发表于 2021-10-23 16:35:56 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2021-10-23 16:37 编辑

支持 自动计算整G 分区, diskpart_shell.1.25.1.7z (1.7 MB, 下载次数: 3)

当设置分区在 1G以上, 就尝试进行 整G 计算,如果该区域有足够空间支持 的话,就整G 分。

如下图:在指定区域(该硬盘10G位置开始) 分出一个5G 分区,在资源管理器中,显示该分区 是 整整5G。




回复

使用道具 举报

125#
 楼主| 发表于 2021-10-23 18:00:34 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2021-10-23 19:10 编辑

diskpart_shell.1.25.3.7z (1.7 MB, 下载次数: 1)

继续测试版,做了一些细微的调整。减少出错。

1.25.3
调整一些关于创建分区时对于数据溢出的判断,如果设置的 偏移量+Size>空间量,就提示并退出模块。
  //如果人为设置偏移量差额多余1G且分区容积不为零,尝试计算offset取整G。
  //容积为0,意为将自偏移量后的所有空间分配给这个新分区。offset如果设置取整G,后面的空间就不足整G了,
  //所以如果 容积被设置为0,就不进行offset取整G
  //如果分区指定的大小取整G计算后在未分配空间的范围内,就取整G。
回复

使用道具 举报

126#
 楼主| 发表于 2021-10-23 23:59:47 | 显示全部楼层
1.25.4 2021.10.23
改进了一下 创建分区模块中 关于整G 分区 的算法。
更新已经放在1楼
回复

使用道具 举报

127#
 楼主| 发表于 2021-10-24 07:47:43 | 显示全部楼层
1.25.41
修正创建分区时,当设置分区容量为0,而offset也被设置增加时,分区容量赋值不正确导致无法分区的问题。
此问题只有 1.25.4 存在

已经更新至1楼。
回复

使用道具 举报

128#
 楼主| 发表于 2021-10-24 11:13:21 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2021-10-24 11:38 编辑

关于
创建分区功能的演示和整G分区功能的检测,如图









回复

使用道具 举报

129#
 楼主| 发表于 2021-10-25 09:07:48 | 显示全部楼层
nttwqz 发表于 2021-6-20 21:10
已确认,就是系统变量%path%某个路径下有pecmd.exe造成,换成新版或删除后,问题解决。
鉴于PE中一般都 ...


回复

使用道具 举报

130#
 楼主| 发表于 2021-10-25 09:47:28 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2021-10-25 16:30 编辑

增加了一个 取消按钮。通常用不到。

1.25.51 核心脚本   diskpart2x.zip (21.1 KB, 下载次数: 2)

升级日志: updata.txt (12.54 KB, 下载次数: 2)



回复

使用道具 举报

131#
 楼主| 发表于 2021-10-26 11:17:13 | 显示全部楼层
用 Resource Hacker 弄了个单文件脚本内置的 版本。放在一楼了。
回复

使用道具 举报

132#
 楼主| 发表于 2021-10-26 12:50:42 | 显示全部楼层
脚本内置版的脚本也放到了一楼,
请用 最新版 pecmd.exe 调用,

脚本不在需要 ids.txt
回复

使用道具 举报

133#
 楼主| 发表于 2021-10-27 16:19:43 | 显示全部楼层
get 到了新能力,如何 把内置到 pecmd.exe 中的文本 转成变量供脚本使用

  1. getf#  #301,0#*,x
  2. CODE **-ansi,x,**-uni,x
  3. mess %X%
复制代码


就是把pecmd.exe\ExeDATA\#301 中的文本信息读取为变量 x 再mess 显示出来。
必须用GETF# 以二进制方式读取,再用 code 把 uni 转为 ansi .

回复

使用道具 举报

134#
 楼主| 发表于 2021-12-6 22:18:07 | 显示全部楼层
lxb1628 发表于 2021-12-6 09:46
好东西,可惜下不了

何出此言?
回复

使用道具 举报

135#
 楼主| 发表于 2022-1-3 12:05:37 来自手机 | 显示全部楼层
my9823 发表于 2022-1-2 21:31
x64的在某些pe中一直显示开始那个貌似倒计时的对话框

Pe里没有DISKPART
回复

使用道具 举报

136#
 楼主| 发表于 2022-1-4 14:44:43 | 显示全部楼层
my9823 发表于 2022-1-2 21:31
x64的在某些pe中一直显示开始那个貌似倒计时的对话框

用这个试试吧,只是加了一个 检查 是否存在 diskpart.exe 的判断。
DiskPart_Shell_1.25.57(x64)_.7z (959.6 KB, 下载次数: 12)
回复

使用道具 举报

137#
 楼主| 发表于 2022-3-6 12:48:56 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-6 12:50 编辑

更新了一下。修复一处bug

2022.03.06
1.25.6
修正未分配空间计算的一处bug,主要表现为:当扩展分区全部空间被分配满,扩展分区与其后的主分区之间的未分配空间将不被显示。原算法,只考虑了 当 扩展分区 中有尚未被分配的空间时的情况。341,342 两行代码位置移出 find 段,即可解决此问题。


回复

使用道具 举报

138#
 楼主| 发表于 2022-3-6 14:19:47 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-6 14:50 编辑

貌似 扩展分区 方面还是有点儿问题
原来  341 行那两行代码 移出 find{} 段以外,移多了, 这次重新来过了。
回复

使用道具 举报

139#
 楼主| 发表于 2022-3-7 10:03:32 | 显示全部楼层
窄口牛 发表于 2019-3-29 17:57
搞点实际意义大些的,命令办不了的那些。

思来想去,唯独 这个 点选 未分配区域 并对其分区的 功能 ,勉强能算是 命令做不来的。
回复

使用道具 举报

140#
 楼主| 发表于 2022-3-23 10:46:02 | 显示全部楼层
1.26.0
增加 子vhd  向上合并功能
回复

使用道具 举报

141#
 楼主| 发表于 2022-3-23 19:31:05 | 显示全部楼层
1.26.1 可以探测 子vhd 的上面十八级祖宗。
回复

使用道具 举报

142#
 楼主| 发表于 2022-3-23 23:09:28 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-23 23:23 编辑
yesfei 发表于 2022-3-23 22:39
那个几百M的EFI启动分区,只能用DG分区创立外,还有什么软件创立?

diskgen 可以,我常用 diskpart 也 可以,
其实就是个 Fat32 的 正常分区,修改一下 id 成 efi  ,就 行了。
用本贴 中的 pecmd 脚本,更方便些
如图:


回复

使用道具 举报

143#
 楼主| 发表于 2022-3-24 10:18:46 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-24 10:25 编辑

这个 是 集鼠标操作 与 键盘操作 于一身的 脚本。
鼠标 操作完,然后 是  是 显示 diskpart 指令,此时 仍然可以 在界面修改 指令集,最后 确定即可。
可以根据命令结果,判断 是否 成功。

最好有点儿 diskpart 使用经验的。
回复

使用道具 举报

144#
 楼主| 发表于 2022-3-24 11:55:20 | 显示全部楼层
刚给 单文件版 增加了一个 附带参数  debug
如果附带次参数,将 显示 两个本该隐藏的 diskpart 窗口。虽然 指令结果已经被转移到某临时文件,但这两个窗口 可以看到 运行的指令。(对于使用者,其实没啥大用。)
回复

使用道具 举报

145#
 楼主| 发表于 2022-3-24 19:15:24 | 显示全部楼层
刚在 中文 Win10 中 安装了个 英文语言包,设置语言默认英文,然后 运行单文件版。
发现 代码页 还是 936 而 diskpart 运行时调用的却是英文。导致程序按照 中文关键字 搜索磁盘信息失败。
所以 ,修正了一下判断 diskpart 语言环境的 语句,即使 diskpart 调用的是 英文字典文件,也可以正常获取磁盘信息。
回复

使用道具 举报

146#
 楼主| 发表于 2022-3-25 13:59:16 | 显示全部楼层
vhd 查祖宗 功能,有时还是有些用处的。比如 expand 扩展vhd 大小时,就必须用这个确定 最顶层 vhd 是哪一个。
在 合并的时候 ,也能确定到底 合并到第几级。



点评

不如改为查祖宗十八代。。。  详情 回复 发表于 2022-3-25 14:25
回复

使用道具 举报

147#
 楼主| 发表于 2022-3-25 17:08:16 来自手机 | 显示全部楼层
nttwqz 发表于 2022-3-25 14:25
不如改为查祖宗十八代。。。

可以有
回复

使用道具 举报

148#
 楼主| 发表于 2022-3-26 12:47:59 | 显示全部楼层
考虑 把双 diskpart 引擎 变为 单 diskpart .
当初考虑 双 diskpart 进程,是因为 读取 临时文件 获取 diskpart 返回信息的 方法 效率低,后来用到 getf 函数,文件体积 与 读取信息 几乎没啥影响。用两个 Diskpart 进程,反而占用了10M 的内存。除了 当用户中断操作时,能够更快切换 diskpart 进程以外,没啥优势。
回复

使用道具 举报

149#
 楼主| 发表于 2022-3-26 19:06:54 | 显示全部楼层
freesoft00 发表于 2022-3-26 18:58
“查祖宗”专业软件用不专业的词汇感觉就不太专业了。


那。。。么。。。换个啥名词好呢?

点评

“溯源”两个字足矣  详情 回复 发表于 2022-3-26 19:26
回复

使用道具 举报

150#
 楼主| 发表于 2022-3-26 19:46:35 | 显示全部楼层
527104427 发表于 2022-3-26 19:26
“溯源”两个字足矣

好的,已经 更新 到 1.27.1 版

点评

1.27进不去了,win7 64bit [attachimg]498473[/attachimg]  详情 回复 发表于 2022-3-26 21:42
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 18:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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