无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: nttwqz
打印 上一主题 下一主题

[原创] dpinfo 2.6.5 beta2 磁盘分区信息 分区相关工具定制脚本

    [复制链接]
61#
 楼主| 发表于 2018-6-16 23:26:02 | 只看该作者
pznpt 发表于 2018-6-16 10:55
嗯,可能是我理解错了吧。

如果选项有1-10,那么除了1、2、3、4、5、6、7、8、9、10之外的都不合法,我需要这么判断。
回复

使用道具 举报

62#
发表于 2018-6-17 15:36:13 来自手机 | 只看该作者
nttwqz 发表于 2018-6-16 23:26
如果选项有1-10,那么除了1、2、3、4、5、6、7、8、9、10之外的都不合法,我需要这么判断。

那我建议就用 for /l 对用户输入数据做 ==  判断 ,不能用 数学比较大小的方法了。

点评

我也在考虑要不要用这种方法,毕竟这种方法一下子就把非选项中的判断出来了,毕竟可以多加几个if...else...提高判断效率,而且即使字母列列表也可以用for。 今天一直在尝试提高脚本执行效率,但是却发现,分析结  详情 回复 发表于 2018-6-17 16:12
回复

使用道具 举报

63#
 楼主| 发表于 2018-6-17 16:12:08 | 只看该作者
本帖最后由 nttwqz 于 2018-6-17 16:35 编辑
dos时代菜鸟 发表于 2018-6-17 15:36
那我建议就用 for /l 对用户输入数据做 ==  判断 ,不能用 数学比较大小的方法了。


我也在考虑要不要用这种方法,毕竟这种方法一下子就把非选项中的判断出来了,而且即使字母列列表也可以用for。

今天一直在尝试提高脚本执行效率,但是却发现,分析结果其实过程很短,一般在1ms以内,但是diskpart执行脚本却基本在21ms左右,即使用管道和findstr也只不过多2ms左右。要是有什么方法,不用第三方软件,比如查注册表等获取实时的硬盘和分区编号(和diskpart中一样),那就可以一次diskpart获取到信息了。
回复

使用道具 举报

64#
发表于 2018-6-17 16:44:36 | 只看该作者
nttwqz 发表于 2018-6-17 16:12
我也在考虑要不要用这种方法,毕竟这种方法一下子就把非选项中的判断出来了,而且即使字母列列表也可以 ...

第三方软件,可以考虑用 分区助手,一下 信息全来了。支持 命令行。
如果不用 分区助手,用 注册表,我没试过,估计都是基于  vol 的信息。或者用 vbs 也只是 到 扩展分区,扩展分区下的逻辑分区 就 都显示的 一个分区号上,而且 有的 pe 还没有 vbs . 毕竟 是要用  diskpart 做事情,信息采集 如果跟 diskpart 不一致就不好弄。
回复

使用道具 举报

65#
发表于 2018-6-17 16:57:29 | 只看该作者
建议 把 vol 号 记录上,因为 有的分区 不能被 sele part 选择上,到时候 要分配盘符,就必须 sele vol 来定位它。

点评

好说,多定义一个变量而已,已简单加入。 [attachimg]373064[/attachimg]  详情 回复 发表于 2018-6-17 18:41
回复

使用道具 举报

66#
 楼主| 发表于 2018-6-17 18:41:56 | 只看该作者
dos时代菜鸟 发表于 2018-6-17 16:57
建议 把 vol 号 记录上,因为 有的分区 不能被 sele part 选择上,到时候 要分配盘符,就必须 sele vol 来 ...

好说,多定义一个变量而已,已简单加入。


回复

使用道具 举报

67#
发表于 2018-6-17 22:11:38 | 只看该作者
本帖最后由 dos时代菜鸟 于 2018-6-17 22:48 编辑
nttwqz 发表于 2018-6-17 18:41
好说,多定义一个变量而已,已简单加入。


突然想起一个事儿,不一定 用得到。

如果 你想在脚本中以后还用到 这个 表中的信息 ,比如截取 某个分区的 盘符 或者 vol 编号,那么 就会用到  
for /f "tokens=1-n " %%x in () do ()
这样 截取 某行 第几个单词 的问题,可是你有的 字段占位 是 空格的,这样,截取单词的时候就可能 截取到别的地方去了。除非你用 精准截取 字符串 中某几个 位置的 字符的方式来获取 想要的信息。

所以 我建议你 把没有内容的 空字段内容 用一个 字符代替之,比如 . * @ 之类的。以后判断上也方便,如果 截取到的是 特定的 字符,就说明 这个字段 没有可用信息。
当然,如果以后 不需要 通过这个表 截取数据 ,或者不用 for /f 的方式截取 字段单词 的话,也就无所谓了。


还有个 想法。
如果能 确定 硬盘分区结构 是 mbr 还是 gpt 的话, 就可以 将  act /esp 合一了,不用两列,gpt 结构不存在 act 的情况。另外 一个 gpt 硬盘可能 存在 多个 efi 分区。

点评

  我猜,你应该没仔细看我的脚本,我的脚本功能简单,目前不足300行,不像你的已经快1000行了,还是容易看的,毕竟我这本身就没打算写成diskpart GUI,就算写成了,估计我自己都懒得用,因为有功能强大的DG和分区  详情 回复 发表于 2018-6-17 23:29
回复

使用道具 举报

68#
 楼主| 发表于 2018-6-17 23:29:33 | 只看该作者
本帖最后由 nttwqz 于 2018-6-17 23:58 编辑
dos时代菜鸟 发表于 2018-6-17 22:11
突然想起一个事儿,不一定 用得到。

如果 你想在脚本中以后还用到 这个 表中的信息 ,比如截取 某个 ...


  我猜,你应该没仔细看我的脚本,我的脚本功能简单,目前不足300行,不像你的已经快1000行了,还是容易看的,毕竟我这本身就没打算写成diskpart GUI,就算写成了,估计我自己都懒得用,因为有功能强大的DG和分区助手,除非迫不得已功能这两者没有。写此脚本的主要目的,是哪天万一我不想用WinntSetup了,自己写一个脚本代替,这个很明显是用来实现相关目的的,比如安装到哪个区,哪个是活动分区,多大,好有个列表能显示,所以,为esp分配盘符、设置活动分区应该会有,但是比如调整分区大小、GPT MBR互转是绝对不会有的,只要是不影响系统安装的应该不会加入。

  不知道你的意思是不是,如果以后需要列表中某个信息,还需要再次分析这个列表,然后提取?弄个占位符好提取,是这样吗?

  我这个表中的信息都是由变量组成,各种磁盘分区等信息都被定义成了变量,可以任意调用。


脚本中的常用变量解释:

!dkl!                                                磁盘编号列表(与diskpart相同)
!dk-磁盘编号-dpl!                        各磁盘分区编号列表(与diskpart相同)
!dk-磁盘编号-分区编号-vol!                卷标
!dk-磁盘编号-分区编号-ltr!                盘符
!dk-磁盘编号-分区编号-type!        类型
!dk-磁盘编号-分区编号-act!                激活、ESP
!dk-磁盘编号-分区编号-size!        大小
!dk-磁盘编号-分区编号-id!                文件系统、ID(后来已改成!dk-磁盘编号-分区编号-fs!

以后加其它信息的话,一般这样表示
!dk-磁盘编号-分区编号-该信息的常见英文!,一般取自diskpart
比如,偏移量就是!dk-磁盘编号-分区编号-offsize!(目前没有)

比如:

!dk-1-2-size!,,代表编号为0的磁盘,分区编号为2的分区的大小
!dkl!,如果有两个磁盘,diskpart列表磁盘显示0、1,那么值就是0 1
!dk-0-dpl!,磁盘0的分区列表,diskpart列表分区如果显示1、2、3、4,那么值就是1 2 3 4

有了磁盘编号列表和各磁盘分区编号列表,各种变量可以任意调用。


ACT ESP本身就是一列,不是两列!为了更直观显示中间加了个空格,ESP时!dk-磁盘编号-分区编号-act!的值有好几个空格,好让*显示在ESP下面,这样看起来像是两列,但是更容易区分ESP分区了,这样一般人都能看出来这个是GPT磁盘。
回复

使用道具 举报

69#
发表于 2018-6-18 07:04:41 来自手机 | 只看该作者
nttwqz 发表于 2018-6-17 23:29
  我猜,你应该没仔细看我的脚本,我的脚本功能简单,目前不足300行,不像你的已经快1000行了,还是 ...

明白了
回复

使用道具 举报

70#
发表于 2018-6-18 07:33:53 来自手机 | 只看该作者
nttwqz 发表于 2018-6-17 23:29
  我猜,你应该没仔细看我的脚本,我的脚本功能简单,目前不足300行,不像你的已经快1000行了,还是 ...

你也可以用@表示act.用 星豆 表示esp啊,这样就不用考虑要用空格错位显示了呀。

点评

目前并没有发现错位问题 因为我用了tab键,我倒是觉得你那后面显示不明了,但是你那信息显示太多,对其估计显示不下  详情 回复 发表于 2018-6-18 07:53
回复

使用道具 举报

71#
 楼主| 发表于 2018-6-18 07:53:42 来自手机 | 只看该作者
dos时代菜鸟 发表于 2018-6-18 07:33
你也可以用@表示act.用 星豆 表示esp啊,这样就不用考虑要用空格错位显示了呀。

目前并没有发现错位问题 因为我用了tab键,我倒是觉得你那后面显示不明了,但是你那信息显示太多,对其估计显示不下
回复

使用道具 举报

72#
发表于 2018-6-18 08:57:58 | 只看该作者
支持原创,感谢分享~
回复

使用道具 举报

73#
发表于 2018-6-18 11:38:31 | 只看该作者
nttwqz 发表于 2018-6-18 07:53
目前并没有发现错位问题 因为我用了tab键,我倒是觉得你那后面显示不明了,但是你那信息显示太多,对其估 ...

好吧好吧,呵呵,我那个,就不考虑了,信息量多了,能看出来就行了.
回复

使用道具 举报

74#
 楼主| 发表于 2018-6-18 22:25:33 | 只看该作者
2.2发布,有时间精力的同志,请帮忙测试列表信息是否有错。
回复

使用道具 举报

75#
发表于 2018-6-19 07:05:22 | 只看该作者

点评

2.1是否正常? 能否编辑2.2的脚本,按里面说的方法上传文件呢?多谢!  详情 回复 发表于 2018-6-19 07:18
回复

使用道具 举报

76#
 楼主| 发表于 2018-6-19 07:18:12 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2018-6-19 07:26 编辑
窄口牛 发表于 2018-6-19 07:05


2.1是否正常?
能否编辑2.2的脚本,按里面说的方法上传文件呢?多谢!

也就是
反馈Bug请管理员cmd内执行diskpart /s "%temp%\dkdet.tmp">"%temp%\dkpdet.tmp",然后,截图结果并打包上传 "%temp%\dkdet.tmp";"%temp%\dkpdet.tmp"
回复

使用道具 举报

77#
发表于 2018-6-19 08:50:29 | 只看该作者
桌面.rar (1.34 KB, 下载次数: 3)

点评

什么时候有空了能不能执行下2.21然后请管理员cmd内执行diskpart /s "%temp%\dkdet.tmp">"%temp%\dkpdet.tmp",你上次2.2里面的没这个文件 dkpdet.tmp  详情 回复 发表于 2018-6-19 15:27
多谢,我找了台试了一下,已发现问题 编辑脚本,搜索skip=6替换成skip=5试一下  详情 回复 发表于 2018-6-19 09:46
回复

使用道具 举报

78#
发表于 2018-6-19 09:04:15 | 只看该作者
作为练CMD很不错。

但就本文主题要实现的目标来说,显然PECMD 2012实现起来简便得多。

点评

本来就是写着练手玩的,哈哈 一般的电脑没有pecmd,正常电脑上无法使用,而且我更愿意去学一门编程语言自己写程序,如果真出此类工具的话,不太喜欢使用pecmd,更何况,关键是我也不会。。。与其研究pecmd,还不  详情 回复 发表于 2018-6-19 10:07
回复

使用道具 举报

79#
 楼主| 发表于 2018-6-19 09:46:14 来自手机 | 只看该作者
窄口牛 发表于 2018-6-19 08:50

多谢,我找了台试了一下,已发现问题

编辑脚本,搜索skip=6替换成skip=5试一下
回复

使用道具 举报

80#
 楼主| 发表于 2018-6-19 10:07:45 来自手机 | 只看该作者
chiannet 发表于 2018-6-19 09:04
作为练CMD很不错。

但就本文主题要实现的目标来说,显然PECMD 2012实现起来简便得多。

本来就是写着练手玩的,哈哈

一般的电脑没有pecmd,正常电脑上无法使用,而且我更愿意去学一门编程语言自己写程序,如果真出此类工具的话,不太喜欢使用pecmd,更何况,关键是我也不会。。。与其研究pecmd,还不如研究编程
回复

使用道具 举报

81#
发表于 2018-6-19 10:42:45 来自手机 | 只看该作者
可以了,就是这个问题

点评

多谢!  详情 回复 发表于 2018-6-19 10:47
回复

使用道具 举报

82#
 楼主| 发表于 2018-6-19 10:47:39 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2018-6-19 10:49 编辑
窄口牛 发表于 2018-6-19 10:42
可以了,就是这个问题


多谢!

8.1的diskpart和7不一样,以后尽量会做各个环境下测试一下再发布
回复

使用道具 举报

83#
发表于 2018-6-19 11:15:24 | 只看该作者
本帖最后由 chiannet 于 2018-6-19 11:25 编辑
nttwqz 发表于 2018-6-19 10:07
本来就是写着练手玩的,哈哈

一般的电脑没有pecmd,正常电脑上无法使用,而且我更愿意去学一门编程语 ...


PART list volume ,VarName
ENVI #I=5
ENVI #J=2
ENVI #k=3
LOOP #%I%<10000,
{
        MSTR 分区类型=<%I%>%VarName%
        FIND $%分区类型%=,EXIT LOOP
        MSTR 设备号=<%J%>%VarName%
        MSTR 分区号=<%k%>%VarName%
        CALC #I=%I%+7
        CALC #J=%J%+7
        CALC #k=%k%+7
        FIND [$%分区类型%=C12A7328-F81F-11D2-BA4B-00A0C93EC93B $%分区类型%=239],
        {
                PART -DEVID LIST DISK %设备号%,DEVID0V2V
                MSTR 容量=<2>%DEVID0V2V%
                MSTR 总线=<9>%DEVID0V2V%
                MSTR 分区类型=<10>%DEVID0V2V%
                MSTR 设备名称=<12>%DEVID0V2V%
                MESS 找到的EFI分区有\n\n\n设  备  名  称:%设备名称%\n\n总          线:%总线%\n\n容          量:%容量%\n\n设备号__分区号:%设备号%__%分区号%\n\n分  区  类  型:%分区类型%-EFI
        }
}




点评

多谢指教,够简单!  详情 回复 发表于 2018-6-19 14:35
回复

使用道具 举报

84#
 楼主| 发表于 2018-6-19 14:35:20 来自手机 | 只看该作者
chiannet 发表于 2018-6-19 11:15
PART list volume ,VarName
ENVI #I=5
ENVI #J=2

多谢指教,够简单!
回复

使用道具 举报

85#
 楼主| 发表于 2018-6-19 15:27:27 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2018-6-19 15:28 编辑
窄口牛 发表于 2018-6-19 08:50


什么时候有空了能不能执行下2.21然后请管理员cmd内执行diskpart /s "%temp%\dkdet.tmp">"%temp%\dkpdet.tmp",你上次2.2里面的没这个文件,我想看一下你那2:4为什么显示ID而不是文件系统

dkpdet.tmp
回复

使用道具 举报

86#
发表于 2018-6-20 04:04:51 | 只看该作者
列表有点小问题。
我的E盘分区而没有格式化。在列表中没有显示盘符,下面有你的和菜鸟的界面对比。
  NUM   HD:P    VOL     LTR     类型    ACT ESP 大小    FS/ID
  ---   ----    ---     ---     ------- --- --- ------- ------------------
   1    0:1      1       C      主要     *      29 GB   NTFS
   2    0:2      2       D      主要            22 GB   NTFS
   3    0:3      3              主要            8000 MB RAW


请选择(NUM):








                        MS DiskPart 分区管理                                          Ver:X9.12.7 ZH_CN
---------------------------------------------------------------------------------------------------------
Num Vol HD.P_ LTR FS/ID Offset   Free   Size Act Label        RW P.Type_V.Stat_Info_type/HD.Sta_Dyn_name....
   1 ---  0    --- ----- ------     0B   60GB MBR ------------ -- 联机_BAS_.[VMware, VMware Virtual S SCSI Disk Device]
   2   1  0.1   C  NTFS  1024KB   19GB   29GB  *  系统保留         RW 主要_正常_系统_磁盘分区.
   3   2  0.2   D  NTFS    29GB   22GB   22GB  .               RW 主要_正常_._磁盘分区.
   4   3  0.3   E  RAW     52GB 8000MB 8000MB  .               RW 主要_正常_._磁盘分区.
---------------------------------------------------------------------------------------------------------

点评

简单修改下,应该管用了,但是如果磁盘未分区,比如VHD,不初始化,什么都不会显示,以后改了 原因在于以前使用 if exist C:\判断是否有盘符,其实是能访问的盘符,现在用cd c:(没有\)来显示盘符,未格式化也能  详情 回复 发表于 2018-6-20 08:07
回复

使用道具 举报

87#
发表于 2018-6-20 08:02:36 | 只看该作者
本帖最后由 窄口牛 于 2018-6-20 08:08 编辑

能显示了,2:4是ext4格式,我的有我心ext2fsd,没安装这个并且有ext分区的可能也不显示分区格式。


另外一个没有ext2fsd的系统下

点评

我说呢,我那ID应该没有EXT4这么准确的一项才对,我在想要不要把ext2fsd集成到PE里面。。。  详情 回复 发表于 2018-6-20 08:11
回复

使用道具 举报

88#
 楼主| 发表于 2018-6-20 08:07:48 | 只看该作者
freesoft00 发表于 2018-6-20 04:04
列表有点小问题。
我的E盘分区而没有格式化。在列表中没有显示盘符,下面有你的和菜鸟的界面对比。
  NUM ...

简单修改下,应该管用了,但是如果磁盘未分区,比如VHD,不初始化,什么都不会显示,以后改了

原因在于以前使用 if exist C:\判断是否有盘符,其实是能访问的盘符,现在用cd c:(没有\)来显示盘符,未格式化也能显示。

diskpartlist_2.22.rar

4.99 KB, 下载次数: 18, 下载积分: 无忧币 -2

回复

使用道具 举报

89#
 楼主| 发表于 2018-6-20 08:11:24 | 只看该作者
窄口牛 发表于 2018-6-20 08:02
能显示了,2:4是ext4格式,我的有我心ext2fsd,没安装这个并且有ext分区的可能也不显示分区格式。

我说呢,我那ID应该没有EXT4这么准确的一项才对,我在想要不要把ext2fsd集成到PE里面。。。
回复

使用道具 举报

90#
发表于 2018-6-20 08:57:08 来自手机 | 只看该作者
pe里有必要,可以省下linuxlive。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 08:51

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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