无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 48837|回复: 158
打印 上一主题 下一主题

diskpart 外壳脚本 简体中文版和英文版 Ver9.0

    [复制链接]
跳转到指定楼层
1#
发表于 2018-6-4 13:20:41 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dos时代菜鸟 于 2021-11-15 23:08 编辑

适用win7及以上版本。

本帖所涉及脚本已经 由 pecmd 2012 脚本取代,请移步
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1


x9.08
DP-Script-X9.12.8.7z (18.59 KB, 下载次数: 345)
采用新的 导入分区序列的算法,只需 3次调用 diskpart 就可以探测全部分区信息。
改进文本流截取,以便使一个脚本模板适应两个语言环境。
暂时还是分别提供两个语言的脚本,而 不想做成词典,以方便中文版维护。
修复 可用空间盘符探测 相关代码


使用上还是要注意
分区结构形式 转换前  是必须 要清空分区的,
gtp硬盘上是不能 设置活动分区的。
删除扩展分区前,必须先删除扩展分区里的逻辑分区。

脚本会 在 所在位置 临时生成 文件,所以 不能 对 脚本所在 盘进行操作,也不应该对正在运行的当前系统 所在盘进行操作。
附件中 包含了 win7 的 diskpart.exe 可以删除。
DP_Script-8.55.7z (79.01 KB, 下载次数: 309)

8.61 测试版 DP_SCRIPT----8.61.7z (80.38 KB, 下载次数: 49)
改进 8.60 中由于没有预设 vol_free 占位 导致当 detail vol  无法获取 vol_free 时free/size 字段错位的问题。
增加可以 探测到 卷 的可用空间,
尝试探测 不在 list part 列表中的 卷的信息,并将其信息加入列表,因为其没有对应的 part ,所以只能对其进行 格式化 和分配 盘符
某些 u盘 select disk 后自动将  part 选中为焦点,导致 无法探测 该 part 信息,针对这种情况,做了适量调整,但愿能 更多的识别这样的 u盘。










评分

参与人数 6无忧币 +26 收起 理由
qh6420933 + 5 很给力!
maomihuacha + 1
liangyi + 5 很给力!
zhczf + 5 期待出一个漂亮的图形界面版的
熄灭的火焰 + 5 很给力!
freesoft00 + 5

查看全部评分

2#
 楼主| 发表于 2018-6-4 13:22:07 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-4 14:15 编辑

考虑到 操作 后 要进行 列表 信息更新,所以,相较  hd3y.cmd ,内部 脚本 区段 进行了 调整。

发现 删除 、创建 卷分区以后,卷 vol 号 可能发生混乱错位,但,程序不会 调用 列表中的 这个 vol ,只是用于区分 改卷是否支持 分配盘符。用户可以通过 手动  刷新列表 来纠正 这个显示错误。
回复

使用道具 举报

3#
 楼主| 发表于 2018-6-4 21:54:27 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-4 22:04 编辑

轻微改动了一下
可以显示 vhd 盘对应的文件名,可以显示 vhd 是否可扩展,可以显示 disk 的  Dyn 性质。
在 1楼
dp-script-7.84.cmd

感谢  freesoft00 提供的数据文本。

另外 , vhd 方面的 操作,可能要 单独 另写 脚本。这里暂时 先 不考虑 加入 vhd 相关的功能。
回复

使用道具 举报

4#
 楼主| 发表于 2018-6-4 22:07:30 | 显示全部楼层
freesoft00 发表于 2018-6-4 22:03
vhd单独也可以。要不要操作的项目太多了。
磁盘分区的单独一个。
vhd操作的如果 兄弟写可以单独一个。

还是要 请 帮忙 测试下  dyn 方面 是否能够 准确 定位。
回复

使用道具 举报

5#
 楼主| 发表于 2018-6-4 22:27:13 | 显示全部楼层
freesoft00 发表于 2018-6-4 22:23
第二个磁盘是动态磁盘,显示出来了。

多谢支持。多谢测试。
回复

使用道具 举报

6#
 楼主| 发表于 2018-6-4 23:58:37 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-5 00:03 编辑

可能是 动态磁盘 卷 无法 作为 part 进行操作,它可能被关联成了 其他分区的一部分 。
你看 那几个卷 的size 相加  的结果。


刚更新了下,支持 对 分区调整大小了。在1楼。
回复

使用道具 举报

7#
 楼主| 发表于 2018-6-5 10:48:40 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-5 12:32 编辑

改进了一下 显示 行溢出 的问题,增加字符串 阉割 函数,如果字符串 长度超过指定值,就只显示其 前后两端 的部分内容。
增加了 一个 特别说明
改进 刷新 模块

更新 已经 放到一楼


唉,发现 阉割字符串 函数 搞复杂了,不用计算字符串长度 再 进行比较,可以直接 截取字符串 指定位置字符,如果该位置没有字符,就说明 字符串没有那么长。
不改了,先这么着吧。
回复

使用道具 举报

8#
 楼主| 发表于 2018-6-5 13:48:31 | 显示全部楼层
可能是 太困了,居然 把一个  公用变量 给 “及时”的清理的。重新 更新下,Num 是 公用变量。

http://wuyou.net/forum.php?mod=a ... 8MTE5OHw0MDk0NTU%3D


先到这里吧,休息休息去了。
回复

使用道具 举报

9#
 楼主| 发表于 2018-6-5 14:39:34 | 显示全部楼层
十分抱歉,今日太困,不能再玩了。
中午更新 几个版本 都有小问题,请 下载的 重新下载。 7.93 版本,在一楼。


回复

使用道具 举报

10#
 楼主| 发表于 2018-6-5 17:58:28 来自手机 | 显示全部楼层
liangyi 发表于 2018-6-5 17:46
楼主提个小意见,就是第一列编号这个位置能不能改为只对磁盘进行编号排序呢?现在是磁盘和分区混在一起编 ...

创新分区需要选硬盘
回复

使用道具 举报

11#
 楼主| 发表于 2018-6-5 18:03:34 来自手机 | 显示全部楼层
liangyi 发表于 2018-6-5 17:46
楼主提个小意见,就是第一列编号这个位置能不能改为只对磁盘进行编号排序呢?现在是磁盘和分区混在一起编 ...

创建分区,改变硬盘分区模式,都需要选择硬盘进行操作,硬盘分区删除以后,也要对硬盘资讯进行刷新,如果想手动刷新某个硬盘的信息,也需要选择硬盘,很多针对硬盘的操作都要求用户选择硬盘,硬盘没有编号,不行,会很麻烦。
回复

使用道具 举报

12#
 楼主| 发表于 2018-6-5 19:11:34 来自手机 | 显示全部楼层
liangyi 发表于 2018-6-5 18:11
可能楼主误解我要表达的意思了,我是说能不能实现第一列只对硬盘编号显示,而第一列不显示分区编号

那有怎么选择分区呢?
回复

使用道具 举报

13#
 楼主| 发表于 2018-6-5 19:28:34 来自手机 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-5 21:33 编辑
freesoft00 发表于 2018-6-5 19:18
估计他的意思是第一列只显示磁盘序号,其它都是空的。
第二列或者其它列再显示分区列表。
分开显示。 ...
已经修改 main_list 段,在不影响效率的前提下 ,改了一下 显示效果。


嗯,这个要这样理解,有臭美嫌疑啊。因为脚本里面,以后可能还会加东西,涉及到对列表文本流中特定字符的定位,统一位置,统一格式有利于脚本编写和运行效率。

回复

使用道具 举报

14#
 楼主| 发表于 2018-6-5 19:30:43 来自手机 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-5 21:35 编辑
dos时代菜鸟 发表于 2018-6-5 19:28
嗯,这个要这样理解,确实有为了好看不要效率的嫌疑,因为脚本里面,以后可能还会加东西,涉及到对列表文 ...


一个check.l 函数解决各种情况的用户录入选择,有利于提高效率。

可以考虑 用 main_list 段的程序 改变显示输出内容。而不改变  原始 列表文件。
回复

使用道具 举报

15#
 楼主| 发表于 2018-6-5 21:08:05 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-5 21:46 编辑

看看,这样显示 行不行 ?

感觉 在输入 Num 的时候 能容易 检索一点儿吧。不知道 liangyi 是不是这个意思。我这几天睡得太晚,理解能力都降低了。

另外,如果 还是出现 有 行显示溢出 折行的现象,可以 在 主菜单 状态下 将 cmd 窗口最大化,然后在回车,就可以刷新显示。


DP_script-temp.zip (5.98 KB, 下载次数: 1)
修改 Main_list 段内容入下,可实现 上图 效果。
main_list 段 是专门负责 将  partlist.txt 的内容 以一定的格式显示 的函数,因为 不需要修改 partlist.txt 本身,所以 可以随意 定制显示列表。但是如果太复杂,也会影响 运算效率。
下面 代码 没有变动 太大,应该不会影响效率。

  1. :MAIN_list
  2. rem 考虑cmd窗口空间,vhd 文件信息可能被阉割。
  3. cls
  4. echo.
  5. echo                           硬盘分区序列                                  DiskPart:!DPD!_!dpver!,脚本:%~d0
  6. echo ---------------------------------------------------------------------------------------------------------
  7. echo  HDn  Pn  Vol  HD:P_  LTR   Fs       Size   Label         类型_偏移_活动_状态_信息
  8. for %%a in (lx005 disk_name2 disk_lx2) do set "%%a="
  9. for /f "skip=1 delims=" %%x in ('type !list0!') do (
  10.   set "lx005=%%x"
  11.   for /f "tokens=1,2,8" %%a in ("%%x") do (
  12.     if not "%%b"=="----" (
  13.       echo    ^|!lx005:~1!
  14.     ) else (
  15.       for /f "tokens=1,2 delims=(" %%h in ("!lx005:~55!") do (
  16.         set "disk_lx2=%%h"
  17.         call :str_mid "(%%~i" 38 &  SET "disk_name2=!str_mid!" & set "str_mid="
  18.       )
  19.       echo !lx005:~1,4! ----!lx005:~6,48! !disk_lx2!!disk_name2!
  20.     )
  21.   )
  22. )
  23. echo ---------------------------------------------------------------------------------------------------------
  24. for %%a in (lx005 disk_name2 disk_lx2) do set "%%a="
  25. echo ---当前焦点:Num=!n!  ;  HD:P=!hdp2!

  26. EXIT /B

复制代码


回复

使用道具 举报

16#
 楼主| 发表于 2018-6-5 22:34:21 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-5 23:36 编辑
liangyi 发表于 2018-6-5 22:17
其实我想表达的是,在7.97版的基础上能否这样调整,这样会不会辨识好点,编程小白+强迫症只能给 ...

按照你的 列表模式,如果 要删除 一个 没有 vol 号码的 分区,你让用户输入什么 定位到 它?
如果 扩展分区 hd:p 都用 * 了,你让程序 怎么定位 这个 扩展分区的位置,当要删除 这个扩展分区的时候 怎么办?


hd:p  用于表示 分区 或 硬盘 的特征的,没有 冒号表示 是一个盘,有冒号 表示是 第几个硬盘的第几个分区。 是不能为  * 的
vol 是系统给的,如果为 * 说明 是  分区 却不能被  win 加载盘符,也就是 被脚本 识别为 part ,比如 linux 下的 分区
ltr 也是系统给的 ,如果为 * 说明 现在还没 分配到盘符,如果 是系统不能加载 的分区,肯定 ltr=*
Num 是 脚本按顺序分配的 序列表中唯一 标识号,没有重叠 又 易于通过 小键盘输入。在脚本中 可以快速通过 Num 号码定位用户所选并明确 焦点特征。

你说的 目的 我明白了,程序中也 做了 拦劫处理,如果 你 选择的 焦点 不支持你要做的动作,就 退回。

很多时候,人们都习惯了 输入 焦点 天然标识号,但是 往往与其他 焦点 标识号重叠,不唯一,或者 较为复杂。或者你的 焦点 没有天然 标识
比如,
当要输入 分区或者卷 的时候 往往习惯输入 系统给定的 vol 或者盘符, 但是 ,有的分区是没有 vol  和盘符的。
当要输入 硬盘,往往习惯输入 系统 给定的 #n 硬盘号。
而,vol 号 与 disk#n 号 是有重复的 不唯一的。或者 焦点 分区根本没有 vol

个人认为,让用户 输入一个 易于输入,又便于检索,便于程序 调用的 数据标识 是最明智的。
也曾经考虑过用 hd:p 作为 检索输入标识,但是 在定位 数据行上,脚本编辑要 多废几行笔墨,进而会影响效率。而且 hd:p 的格式 需要做特定处理, 不能直接参与 if 语句中 数字对比 运算。

按照你的 列表模式,无疑要 增加 程序编辑 的 成本,而且存在 逻辑漏洞。


点评

之前以为vol也是程序罗列的参数,所以才有此一想法欠考虑了;正如 freesoft00 所说,个人也感觉 8.00这样显示更乱,还不如保持原来的7.9那样显示  详情 回复 发表于 2018-6-6 10:01
8.00这样显示更乱。 感觉还不如原来的 硬盘分区序列 DiskPart:D:_6.1.7601,脚本:D: ------------------------------------------------------  详情 回复 发表于 2018-6-6 09:26
回复

使用道具 举报

17#
 楼主| 发表于 2018-6-6 10:10:48 | 显示全部楼层
脚本设计成 录入一次,就能确定 一个 焦点目标,如果按照  liangyi 的样式,势必需要 录入两次才能确定 一个 分区,要先明确 硬盘,再 明确 分区,这样操作 也繁琐。

正在考虑 修改  check_l ,实现可以 通过 输入 hd.p  明确焦点。

至于创建分区以后 自动格式化,因为涉及到 明确创建的新分区的 hd.p 位置,还要判断 创建是否成功等细节,需要 diskpart 再次扫描 数据,反倒不如 直接手动 来的直接了。

其他的 改动 可以 改一下。
回复

使用道具 举报

18#
 楼主| 发表于 2018-6-6 12:24:43 | 显示全部楼层
有的分区是不能格式化的,比如 msr保留分区 和 扩展分区。分区以后自动格式化 这事儿,还要 加个判断
回复

使用道具 举报

19#
 楼主| 发表于 2018-6-6 13:12:03 | 显示全部楼层
8.11 新版已经放 1楼,
1、增加 创建分区后 可自动格式化 成制定格式
2、焦点输入 ,支持 通过 hd.p* 的方式 定位,也就是 在 hd.p 号码后面加个 * 星号
3、格式化 类型增加  exfat
4、增加 可以探测 要缩小的 分区的可缩小空间

点评

硬盘分区序列 DiskPart:D:_6.1.7601,脚本:D: ------------------------------------------------------------------------------------------------  详情 回复 发表于 2018-6-6 13:19
回复

使用道具 举报

20#
 楼主| 发表于 2018-6-6 14:45:06 | 显示全部楼层
freesoft00 发表于 2018-6-6 13:30
4、增加 可以探测 要缩小的 分区的可缩小空间
-------------------------------------------------------
...

这方面 diskpart 很弱的
回复

使用道具 举报

21#
 楼主| 发表于 2018-6-6 15:34:06 | 显示全部楼层
修正了一下显示方面的问题,
增加一个可以自适应窗口的功能,就是如果系统中有 mode.com 这个程序,就利用这个程序 计算出 cmd 窗口列宽,然后让 disk#n...... 那一行字显示更多的信息。
你可以 将cmd 窗口最大化,然后 在主菜单 下 按回车刷新一下列表显示,就能看到效果了。如果 vhd 名字比较长。。。的话。

8.12 版放到一楼了。

点评

硬盘分区序列 DiskPart:D:_6.1.7601,脚本:D: ------------------------------------------------------------------------------------------------  详情 回复 发表于 2018-6-6 17:40
回复

使用道具 举报

22#
 楼主| 发表于 2018-6-7 00:01:36 | 显示全部楼层
freesoft00 发表于 2018-6-6 17:44
扩展的.否,和其它列没有对齐。
mbr磁盘,有扩展分区是没有盘符和卷标的,能处理一下文字和其它的对齐更好 ...

win系统现在 cmd 汉字进行了整字处理,占用2个字符却被识别为1个。导致 无法对其

另外 自动分区 msr 和 efi 体积取多大合适?

点评

msr一般128mb就可以。efi一般是fat16格式(32格式也可以),大小300mb就够了(diskmen默认是分的300mb)  详情 回复 发表于 2018-6-7 06:51
回复

使用道具 举报

23#
 楼主| 发表于 2018-6-7 09:28:24 | 显示全部楼层
8.50 已经 上传 1楼
增加了  均分硬盘 的功能 ,增加 脚本 记录,可以记录 都用了 哪些 脚本命令。

点评

diskpart.s文件改为diskpart.txt就可以。这样生成脚本在执行前,可以打开手动修改参数或者磁盘大小。然后执行。打开时txt直接就用记事本打开了。不用右键选择编辑器了。 一般gpt磁盘,efi分区在msr分区前面,这个  详情 回复 发表于 2018-6-7 09:54
回复

使用道具 举报

24#
 楼主| 发表于 2018-6-7 10:00:41 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-7 10:12 编辑

分一个区 还用 自动啥?直接 创建 不就行了么?

diskpart 修改 硬盘 结构为  gpt ,就会自动生成一个 msr,只是 空间小,所以要删除了重新建一个 ,如果 微软 在磁盘初始化时 自动生成一个 msr ,那么,个人认为 msr 应该 放前面的。 msr 真没啥感觉 常用到。

diskpart.s 这个 之所以没有 用 txt 做扩展名,就是怕 随意查看修改,如果确实需要修改,有修改脚本能力的,也都是高手了,需要修改的情况也不多。非要 用 Txt 做扩展,可以 在 脚本 前部 修改 set dpscript= 变量 就可以了。


点评

恩。 好的。 在执行脚本的时候没有显示脚本执行情况。 到执行完成后才显示如下的信息: ...正在运行脚本...... ------------------------------------------ .磁盘 3 现在是所选磁盘。 .DiskPart 成功地清  详情 回复 发表于 2018-6-7 10:15
回复

使用道具 举报

25#
 楼主| 发表于 2018-6-7 10:35:28 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-7 10:41 编辑
freesoft00 发表于 2018-6-7 10:15
恩。
好的。
在执行脚本的时候没有显示脚本执行情况。

这个应该可以的
把脚本 script_l 段 550 行 左右 的代码
  1. for /f "skip=5 delims=" %%a in ('diskpart /s !dpscript! ') do ( echo .%%a)
复制代码

替换成
  1. type !dpscript! |diskpart & echo.
复制代码



懒得调整了
感兴趣,自己试试吧。
回复

使用道具 举报

26#
 楼主| 发表于 2018-6-7 10:45:41 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-7 10:48 编辑
窄口牛 发表于 2018-6-7 10:34
说个实际的吧,用Qdir打开win10下的efi分区,这个功能可以考虑加入。


嗯,也有用  winxshell 的

我一直这么做的。不过,感觉不用 放到 脚本里,脚本只负责挂载,查看啥的 自己 选择软件 运行呗。
毕竟 cmd 脚本是单线程的。
回复

使用道具 举报

27#
 楼主| 发表于 2018-6-7 15:20:27 | 显示全部楼层
刚改了一些 check_l
输入 焦点 编号的时候,只有当涉及输入的 是 disk 的时候 如果输入的是硬盘 #N 号才需要 后置星号  * ,其他的 输入序号 和 hd.p 都可以锁定 焦点。
回复

使用道具 举报

28#
 楼主| 发表于 2018-6-7 15:37:37 | 显示全部楼层
暂时不折腾了,休息休息了。

这个 虽然没有 专业分区软件来的 高级,但 也有优势,就是 体积小。哈哈哈。
核心脚本不到 30K 。需要的其他组件 diskpart.exe /mode.com /chcp.com  基本系统都自带。

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

29#
 楼主| 发表于 2018-6-8 21:53:51 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-8 21:55 编辑

8.60 测试版 DP_Script-8.60.7z 在一楼
增加可以 按测到 卷 的可用空间,
尝试探测 不在 list part 中的 卷的信息,并将其信息加入列表,因为其没有对应的 part ,所以只能对其进行 格式化 和分配 盘符
某些 u盘 select disk 后自动将  part 选中为焦点,导致 无法探测 该 part 信息,针对这种情况,做了适量调整,但愿能 更多的识别这样的 u盘。
回复

使用道具 举报

30#
 楼主| 发表于 2018-6-9 11:03:42 | 显示全部楼层
改进 8.60 中由于没有预设 vol_free 占位 导致当 detail vol  无法获取 vol_free 时free/size 字段错位的问题。
8.61 测试 已经放入1楼

从 反馈 列表看,探测 不能被 list part 的卷的信息,是可行的,
因为多探测的几个卷,所以会多费些时间。

点评

还是没有对齐  详情 回复 发表于 2018-6-9 12:06
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-3 01:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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