无忧启动论坛

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

[求助] 批处理获取硬盘的激活分区

[复制链接]
跳转到指定楼层
1#
发表于 2017-11-9 11:52:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hurry307 于 2017-11-9 17:11 编辑

如何用批处理获取硬盘的激活分区(就是确定cdefg那个盘时激活的分区),并且获取的值赋予自定义的变量
2#
发表于 2017-11-9 14:34:38 | 只看该作者
建议使用悬赏方式,很快就得到答案了!
回复

使用道具 举报

3#
发表于 2017-11-9 15:31:49 | 只看该作者
本帖最后由 lsfx555 于 2017-11-9 15:47 编辑

我已经有做过MBR的表的,GPT的没有做过,话说回来,GPT的,没有这东东!用磁盘工具得到磁盘信息,就可以判断了,时间很长了,不记得当时具体怎么实现的了,好像32位 WINPE里是用@gdisk32 > HDdisk.txt 2>nul   命令得到磁盘信息
  1. rem         对HDdisk.txt文件截取第二行并生成HDif2.TXT
  2. gawk.exe NR==2 HDdisk.txt > HDif2.TXT
  3. rem         把第二行文本读出并设置为%HDif2%变量
  4. for /f "delims=" %%i in ('type HDif2.TXT')do set HDif2=%%i
复制代码


你自己参考看看吧
回复

使用道具 举报

4#
发表于 2017-11-9 16:49:31 | 只看该作者
悬赏悬赏,赶紧的
回复

使用道具 举报

5#
 楼主| 发表于 2017-11-9 17:57:46 来自手机 | 只看该作者
顶起来
回复

使用道具 举报

6#
发表于 2017-11-9 18:04:56 | 只看该作者
DsptW.vxd 0 /L >Drive.txt
回复

使用道具 举报

7#
发表于 2017-11-9 22:53:44 | 只看该作者
DsptW兼容性不如gdisk好。
回复

使用道具 举报

8#
发表于 2017-11-10 00:52:02 | 只看该作者
本帖最后由 nttwqz 于 2017-11-10 17:45 编辑

虽然我写出来了,但我觉得楼主装系统的方法实在太费劲了,直接用WinNTSetup岂不更省事?还有本坛PE或者PE生成器多得是,何必这么费劲。

只在8.1上测试了一下,一个GPT SSD、一个MBR HDD、一个MBR UPan,可正常识别EFI分区或者活动分区

话说,写个这玩意儿可真费劲,以前没研究过批处理查找活动分区及EFI分区,没人提问估计永远不会研究。

未使用第三方软件,基于diskpart实现,过程有点慢,安装光盘boot.wim自带。

已测试,XP,Win7不支持隐藏的激活分区,8.1正常

查找活动及EFI分区.7z (1 KB, 下载次数: 61)

点评

一天几百台,自动安装好点,  详情 回复 发表于 2017-11-10 11:12
回复

使用道具 举报

9#
发表于 2017-11-10 06:41:36 来自手机 | 只看该作者
拜读,受教。
回复

使用道具 举报

10#
 楼主| 发表于 2017-11-10 11:12:18 | 只看该作者
nttwqz 发表于 2017-11-10 00:52
虽然我写出来了,但我觉得楼主装系统的方法实在太费劲了,直接用WinNTSetup岂不更省事?还有本坛PE或者PE生 ...

一天几百台,自动安装好点,

点评

如果配置一样,可以硬盘对拷,更快! 还有WinNTSetup也是支持命令的,详情看帮助  详情 回复 发表于 2017-11-10 11:42
回复

使用道具 举报

11#
发表于 2017-11-10 11:42:44 来自手机 | 只看该作者
hurry307 发表于 2017-11-10 11:12
一天几百台,自动安装好点,

如果配置一样,可以硬盘对拷,更快!

还有WinNTSetup也是支持命令的,详情看帮助

点评

若是笔记本电脑或平板,也拆吗?  详情 回复 发表于 2017-11-10 12:13
回复

使用道具 举报

12#
发表于 2017-11-10 12:07:03 | 只看该作者
本帖最后由 lsfx555 于 2017-11-10 12:12 编辑

6楼的DsptW,也不错,更简单,就是兼容系统方面不是很好,楼主若是使用环境固定的,可以DsptW,简单点!

一天几百台,CMD命令全搞定自动判断硬盘个数,分区参数等,实现全自动安装或还原模板系统到目标机器上。楼主是电脑公司的吧? 以前我有用批处理做过系统备份部署平台,就是实现新机器,第一次安装好系统后,执行Ghost把模板系统和硬件配置信息一并上传到服务器端共享目录(程序自动把笔记本电脑与台式电脑的模板系统和硬件配置信息分类保存),下次再安装到类似新机器的时候,在新机器上执行此程序能自动判断服务器端上是否存在匹配此硬件主机配置的(如主板、显卡等)模板,若完全匹配则自动Ghost还原回来,若只匹配主板等其中一两项硬件则提示手动确认是否还原到目标新主机,若主板与模板系统的中主板配置不匹配,则提示平台无匹配此硬件模板系统!

当时用CMD批处理做,也是为了能在不同NT系统中执行的,关键是在PE中也能执行!
通常我们每次新到的机器安装好做成模板系统,上传存起来,下次再遇到相同或相近的配置,都是直接还原,从客户选择好机器到安装好软件备份好,不到十分钟搞定!
回复

使用道具 举报

13#
发表于 2017-11-10 12:13:50 | 只看该作者
nttwqz 发表于 2017-11-10 11:42
如果配置一样,可以硬盘对拷,更快!

还有WinNTSetup也是支持命令的,详情看帮助

若是笔记本电脑或平板,也拆吗?

点评

笔记本和平板一般都内置系统吧,我说的是批量组装机的环境,硬盘当然是可以拆下来的。 说起来还有这方面的硬件,拷的速度会更快。  详情 回复 发表于 2017-11-10 12:19
回复

使用道具 举报

14#
发表于 2017-11-10 12:19:38 来自手机 | 只看该作者
lsfx555 发表于 2017-11-10 12:13
若是笔记本电脑或平板,也拆吗?

笔记本和平板一般都内置系统吧,我说的是批量组装机的环境,硬盘当然是可以拆下来的。

说起来还有这方面的硬件,拷的速度会更快。

点评

不是所有都有内置系统的,还有部分的内置了DOS或者Linux的内核的系统,不是客户想要的!  详情 回复 发表于 2017-11-10 12:35
回复

使用道具 举报

15#
发表于 2017-11-10 12:35:14 | 只看该作者
本帖最后由 lsfx555 于 2017-11-10 12:36 编辑
nttwqz 发表于 2017-11-10 12:19
笔记本和平板一般都内置系统吧,我说的是批量组装机的环境,硬盘当然是可以拆下来的。

说起来还有这方 ...


不是所有都有内置系统的,包含台式机,还有部分的内置了DOS或者Linux的内核的系统,不是客户想要的!
回复

使用道具 举报

16#
 楼主| 发表于 2017-11-10 15:28:18 | 只看该作者
我们的机器就是特殊的,内置固态硬盘在板子上,所以必须优盘自动安装
回复

使用道具 举报

17#
 楼主| 发表于 2017-11-11 23:50:21 来自手机 | 只看该作者
盘符没刅法确定呀
回复

使用道具 举报

18#
 楼主| 发表于 2017-11-11 23:51:53 来自手机 | 只看该作者
自动分区格式化用gdisk32批处理了,就差盘符确定了,系统在优盘符不确
回复

使用道具 举报

19#
 楼主| 发表于 2017-11-18 22:51:29 来自手机 | 只看该作者
有什么方法能解决的么

点评

解决什么???  详情 回复 发表于 2017-11-18 23:10
回复

使用道具 举报

20#
发表于 2017-11-18 23:10:34 | 只看该作者
hurry307 发表于 2017-11-18 22:51
有什么方法能解决的么

解决什么???
回复

使用道具 举报

21#
 楼主| 发表于 2017-11-19 12:50:24 | 只看该作者
在吗PE命令行里,您写的批处理没有效果

点评

只有回复我的帖子我才能收到提醒 你的PE版本是? 以前测试的是8.1才能支持隐藏的激活分区。  详情 回复 发表于 2017-11-19 20:51
回复

使用道具 举报

22#
发表于 2017-11-19 20:51:46 | 只看该作者
hurry307 发表于 2017-11-19 12:50
在吗PE命令行里,您写的批处理没有效果

只有回复我的帖子我才能收到提醒

你的PE版本是?
以前测试的是8.1才能支持隐藏的激活分区。

点评

win10X64  详情 回复 发表于 2017-11-20 12:46
回复

使用道具 举报

23#
 楼主| 发表于 2017-11-20 12:46:38 | 只看该作者
nttwqz 发表于 2017-11-19 20:51
只有回复我的帖子我才能收到提醒

你的PE版本是?

win10X64

点评

光盘boot.wim中默认没有findstr,我这个批处理(无论那个版本)都大量利用了findstr一部分正则查找功能,而find是不支持正则表达式的。。。  详情 回复 发表于 2017-11-21 00:38
如图,%var%就是你要的变量 [attachimg]357053[/attachimg]  详情 回复 发表于 2017-11-21 00:11
重新写了一个,需要PE支持wmic,安装光盘中的boot.wim内置,8.1正常系统中测试通过。  详情 回复 发表于 2017-11-20 13:16
回复

使用道具 举报

24#
发表于 2017-11-20 13:16:33 | 只看该作者
本帖最后由 nttwqz 于 2017-11-21 00:03 编辑


重新写了一个,需要PE支持wmic,安装光盘中的boot.wim内置,8.1正常系统中测试通过。

查找活动及EFI分区_wmic.7z (1.14 KB, 下载次数: 15)



源代码(粘贴进来的,不保证正常运行,强烈建议下载附件

  1. @echo off
  2. title 查找活动分区及EFI分区
  3. rem 需要wmic支持,经测试Windows 7安装光盘boot.wim内置
  4. rem 自动请求以管理员权限运行
  5. reg query HKU\S-1-5-20>nul 2>nul || echo CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs" && cscript //b "%temp%\getadmin.vbs" && exit /b & del "%temp%\getadmin.vbs" /f /q>nul 2>nul
  6. rem 系统版本号判断
  7. for /f "tokens=2 delims=[" %%Q in ('ver') do for /f "tokens=2,3 delims=. " %%R in ("%%Q") do set ver=%%R%%S
  8. if %ver% lss 61 echo 应该仅支持Win7以上系统&&pause>nul&&exit

  9. ::设置是否为无盘符的活动分区或EFI分区临时分配盘符(重启后消失),开启:y

  10. set auto=

  11. setlocal enabledelayedexpansion
  12. echo;正在处理,请稍候...
  13. set n=0
  14. for /f "skip=1 tokens=2,3 delims=," %%a in ('wmic partition where "bootpartition='true'" get diskindex^,index /format:csv ^| findstr .') do (
  15.         set /a n+=1
  16.         set disk-!n!=%%a
  17.         set /a var=%%b+1
  18.         set index-!n!=!var!
  19. )

  20. for /l %%a in (1,1,!n!) do (
  21.         rem 确定EFI及活动分区盘符
  22.         (echo sel disk !disk-%%a!
  23.         echo sel part !index-%%a!
  24.         echo detail part)>"%temp%\diskpart-%%a.tmp"
  25.         for /f "tokens=4" %%b in ('diskpart /s "%temp%\diskpart-%%a.tmp" ^| findstr /r "^\*"') do (
  26.                 if exist "%%b:" (set "ltr-%%a=%%b:") else (
  27.                         set "ltr-%%a=无盘符"
  28.                         rem 当变量auto值为y时自动分配盘符
  29.                         if /i "%auto%"=="y" (
  30.                                 (echo sel disk !disk-%%a!
  31.                                 echo sel part !index-%%a!
  32.                                 echo assign
  33.                                 echo detail part)>"%temp%\dpas-%%a.tmp"
  34.                                 for /f "tokens=4" %%c in ('diskpart /s "%temp%\dpas-%%a.tmp" ^| findstr /r "^\*"') do (
  35.                                         if exist "%%c:" (set "ltr-%%a=%%c:") else (set "ltr-%%c=无法分配")
  36.                                 )
  37.                         )
  38.                 )
  39.         )
  40.         rem 清理临时文件
  41.         del /f /q "%temp%\diskpart-%%a.tmp" >nul 2>nul
  42.         del /f /q "%temp%\dpas-%%a.tmp" >nul 2>nul
  43. )

  44. cls
  45. echo;序号        磁盘        分区        盘符
  46. echo;--------------------------------
  47. for /l %%a in (1,1,!n!) do (
  48.         echo;%%a.        !disk-%%a!        !index-%%a!        !ltr-%%a!
  49. )
  50. echo;
  51. echo;请选择(序号):
  52. set /p part=
  53. echo;
  54. echo;你选择了:       
  55. echo;
  56. echo;序号        磁盘        分区        盘符
  57. echo;--------------------------------
  58. echo;%part%.        !disk-%part%!        !index-%part%!        !ltr-%part%!
  59. echo;
  60. pause
  61. exit
复制代码

点评

如果能不用wmic就更好了。有的pe不支持。  详情 回复 发表于 2017-11-20 13:26
回复

使用道具 举报

25#
发表于 2017-11-20 13:26:11 | 只看该作者
nttwqz 发表于 2017-11-20 13:16
重新写了一个,需要PE支持wmic,安装光盘中的boot.wim内置,8.1正常系统中测试通过。

如果能不用wmic就更好了。有的pe不支持。

点评

要上班了,等有空了,看能不能完全基本diskpart写一个 不过Diskpart也随着系统升级而升级了,XP 7 8.1中的是不一样的,特别是隐藏活动分区,完全基本Diskpart不知道能不能实现,兄台有没有好建议  详情 回复 发表于 2017-11-20 13:33
回复

使用道具 举报

26#
发表于 2017-11-20 13:33:03 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2017-11-20 13:34 编辑
freesoft00 发表于 2017-11-20 13:26
如果能不用wmic就更好了。有的pe不支持。


要上班了,等有空了,看能不能完全基于diskpart写一个

不过Diskpart也随着系统升级而升级了,XP 7 8.1中的是不一样的,特别是隐藏活动分区,完全基于Diskpart不知道能不能实现,兄台有没有好建议

点评

XP 就别考虑了。命令执行中有些和win7等不同,不好作为一个批处理。 基于diskpart应该可以吧。具体我也没有试过。 纯批处理正这个确实比较费劲。 可以带上gdisk+批处理或者使用au3、ahk等也行。应该处理上更灵活  详情 回复 发表于 2017-11-20 13:52
回复

使用道具 举报

27#
发表于 2017-11-20 13:52:43 | 只看该作者
nttwqz 发表于 2017-11-20 13:33
要上班了,等有空了,看能不能完全基于diskpart写一个

不过Diskpart也随着系统升级而升级了,XP 7 8 ...

XP 就别考虑了。命令执行中有些和win7等不同,不好作为一个批处理。
基于diskpart应该可以吧。具体我也没有试过。
纯批处理正这个确实比较费劲。
可以带上gdisk+批处理或者使用au3、ahk等也行。应该处理上更灵活。

点评

初步写出来了,效率有点低,已在XP、8.1、7PE、8.1PE中测试通过 需要diskpart、findstr支持,主要就用了这两个,原版光盘boot.wim中没有findstr。。。  详情 回复 发表于 2017-11-21 00:43
回复

使用道具 举报

28#
发表于 2017-11-21 00:11:48 | 只看该作者
本帖最后由 527104427 于 2017-11-21 00:22 编辑


如图,%var%就是你要的变量



获取激活分区盘符.7z (337.31 KB, 下载次数: 57)














==================================================
那个“获取激活分区盘符.exe”其实就是PECMD,源码如下(看不懂的话可以忽略):

PART list disk,&a
FORX * %&a%,&b,
{
        PART -iv=9 list disk %&b%,&c
        IFEX $%&c%<>7,
        {
                PART -phy# list part %&b%,&d
                FORX * %&d%,&e,
                {
                        PART -fill list part %&b%#%&e%,&f
                        MSTR * &g,&h=<3><-1>&f
                        IFEX $[ %&g%=1 & '%&h%'<>'*' ], TEAM WRIT -,$+0,%&h%| EXIT FILE
                }
        }
}

评分

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

查看全部评分

回复

使用道具 举报

29#
发表于 2017-11-21 00:38:42 | 只看该作者
本帖最后由 nttwqz 于 2017-11-21 00:40 编辑


光盘boot.wim中默认没有findstr,我这个批处理(无论那个版本)都大量利用了findstr一部分正则查找功能,而find是不支持正则表达式的。。。

我不确定不用findstr,只用find能不能写出来,有空了我可以试试。。。
回复

使用道具 举报

30#
发表于 2017-11-21 00:43:53 | 只看该作者
本帖最后由 nttwqz 于 2017-11-21 00:45 编辑
freesoft00 发表于 2017-11-20 13:52
XP 就别考虑了。命令执行中有些和win7等不同,不好作为一个批处理。
基于diskpart应该可以吧。具体我也 ...


初步写出来了,效率有点低,已在XP、8.1、7PE、8.1PE中测试通过,还有很大改进空间

需要diskpart、findstr支持,主要就用了这两个,原版光盘boot.wim中没有findstr。。。

查找活动及ESP分区_diskpart.zip (1.34 KB, 下载次数: 29)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-25 14:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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