hurry307 发表于 2017-11-9 11:52:46

批处理获取硬盘的激活分区

本帖最后由 hurry307 于 2017-11-9 17:11 编辑

如何用批处理获取硬盘的激活分区(就是确定cdefg那个盘时激活的分区),并且获取的值赋予自定义的变量

xxnh 发表于 2017-11-9 14:34:38

建议使用悬赏方式,很快就得到答案了!

lsfx555 发表于 2017-11-9 15:31:49

本帖最后由 lsfx555 于 2017-11-9 15:47 编辑

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

你自己参考看看吧

527104427 发表于 2017-11-9 16:49:31

悬赏悬赏,赶紧的{:2_133:}

hurry307 发表于 2017-11-9 17:57:46

顶起来

fuldho 发表于 2017-11-9 18:04:56

DsptW.vxd 0 /L >Drive.txt

freesoft00 发表于 2017-11-9 22:53:44

DsptW兼容性不如gdisk好。

nttwqz 发表于 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正常

窄口牛 发表于 2017-11-10 06:41:36

拜读,受教。

hurry307 发表于 2017-11-10 11:12:18

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

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

nttwqz 发表于 2017-11-10 11:42:44

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

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

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

lsfx555 发表于 2017-11-10 12:07:03

本帖最后由 lsfx555 于 2017-11-10 12:12 编辑

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

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

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

lsfx555 发表于 2017-11-10 12:13:50

nttwqz 发表于 2017-11-10 11:42
如果配置一样,可以硬盘对拷,更快!

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

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

nttwqz 发表于 2017-11-10 12:19:38

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

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

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

lsfx555 发表于 2017-11-10 12:35:14

本帖最后由 lsfx555 于 2017-11-10 12:36 编辑

nttwqz 发表于 2017-11-10 12:19
笔记本和平板一般都内置系统吧,我说的是批量组装机的环境,硬盘当然是可以拆下来的。

说起来还有这方 ...

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

hurry307 发表于 2017-11-10 15:28:18

我们的机器就是特殊的,内置固态硬盘在板子上,所以必须优盘自动安装

hurry307 发表于 2017-11-11 23:50:21

盘符没刅法确定呀

hurry307 发表于 2017-11-11 23:51:53

自动分区格式化用gdisk32批处理了,就差盘符确定了,系统在优盘符不确

hurry307 发表于 2017-11-18 22:51:29

有什么方法能解决的么

nttwqz 发表于 2017-11-18 23:10:34

hurry307 发表于 2017-11-18 22:51
有什么方法能解决的么

解决什么???

hurry307 发表于 2017-11-19 12:50:24

在吗PE命令行里,您写的批处理没有效果

nttwqz 发表于 2017-11-19 20:51:46

hurry307 发表于 2017-11-19 12:50
在吗PE命令行里,您写的批处理没有效果

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

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

hurry307 发表于 2017-11-20 12:46:38

nttwqz 发表于 2017-11-19 20:51
只有回复我的帖子我才能收到提醒

你的PE版本是?


win10X64

nttwqz 发表于 2017-11-20 13:16:33

本帖最后由 nttwqz 于 2017-11-21 00:03 编辑

hurry307 发表于 2017-11-20 12:46
win10X64

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





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

@echo off
title 查找活动分区及EFI分区
rem 需要wmic支持,经测试Windows 7安装光盘boot.wim内置
rem 自动请求以管理员权限运行
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
rem 系统版本号判断
for /f "tokens=2 delims=[" %%Q in ('ver') do for /f "tokens=2,3 delims=. " %%R in ("%%Q") do set ver=%%R%%S
if %ver% lss 61 echo 应该仅支持Win7以上系统&&pause>nul&&exit

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

set auto=

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

for /l %%a in (1,1,!n!) do (
        rem 确定EFI及活动分区盘符
        (echo sel disk !disk-%%a!
        echo sel part !index-%%a!
        echo detail part)>"%temp%\diskpart-%%a.tmp"
        for /f "tokens=4" %%b in ('diskpart /s "%temp%\diskpart-%%a.tmp" ^| findstr /r "^\*"') do (
                if exist "%%b:\" (set "ltr-%%a=%%b:") else (
                        set "ltr-%%a=无盘符"
                        rem 当变量auto值为y时自动分配盘符
                        if /i "%auto%"=="y" (
                                (echo sel disk !disk-%%a!
                                echo sel part !index-%%a!
                                echo assign
                                echo detail part)>"%temp%\dpas-%%a.tmp"
                                for /f "tokens=4" %%c in ('diskpart /s "%temp%\dpas-%%a.tmp" ^| findstr /r "^\*"') do (
                                        if exist "%%c:\" (set "ltr-%%a=%%c:") else (set "ltr-%%c=无法分配")
                                )
                        )
                )
        )
        rem 清理临时文件
        del /f /q "%temp%\diskpart-%%a.tmp" >nul 2>nul
        del /f /q "%temp%\dpas-%%a.tmp" >nul 2>nul
)

cls
echo;序号        磁盘        分区        盘符
echo;--------------------------------
for /l %%a in (1,1,!n!) do (
        echo;%%a.        !disk-%%a!        !index-%%a!        !ltr-%%a!
)
echo;
echo;请选择(序号):
set /p part=
echo;
echo;你选择了:       
echo;
echo;序号        磁盘        分区        盘符
echo;--------------------------------
echo;%part%.        !disk-%part%!        !index-%part%!        !ltr-%part%!
echo;
pause
exit

freesoft00 发表于 2017-11-20 13:26:11

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




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

nttwqz 发表于 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不知道能不能实现,兄台有没有好建议

freesoft00 发表于 2017-11-20 13:52:43

nttwqz 发表于 2017-11-20 13:33
要上班了,等有空了,看能不能完全基于diskpart写一个

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

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

527104427 发表于 2017-11-21 00:11:48

本帖最后由 527104427 于 2017-11-21 00:22 编辑

hurry307 发表于 2017-11-20 12:46
win10X64

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


















==================================================
那个“获取激活分区盘符.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
                }
        }
}

nttwqz 发表于 2017-11-21 00:38:42

本帖最后由 nttwqz 于 2017-11-21 00:40 编辑

hurry307 发表于 2017-11-20 12:46
win10X64

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

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

nttwqz 发表于 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。。。

页: [1] 2
查看完整版本: 批处理获取硬盘的激活分区