dos时代菜鸟 发表于 2018-6-4 13:20:41

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

本帖最后由 dos时代菜鸟 于 2021-11-15 23:08 编辑

适用win7及以上版本。

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


x9.08

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


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

脚本会 在 所在位置 临时生成 文件,所以 不能 对 脚本所在 盘进行操作,也不应该对正在运行的当前系统 所在盘进行操作。
附件中 包含了 win7 的 diskpart.exe 可以删除。


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










dos时代菜鸟 发表于 2018-6-4 13:22:07

本帖最后由 dos时代菜鸟 于 2018-6-4 14:15 编辑

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

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

holley2008 发表于 2018-6-4 15:46:42

支持楼主授人以渔的行为!{:1_195:}

freesoft00 发表于 2018-6-4 16:19:02

支持一下。

nttwqz 发表于 2018-6-4 16:25:47

真有精力,显示信息够详细!

我已经变懒了~

也可能我一直都懒

dos时代菜鸟 发表于 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 相关的功能。

ai20110304 发表于 2018-6-4 22:01:49

好东西的分享

freesoft00 发表于 2018-6-4 22:03:38

dos时代菜鸟 发表于 2018-6-4 21:54
轻微改动了一下
可以显示 vhd 盘对应的文件名,可以显示 vhd 是否可扩展,可以显示 disk 的Dyn 性质。
...

vhd单独也可以。要不要操作的项目太多了。
磁盘分区的单独一个。
vhd操作的如果 兄弟写可以单独一个。

dos时代菜鸟 发表于 2018-6-4 22:07:30

freesoft00 发表于 2018-6-4 22:03
vhd单独也可以。要不要操作的项目太多了。
磁盘分区的单独一个。
vhd操作的如果 兄弟写可以单独一个。

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

freesoft00 发表于 2018-6-4 22:22:13

dos时代菜鸟 发表于 2018-6-4 22:07
还是要 请 帮忙 测试下dyn 方面 是否能够 准确 定位。


                        硬盘分区序列                                  DiskPart:D:_6.1.7601,脚本:D:
---------------------------------------------------------------------------------------------------------
NumVolHD:P   LTR   Fs       Size   Label         类型_偏移_活动_状态_信息
    1 ----   0    -----------------------------Disk#0~0B/30GB~Bas~MBR~联机~~(VMware, VMware Virtual S SCSI Disk Device)
    2    2   0:1    C   NTFS      20 GB系统盘符C         主要.1024KB.是.正常.系统
    3    3   0:2    D   NTFS       9 GB                主要.20GB.否.正常.
    4 ----   1    -----------------------------Disk#1~0B/20GB~Dyn~MBR~联机~~(VMware, VMware Virtual S SCSI Disk Device)
    5    *   1:2    *            992 KB                动态数据.31KB.否
    6    0   1:1    L   FAT32   19 GB                动态数据.1024KB.是.正常.
    7 ----   2    -----------------------------Disk#2~0B/1200GB~Bas~GPT~联机~~(VMware, VMware Virtual S SCSI Disk Device)
    8    8   2:1    *   NTFS   500 MB                恢复.1024KB.晕.正常.已隐藏
    9    9   2:2    *   FAT32    100 MB                系统.501MB.晕.正常.已隐藏
   10    *   2:3    *            128 MB                保留.601MB.晕
   11    4   2:4    H   NTFS      50 GBGPT磁盘的第一个分区   主要.729MB.晕.正常.
   12    5   2:5    I   NTFS   200 GBmovie         主要.50GB.晕.正常.
   13    6   2:6    J   NTFS   200 GB                主要.250GB.晕.正常.
   14    7   2:7    K   NTFS   749 GB                主要.450GB.晕.正常.
---------------------------------------------------------------------------------------------------------
---当前焦点:Num=;HD:P=

---主菜单------------------------------------------------------------------------------------------------
   L.装卸盘符            D.删除分区                  C.创建分区               F.格式化分区
   S.清除某硬盘所有分区    T.初始化某硬盘分区形式      V.活动分区
   R.刷新列表            X.退出
---------------------------------------------------------------------------------------------------------
---请选择一个操作:___

freesoft00 发表于 2018-6-4 22:23:01

第二个磁盘是动态磁盘,显示出来了。

dos时代菜鸟 发表于 2018-6-4 22:27:13

freesoft00 发表于 2018-6-4 22:23
第二个磁盘是动态磁盘,显示出来了。

多谢支持。多谢测试。

freesoft00 发表于 2018-6-4 22:27:47


                        硬盘分区序列                                  DiskPart:D:_6.1.7601,脚本:D:
---------------------------------------------------------------------------------------------------------
NumVolHD:P   LTR   Fs       Size   Label         类型_偏移_活动_状态_信息
    1 ----   0    -----------------------------Disk#0~0B/30GB~Bas~MBR~联机~~(VMware, VMware Virtual S SCSI Disk Device)
    2    8   0:1    C   NTFS      20 GB系统盘符C         主要.1024KB.是.正常.系统
    3    9   0:2    D   NTFS       9 GB                主要.20GB.否.正常.
    4 ----   1    -----------------------------Disk#1~9GB/20GB~Dyn~MBR~联机~~(VMware, VMware Virtual S SCSI Disk Device)
    5    *   1:1    *             19 GB                动态数据.31KB.否
    6 ----   2    -----------------------------Disk#2~0B/1200GB~Dyn~GPT~联机~~(VMware, VMware Virtual S SCSI Disk Device)
    7    5   2:1    *   NTFS   500 MB                恢复.1024KB.晕.正常.已隐藏
    8    6   2:2    *   FAT32    100 MB                系统.501MB.晕.正常.已隐藏
    9    *   2:8    *         1024 KB                动态保留.601MB.晕
   10    *   2:3    *            127 MB                保留.602MB.晕
   11    3   2:4    H   NTFS    1199 GBGPT磁盘的第一个分区   动态数据.729MB.晕.正常.
---------------------------------------------------------------------------------------------------------
---当前焦点:Num=;HD:P=

---主菜单------------------------------------------------------------------------------------------------
   L.装卸盘符            D.删除分区                  C.创建分区               F.格式化分区
   S.清除某硬盘所有分区    T.初始化某硬盘分区形式      V.活动分区
   R.刷新列表            X.退出
---------------------------------------------------------------------------------------------------------
---请选择一个操作:___

freesoft00 发表于 2018-6-4 22:30:25

第二和第三磁盘是动态。下面是第三磁盘详细信息。动态磁盘无法显示分区盘符。这个list part就是无法显示的那没有办法。动态磁盘是动态卷,只能在卷列表中显示盘符。

VMware, VMware Virtual S SCSI Disk Device
磁盘 ID: {FAEEC137-E424-414F-AD2E-24E6E2D3AC4E}
类型   : SAS
状态 : 联机
路径   : 0
目标 : 2
LUN ID : 0
位置路径 : PCIROOT(0)#PCI(1500)#PCI(0000)#SAS(P00T02L00)
当前只读状态: 否
只读: 否
启动磁盘: 否
页面文件磁盘: 否
休眠文件磁盘: 否
故障转储磁盘: 否
群集磁盘: 否

卷 ###      LTR标签         FS   类型      大小   状态       信息
---------------------------------------------------------------
卷   0   K                NTFS   简单         749 GB正常

卷   1   J                NTFS   简单         200 GB正常

卷   2   I   movie      NTFS   简单         200 GB正常

卷   3   H   GPT磁盘的第一个分区NTFS   简单            50 GB正常

卷   5                      NTFS   磁盘分区         500 MB正常         已
隐藏
卷   6                      FAT32磁盘分区         100 MB正常         已
隐藏

freesoft00 发表于 2018-6-4 22:32:21

dos时代菜鸟 发表于 2018-6-4 22:27
多谢支持。多谢测试。

客气了。
多谢的是你,分享了不少好东西给大家。

dos时代菜鸟 发表于 2018-6-4 23:58:37

本帖最后由 dos时代菜鸟 于 2018-6-5 00:03 编辑

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


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

dos时代菜鸟 发表于 2018-6-5 10:48:40

本帖最后由 dos时代菜鸟 于 2018-6-5 12:32 编辑

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

更新 已经 放到一楼


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

dos时代菜鸟 发表于 2018-6-5 13:48:31

可能是 太困了,居然 把一个公用变量 给 “及时”的清理的。重新 更新下,Num 是 公用变量。

http://wuyou.net/forum.php?mod=attachment&aid=MzcyMzIwfDgyZWViODgyfDE1MjgxNzc0OTF8MTE5OHw0MDk0NTU%3D


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

dos时代菜鸟 发表于 2018-6-5 14:39:34

十分抱歉,今日太困,不能再玩了。
中午更新 几个版本 都有小问题,请 下载的 重新下载。 7.93 版本,在一楼。


liangyi 发表于 2018-6-5 17:46:10


楼主提个小意见,就是第一列编号这个位置能不能改为只对磁盘进行编号排序呢?现在是磁盘和分区混在一起编号排序的

dos时代菜鸟 发表于 2018-6-5 17:58:28

liangyi 发表于 2018-6-5 17:46
楼主提个小意见,就是第一列编号这个位置能不能改为只对磁盘进行编号排序呢?现在是磁盘和分区混在一起编 ...

创新分区需要选硬盘

双响炮 发表于 2018-6-5 18:02:04

太牛了,这几天自己快被分区的批处理搞疯了

dos时代菜鸟 发表于 2018-6-5 18:03:34

liangyi 发表于 2018-6-5 17:46
楼主提个小意见,就是第一列编号这个位置能不能改为只对磁盘进行编号排序呢?现在是磁盘和分区混在一起编 ...

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

liangyi 发表于 2018-6-5 18:11:17

dos时代菜鸟 发表于 2018-6-5 18:03
创建分区,改变硬盘分区模式,都需要选择硬盘进行操作,硬盘分区删除以后,也要对硬盘资讯进行刷新,如果 ...

可能楼主误解我要表达的意思了,我是说能不能实现第一列只对硬盘编号显示,而第一列不显示分区编号

dos时代菜鸟 发表于 2018-6-5 19:11:34

liangyi 发表于 2018-6-5 18:11
可能楼主误解我要表达的意思了,我是说能不能实现第一列只对硬盘编号显示,而第一列不显示分区编号

那有怎么选择分区呢?

freesoft00 发表于 2018-6-5 19:18:30

dos时代菜鸟 发表于 2018-6-5 19:11
那有怎么选择分区呢?

估计他的意思是第一列只显示磁盘序号,其它都是空的。
第二列或者其它列再显示分区列表。
分开显示。
感觉不是太有必要。
因为有一列是磁盘+分区的列表

dos时代菜鸟 发表于 2018-6-5 19:28:34

本帖最后由 dos时代菜鸟 于 2018-6-5 21:33 编辑

freesoft00 发表于 2018-6-5 19:18
估计他的意思是第一列只显示磁盘序号,其它都是空的。
第二列或者其它列再显示分区列表。
分开显示。 ...已经修改 main_list 段,在不影响效率的前提下 ,改了一下 显示效果。


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

dos时代菜鸟 发表于 2018-6-5 19:30:43

本帖最后由 dos时代菜鸟 于 2018-6-5 21:35 编辑

dos时代菜鸟 发表于 2018-6-5 19:28
嗯,这个要这样理解,确实有为了好看不要效率的嫌疑,因为脚本里面,以后可能还会加东西,涉及到对列表文 ...

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

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

dos时代菜鸟 发表于 2018-6-5 21:08:05

本帖最后由 dos时代菜鸟 于 2018-6-5 21:46 编辑

看看,这样显示 行不行 ?

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

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



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

:MAIN_list
rem 考虑cmd窗口空间,vhd 文件信息可能被阉割。
cls
echo.
echo                           硬盘分区序列                                  DiskPart:!DPD!_!dpver!,脚本:%~d0
echo ---------------------------------------------------------------------------------------------------------
echoHDnPnVolHD:P_LTR   Fs       Size   Label         类型_偏移_活动_状态_信息
for %%a in (lx005 disk_name2 disk_lx2) do set "%%a="
for /f "skip=1 delims=" %%x in ('type !list0!') do (
set "lx005=%%x"
for /f "tokens=1,2,8" %%a in ("%%x") do (
    if not "%%b"=="----" (
      echo    ^|!lx005:~1!
    ) else (
      for /f "tokens=1,2 delims=(" %%h in ("!lx005:~55!") do (
      set "disk_lx2=%%h"
      call :str_mid "(%%~i" 38 &SET "disk_name2=!str_mid!" & set "str_mid="
      )
      echo !lx005:~1,4! ----!lx005:~6,48! !disk_lx2!!disk_name2!
    )
)
)
echo ---------------------------------------------------------------------------------------------------------
for %%a in (lx005 disk_name2 disk_lx2) do set "%%a="
echo ---当前焦点:Num=!n!;HD:P=!hdp2!

EXIT /B



liangyi 发表于 2018-6-5 22:17:09

本帖最后由 liangyi 于 2018-6-5 22:19 编辑

dos时代菜鸟 发表于 2018-6-5 19:11
那有怎么选择分区呢?




其实我想表达的是,在7.97版的基础上能否这样调整,这样会不会辨识好点,编程小白+强迫症只能给这些意见,无法提出技术类的建议,楼主莫怪
页: [1] 2 3 4 5 6
查看完整版本: diskpart 外壳脚本 简体中文版和英文版 Ver9.0