无忧启动论坛

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

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

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

明白了
回复

使用道具 举报

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磁盘。
回复

使用道具 举报

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 分区。
回复

使用道具 举报

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

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


回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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获取到信息了。
回复

使用道具 举报

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 对用户输入数据做 ==  判断 ,不能用 数学比较大小的方法了。
回复

使用道具 举报

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之外的都不合法,我需要这么判断。
回复

使用道具 举报

60#
发表于 2018-6-16 10:55:19 | 只看该作者
dos时代菜鸟 发表于 2018-6-16 10:07
他是要通过用户输入的数字参与下一步判断数字大小是否在范围内,比较大下这事儿,要求变量是数字。

嗯,可能是我理解错了吧。
回复

使用道具 举报

59#
发表于 2018-6-16 10:54:04 | 只看该作者
527104427 发表于 2018-6-16 10:06
好多年不见了,老兄还是一如既往地严谨啊!

呵呵,N久不逛论坛了,昨天想下载一个工具,就登陆了,顺便就回了一贴。

无忧还是老样子,向无忧的新老朋友问声好!
回复

使用道具 举报

58#
发表于 2018-6-16 10:07:20 来自手机 | 只看该作者
pznpt 发表于 2018-6-16 09:51
楼主好像是判断输入字符串是否为纯数字(digit),而不是判断是否为合法的数(number)。

-2, 0x3c, 3.14, ...

他是要通过用户输入的数字参与下一步判断数字大小是否在范围内,比较大下这事儿,要求变量是数字。

点评

嗯,可能是我理解错了吧。  详情 回复 发表于 2018-6-16 10:55

评分

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

查看全部评分

回复

使用道具 举报

57#
发表于 2018-6-16 10:06:48 | 只看该作者
pznpt 发表于 2018-6-16 09:51
楼主好像是判断输入字符串是否为纯数字(digit),而不是判断是否为合法的数(number)。

-2, 0x3c, 3.14, ...

好多年不见了,老兄还是一如既往地严谨啊!

评分

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

查看全部评分

回复

使用道具 举报

56#
发表于 2018-6-16 09:51:51 | 只看该作者
dos时代菜鸟 发表于 2018-6-16 06:56
直接set /a 赋值,把反馈>nul,用errorlevel做判断,不成功就赋值成0 ,就完事儿了。
字符串合理的自然 ...

楼主好像是判断输入字符串是否为纯数字(digit),而不是判断是否为合法的数(number)。

-2, 0x3c, 3.14, 1.24560000e+005 这些都是合法的数,并不代表这些数就是纯数字。因为这些字符串里面含有非0-9字符。

set /a 100*2
虽然 ErrorLevel 为 0,但 100*2 这个字符串并不是纯数字

set /a 086
同样,虽然 ErrorLevel 为 1,但 086 这个字符串是纯数字
回复

使用道具 举报

55#
发表于 2018-6-16 06:56:20 来自手机 | 只看该作者
本帖最后由 dos时代菜鸟 于 2018-6-16 09:33 编辑
pznpt 发表于 2018-6-15 23:59
eol^= 在这里应该是多余的。
在 %你的字符串% 前后加上一个 # 字符,一是防止 %你的字符串% 为空值而 ...

直接set /a 赋值,把反馈>nul,用errorlevel做判断,不成功就赋值成0 ,就完事儿了。
字符串合理的自然赋值成功,不合理的自然失败为0.

点评

楼主好像是判断输入字符串是否为纯数字(digit),而不是判断是否为合法的数(number)。 -2, 0x3c, 3.14, 1.24560000e+005 这些都是合法的数,并不代表这些数就是纯数字。因为这些字符串里面含有非0-9字符。 set  详情 回复 发表于 2018-6-16 09:51
回复

使用道具 举报

54#
发表于 2018-6-15 23:59:08 | 只看该作者
本帖最后由 pznpt 于 2018-6-16 00:01 编辑
nttwqz 发表于 2018-6-14 23:58
set /a 判断纯数字漏洞太多,你不妨试试 “5i” “5 i” 这样的情况,我尝试了一番之后才使用这个“比较 ...


eol^= 在这里应该是多余的。
在 %你的字符串% 前后加上一个 # 字符,一是防止 %你的字符串% 为空值而使得 do 语句不被执行,二是防止 %你的字符串% 出现以 ; 字符开头而使得 do 语句不被执行。

一般 for /f 写成这样子:
for /f "tokens=1* eol= delims=1234567890" %%a in ("%你的字符串%") do (...)
这样子貌似会忽略以空格开头的行,就是说 %你的字符串% 以空格开头,do 语句不会被执行。

我觉得改成这样可能会更好一点(输入双引号不会闪退):
@echo off
set /p str=输入数字:
for /f "tokens=1* delims=1234567890" %%a in ("#%str:"=""%#") do (
    if "%%b" == "#" (echo 纯数字) else (echo 非纯数字或空值)
)

评分

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

查看全部评分

回复

使用道具 举报

53#
发表于 2018-6-15 23:54:53 | 只看该作者
诈尸出来,支持一下!
回复

使用道具 举报

52#
发表于 2018-6-15 20:48:33 | 只看该作者
本帖最后由 dos时代菜鸟 于 2018-6-15 22:40 编辑
nttwqz 发表于 2018-6-15 09:44
他那方法我试过,别说表达式,就是特殊符号,比如^|都支持

要是遇到 以 = 或 , 开头的,或者其他特殊符号开头的。 可能还是不行

干脆如下命令看看行不行吧。
  1. set /a x=运算表达式 2>nul || set /a x=0
复制代码


呵呵呵,感觉好像走弯路了。
回复

使用道具 举报

51#
 楼主| 发表于 2018-6-15 09:44:51 来自手机 | 只看该作者
dos时代菜鸟 发表于 2018-6-15 08:12
还真是奇怪 的写法啊。需要研究学习下。

那个 意思好像是  明确 字符串中 除字母和数字以外的字符都是 ...

他那方法我试过,别说表达式,就是特殊符号,比如^<>|都支持
回复

使用道具 举报

50#
发表于 2018-6-15 08:12:33 | 只看该作者
本帖最后由 dos时代菜鸟 于 2018-6-15 09:18 编辑
nttwqz 发表于 2018-6-14 23:58
set /a 判断纯数字漏洞太多,你不妨试试 “5i” “5 i” 这样的情况,我尝试了一番之后才使用这个“比较 ...

还真是奇怪 的写法啊。需要研究学习下。

那个 意思好像是  明确 字符串中 除字母和数字以外的字符都是不合法的,包括 加减乘除符号、句号、逗号、分号等也是不合法的,任何一个数字、字母都可以是 文本流行内字段分隔符,而只截取被分割的两个字段


这样 如果 用户输入的 是一个 要 需要计算机 计算的 表达式呢? 还得 研究着 改改。

捕获.PNG (40.52 KB, 下载次数: 277)

捕获.PNG

点评

他那方法我试过,别说表达式,就是特殊符号,比如^|都支持  详情 回复 发表于 2018-6-15 09:44
回复

使用道具 举报

49#
发表于 2018-6-15 00:28:01 | 只看该作者
PE下总是得手动找ESP分区,有了这个工具就好了,感谢分享
回复

使用道具 举报

48#
 楼主| 发表于 2018-6-14 23:58:23 | 只看该作者
dos时代菜鸟 发表于 2018-6-13 09:20
请教 :能否确定 ,diskpart 识别为gpt  "系统" 的分区 Id 一定是  efi 的 c12a7328-f81f-11d2-ba4b-00a0c9 ...

set /a 判断纯数字漏洞太多,你不妨试试 “5i” “5 i” 这样的情况,我尝试了一番之后才使用这个“比较简单的方式”,而且我之前还搜索了批处理之家,就这个代码短点儿

下面的for是神马情况?用引号作为分隔符,参数直接空格可以省略这我都知道,可是eol^=在引号外面就不明白了。这也是种判断方法

delims 解法示例:
  1. @echo off

  2. set "阿拉伯数字=0123456789"
  3. set "大写字母=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4. set "小写字母=abcdefghijklmnopqrstuvwxyz"

  5. for /f "tokens=1*delims=%阿拉伯数字%%大写字母%%小写字母%"eol^= %%a in (
  6.    "#你的字符串#"
  7. ) do (
  8.    if %%b==# (echo 合法) else (echo 不合法)
  9. )

  10. pause
复制代码


回复

使用道具 举报

47#
 楼主| 发表于 2018-6-14 22:53:43 | 只看该作者
zhangmi 发表于 2018-6-13 08:26
大师,有个问题请教一下,我的电脑加载esp以后,不能操作这么解决,百度说是更改安全选项,但是家庭版没这 ...

没那么麻烦,该分区不过需要管理员权限而已

只需任务管理器结束资源管理器(explorer.exe),然后以系统管理权限创建此任务即可正常浏览该分区

如果你觉得麻烦可以保存下面的命令为批处理文件,以管理员身份运行即可。

  1. taskkill /im explorer.exe /f && start explorer.exe
复制代码
回复

使用道具 举报

46#
发表于 2018-6-14 16:40:56 | 只看该作者
支持一下!弄这种东西就是费时。
回复

使用道具 举报

45#
发表于 2018-6-13 23:41:46 | 只看该作者
esp分区,这个是uefi必须的,支持楼主。。。
回复

使用道具 举报

44#
发表于 2018-6-13 20:27:24 | 只看该作者
dos时代菜鸟 发表于 2018-6-13 19:58
老外里面搞 win 系统维护的 有多少?
搞系统维护的 用 diskpart 搞分区 又有多少?

英文系统未必就是老外用,也未必就是老外维护。
这个没必要讨论下去,我也就是这么一说而已。
回复

使用道具 举报

43#
发表于 2018-6-13 20:27:00 | 只看该作者
dos时代菜鸟 发表于 2018-6-13 19:58
老外里面搞 win 系统维护的 有多少?
搞系统维护的 用 diskpart 搞分区 又有多少?

应该说现在还用dos的还有多少?
回复

使用道具 举报

42#
发表于 2018-6-13 19:58:29 | 只看该作者
Anson4 发表于 2018-6-13 17:23
其实不一定是老外,在国内外资公司的办事处基本都要求用英文系统。

老外里面搞 win 系统维护的 有多少?
搞系统维护的 用 diskpart 搞分区 又有多少?

点评

英文系统未必就是老外用,也未必就是老外维护。 这个没必要讨论下去,我也就是这么一说而已。  详情 回复 发表于 2018-6-13 20:27
应该说现在还用dos的还有多少?  详情 回复 发表于 2018-6-13 20:27
回复

使用道具 举报

41#
发表于 2018-6-13 17:23:36 | 只看该作者
nttwqz 发表于 2018-6-13 17:20
现在尚没有精力考虑英文环境执行问题

而且 这东西写出来都是意淫,有几个外国老会用?

其实不一定是老外,在国内外资公司的办事处基本都要求用英文系统。
回复

使用道具 举报

40#
发表于 2018-6-13 17:21:41 | 只看该作者
freesoft00 发表于 2018-6-13 13:59
就是呀。你的英文系统cmd能显示中文。是你设置了输入法的部分吧。我记着好像是设置了中文输入后中文的文 ...

对于多语言环境,有专门的设置:

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 03:21

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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