无忧启动论坛

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

请问下有没有办法用批处理或者命令行小程序确定系统引导分区?

    [复制链接]
跳转到指定楼层
1#
发表于 2020-12-24 08:56:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2020-12-24 09:56 编辑

请问下有没有办法用批处理或者命令行小程序确定系统引导分区?
       有时候系统引导分区不一定是C盘,比如对于VHD系统,引导分区可能是G: H:这样子的磁盘,甚至可能没有盘符,如果当前系统是WIN7 8 10,包括BIOS和UEFI环境下,有没有好的办法确定系统的“引导分区”,并且能够自动分配盘符?如果windows有相关的命令最好,比如wmic什么的,如果没有,有没有人能够写个小程序来确定系统引导分区?希望是c/c++/delphi/au3/autohotkey之类的。有没有windows API能够搞定这个?实在不行,pecmd也行,pecmd的问题是需要过360这个烦人的坎,需要很尴尬地“面向360编程”,向别人解释没有病毒太累了。
      我所考虑的问题:
      1、BIOS下面,引导分区是活动分区,遍历活动分区没有问题,问题是有可能有多个硬盘,每个硬盘都有活动分区,活动分区里面可能都有bootmgr这样子的文件,难以区分。另外还有交叉引导的问题,即硬盘0上的引导文件引导硬盘1上的系统,硬盘1上的引导文件引导硬盘0上的系统。
      2、UEFI下面,磁盘分区可能是MBR/GPT的。
(1)对于GPT硬盘,一般来说ESP分区是引导分区,但不排除一个GPT硬盘有多个ESP分区的情况,甚至有的硬盘根本不需要ESP分区,主板原生支持NTFS,全部都是NTFS分区一样可以UEFI启动。
(2)对于MBR硬盘,引导分区可能是FAT32分区,甚至不需要FAT32分区,主板原生支持NTFS,引导分区可能是某一个NTFS分区。还有多个物理硬盘的情况,多个分区可能都会存在H:\EFI\Microsoft\Boot\bootmgfw.efi这样的文件,比较复杂。
      有没有好的办法用批处理或者命令行小程序确定这个“引导分区”?有没有“现成的”小程序或者方案,不需要“重复造轮子”的?在此先谢过了!

2#
发表于 2020-12-24 09:36:54 | 只看该作者
这个多硬盘多系统的话比较复杂,如果是存在隐藏分区的话,还得显示隐藏分区。然而有些分区格式是linux爱好者的,还有些分区id是0的隐藏分区。。。说不定一不小心显示出来就给误格式化了(win系统对不识别分区会出来格式化提示)。。。所以说如果多硬盘是比较大的一个工程。简单一点的处理就是只处理可见分区,单硬盘最简单把。
回复

使用道具 举报

3#
 楼主| 发表于 2020-12-24 09:40:15 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-24 09:41 编辑
cchessbd 发表于 2020-12-24 09:36
这个多硬盘多系统的话比较复杂,如果是存在隐藏分区的话,还得显示隐藏分区。然而有些分区格式是linux爱好 ...

确实存在如你所说的潜在隐患。只处理可见分区的话,对于vhd系统,引导分区就需要先手工分配盘符了。

点评

vhd添加到当前系统启动项无需知道启动分区 挂载VHD,比如盘符Y: bcdboot Y:\Windows /d /addlast  详情 回复 发表于 2020-12-24 22:10
回复

使用道具 举报

4#
发表于 2020-12-24 10:16:47 | 只看该作者
你这个就有点像开了多个dhcp,该从哪个dhcp启动的问题了。
不过我也想知道win是怎么知道从哪启动的。比如我在弄一启是从Grub2启动的方案

点评

有点类似  发表于 2020-12-24 11:55
回复

使用道具 举报

5#
发表于 2020-12-24 10:22:06 | 只看该作者
HKEY_LOCAL_MACHINE\SYSTEM\Setup   
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion   两个研究下看看

点评

HKEY_LOCAL_MACHINE\SYSTEM\Setup 找到了SystemPartition=\Device\HarddiskVolume6,这个不知道怎么跟盘符对应起来? HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion PathName=C:\Windows  详情 回复 发表于 2020-12-24 11:57
回复

使用道具 举报

6#
发表于 2020-12-24 11:07:32 | 只看该作者
从楼主的问题中学到了知识

点评

厉害,从问题中还能学到知识啊?!  详情 回复 发表于 2020-12-24 11:57
回复

使用道具 举报

7#
 楼主| 发表于 2020-12-24 11:57:18 | 只看该作者
23456 发表于 2020-12-24 10:22
HKEY_LOCAL_MACHINE\SYSTEM\Setup   
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion  ...

HKEY_LOCAL_MACHINE\SYSTEM\Setup
找到了SystemPartition=\Device\HarddiskVolume6,这个不知道怎么跟盘符对应起来?

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
PathName=C:\Windows
SystemRoot=C:\Windows
没有什么有价值的线索。

回复

使用道具 举报

8#
 楼主| 发表于 2020-12-24 11:57:46 | 只看该作者
ahxx 发表于 2020-12-24 11:07
从楼主的问题中学到了知识

厉害,从问题中还能学到知识啊?!
回复

使用道具 举报

9#
发表于 2020-12-24 12:46:30 | 只看该作者
Windows是可以直接从软盘映像中启动的,这个就相当于没有启动分区。对于这种情况你怎么办?

而且,这个问题主要针对MBR格式的硬盘,所谓的启动分区,一般情况下就是当前激活主分区。

对于UEFI来说,固定的就是ESP分区。

点评

从软盘映像中启动这种极端情况就不用考虑了,我只想研究下从本地硬盘启动的情况。就是bootmgr/bootmgfw.efi→windows的情况。  详情 回复 发表于 2020-12-24 13:59
回复

使用道具 举报

10#
 楼主| 发表于 2020-12-24 13:59:20 | 只看该作者
Climbing 发表于 2020-12-24 12:46
Windows是可以直接从软盘映像中启动的,这个就相当于没有启动分区。对于这种情况你怎么办?

而且,这个 ...

        从软盘映像中启动这种极端情况就不用考虑了,我只想研究下从本地硬盘启动的情况。就是bootmgr/bootmgfw.efi→windows的情况。
回复

使用道具 举报

11#
发表于 2020-12-24 17:55:35 | 只看该作者
试试
wmic partition where 'BootPartition="TRUE"' get DeviceID,BootPartition

点评

几个硬盘都是true,怎么判断?  详情 回复 发表于 2020-12-24 18:40
回复

使用道具 举报

12#
发表于 2020-12-24 18:17:04 | 只看该作者
呵呵,曾经非常迷恋vhd系统,后来写eit的时候就思考过楼主这样的问题,面对各种可能性真的让人头痛,最后还是不管了,直接由bcdboot.exe处理,如果错了再手工处理。

搭车问个问题,有没有简单的命令判断硬盘是否SSD?

点评

clonecd很早写的有个,不是很完善,对于nvme ssd,需要根据关键字“nvme”自己确定,sata ssd的话似乎可以。另外有些版本最多支持19个硬盘分区。 本人写的一个小工具,看看是否能区分移动硬盘和本地U盘(2013-1-28  详情 回复 发表于 2020-12-24 19:03
回复

使用道具 举报

13#
发表于 2020-12-24 18:20:58 来自手机 | 只看该作者
先判断到主引导是啥再说。

点评

假设主引导是bootmgr/bootmgfw.efi的话,然后呢?  详情 回复 发表于 2020-12-24 19:11
回复

使用道具 举报

14#
 楼主| 发表于 2020-12-24 18:40:15 | 只看该作者
CodeHz 发表于 2020-12-24 17:55
试试
wmic partition where 'BootPartition="TRUE"' get DeviceID,BootPartition

几个硬盘都是true,怎么判断?

QQ拼音截图20201224183905.png (17.92 KB, 下载次数: 508)

QQ拼音截图20201224183905.png
回复

使用道具 举报

15#
 楼主| 发表于 2020-12-24 19:03:52 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-24 19:09 编辑
bfgxp 发表于 2020-12-24 18:17
呵呵,曾经非常迷恋vhd系统,后来写eit的时候就思考过楼主这样的问题,面对各种可能性真的让人头痛,最后还 ...
搭车问个问题,有没有简单的命令判断硬盘是否SSD?

你为啥不重新开个帖子???
clonecd很早写的有个,不是很完善,对于nvme ssd,需要根据关键字“nvme”自己确定,sata ssd的话似乎可以。另外有些版本最多支持19个硬盘分区。
本人写的一个小工具,看看是否能区分移动硬盘和本地U盘(2013-1-28更新) - PE讨论区 - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=viewthread&tid=273557

请拥有SSD硬盘者测试CLONECD的最新DRVTYPE - PE讨论区 - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?m ... 10354&extra=&page=1

clonecd的源代码已全部丢失。

点评

谢谢版主,clonecd就你神一样,来去冲冲  发表于 2020-12-24 20:12
回复

使用道具 举报

16#
发表于 2020-12-24 19:08:51 | 只看该作者
如果楼主不嫌慢的话,dpinfo应该绰绰有余了

点评

dpinfo是什么程序?我没用过。  详情 回复 发表于 2020-12-24 19:10
回复

使用道具 举报

17#
 楼主| 发表于 2020-12-24 19:10:42 | 只看该作者
nttwqz 发表于 2020-12-24 19:08
如果楼主不嫌慢的话,dpinfo应该绰绰有余了

dpinfo是什么程序?我没用过。

点评

咳咳~批处理,处理diskpart获取的信息。  详情 回复 发表于 2020-12-24 19:13
回复

使用道具 举报

18#
 楼主| 发表于 2020-12-24 19:11:59 | 只看该作者
窄口牛 发表于 2020-12-24 18:20
先判断到主引导是啥再说。

假设主引导是bootmgr/bootmgfw.efi的话,然后呢?
回复

使用道具 举报

19#
发表于 2020-12-24 19:13:35 | 只看该作者
liuzhaoyzz 发表于 2020-12-24 19:10
dpinfo是什么程序?我没用过。

咳咳~批处理,处理diskpart获取的信息。

点评

你写的可有程序?请给我网址我看看,谢谢!  详情 回复 发表于 2020-12-24 19:43
回复

使用道具 举报

20#
发表于 2020-12-24 19:22:52 | 只看该作者
只考虑win的话wmic就行吧,那些搞自动修复引导的肯定会。

点评

wmic那个参数,能知道我当前的系统是从那个分区引导的吗? 搞引导修复的,好像引导分区也是让用户手工输入的。  详情 回复 发表于 2020-12-24 21:32
回复

使用道具 举报

21#
 楼主| 发表于 2020-12-24 19:43:08 | 只看该作者
nttwqz 发表于 2020-12-24 19:13
咳咳~批处理,处理diskpart获取的信息。

你写的可有程序?请给我网址我看看,谢谢!

点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409570 diskpart启动速度可是很慢的,你要有点心理准备。 脚本显示的信息和未显示的信息都是变量,可直接使用,末尾有注释  详情 回复 发表于 2020-12-24 20:40
回复

使用道具 举报

22#
发表于 2020-12-24 20:40:42 | 只看该作者
liuzhaoyzz 发表于 2020-12-24 19:43
你写的可有程序?请给我网址我看看,谢谢!

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409570
diskpart启动速度可是很慢的,你要有点心理准备。

脚本显示的信息和未显示的信息都是变量,可直接使用,末尾有注释

点评

速度挺快的,2秒多点。我想要的引导分区,从哪里知道?我看了导出的txt,信息量很大啊? 我想要知道的是,我当前的系统,是从哪个磁盘那个分区引导的。 dpinfo好像是遍历各个硬盘,显示分区信息?  详情 回复 发表于 2020-12-24 21:30
回复

使用道具 举报

23#
 楼主| 发表于 2020-12-24 21:30:21 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-12-24 21:33 编辑
nttwqz 发表于 2020-12-24 20:40
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409570
diskpart启动速度可是很慢的,你要有点心理 ...

速度挺快的,2秒多点。我想要的引导分区,从哪里知道?我看了导出的txt,信息量很大啊?
我想要知道的是,我当前的系统,是从哪个磁盘哪个分区引导的。
dpinfo好像是遍历各个硬盘,显示分区信息?

点评

dpinfo应该不具备直接显示当前系统是从哪个分区启动的,毕竟这个是磁盘分区信息工具。。。 不过可以遍历进行判断,我发现我这启动磁盘只有一个,哪怕插了启动U盘也是如此,不知道多硬盘都启动的是什么值,如果永  详情 回复 发表于 2020-12-24 22:04
回复

使用道具 举报

24#
 楼主| 发表于 2020-12-24 21:32:54 | 只看该作者
窄口牛 发表于 2020-12-24 19:22
只考虑win的话wmic就行吧,那些搞自动修复引导的肯定会。

wmic那个参数,能知道我当前的系统是从那个分区引导的吗?

搞引导修复的,好像引导分区也是让用户手工输入的。
回复

使用道具 举报

25#
发表于 2020-12-24 22:04:36 | 只看该作者
liuzhaoyzz 发表于 2020-12-24 21:30
速度挺快的,2秒多点。我想要的引导分区,从哪里知道?我看了导出的txt,信息量很大啊?
我想要知道的是 ...

dpinfo应该不具备直接显示当前系统是从哪个分区启动的,毕竟这个是磁盘分区信息工具。。。

不过可以遍历进行判断,我发现我这启动磁盘只有一个,哪怕插了启动U盘也是如此,不知道多硬盘都启动的是什么值,如果永远只有一个是启动磁盘,那么无非就是判断该磁盘的活动或者ESP分区。但这样还是麻烦,有更简单的办法。

bcdedit /enum {bootmgr}结果中device的值应该就是当前系统的引导分区,这个值和wmic os get bootdevice结果一致。我的bootdevice是\Device\HarddiskVolume1,不知道是不是都是这个格式,看不懂什么意思,这是磁盘第一个卷???如果是的话,那就好办了,(sel vol 1&assign)|diskpart分配格盘符就好。

点评

遍历的话,就存在我在一楼所说的那些问题,包括BIOS和UEFI下面的。 bcdedit /enum {bootmgr}的结果好像也不是系统的引导分区,应该指向的是包含windows目录那个分区,对于vhd,就是指向vhd所在的分区。  详情 回复 发表于 2020-12-25 08:13
回复

使用道具 举报

26#
发表于 2020-12-24 22:10:48 | 只看该作者
liuzhaoyzz 发表于 2020-12-24 09:40
确实存在如你所说的潜在隐患。只处理可见分区的话,对于vhd系统,引导分区就需要先手工分配盘符了。

vhd添加到当前系统启动项无需知道启动分区

挂载VHD,比如盘符Y:

bcdboot Y:\Windows /d /addlast

点评

我所使用的场景,要求给这个启动分区分配一个盘符,用于拷贝文件,不单单是修改引导分区的BCD。  详情 回复 发表于 2020-12-25 08:14
回复

使用道具 举报

27#
发表于 2020-12-24 22:33:13 来自手机 | 只看该作者
好几个人做了自动修复引导,比如蜜蜜,杏雨梨云,程祥都有自动修复引导。

点评

问题很多都是闭源的,另外不知道他们的软件是否能够确定我在一楼所说的引导分区?  详情 回复 发表于 2020-12-25 08:15
回复

使用道具 举报

28#
 楼主| 发表于 2020-12-25 08:13:49 | 只看该作者
nttwqz 发表于 2020-12-24 22:04
dpinfo应该不具备直接显示当前系统是从哪个分区启动的,毕竟这个是磁盘分区信息工具。。。

不过可以遍 ...

遍历的话,就存在我在一楼所说的那些问题,包括BIOS和UEFI下面的。
bcdedit /enum {bootmgr}的结果好像也不是系统的引导分区,应该指向的是包含windows目录那个分区,对于vhd,就是指向vhd所在的分区。

点评

我这边看了两台,一台是gpt uefi esp分区隐藏,一台是mbr uefi 活动分区隐藏,启动分区的值均正确,和Win不是一个分区  详情 回复 发表于 2020-12-25 08:39
回复

使用道具 举报

29#
 楼主| 发表于 2020-12-25 08:14:47 | 只看该作者
nttwqz 发表于 2020-12-24 22:10
vhd添加到当前系统启动项无需知道启动分区

挂载VHD,比如盘符Y:

        我所使用的场景,要求给这个启动分区分配一个盘符,用于拷贝文件,不单单是修改引导分区的BCD。

点评

目前两台启动磁盘只有一个是,这样即确定了启动磁盘又确定了启动分区,如果有多个esp(实际从未遇到)可尝试分析bcd文件(指PE环境)  详情 回复 发表于 2020-12-25 10:26
回复

使用道具 举报

30#
 楼主| 发表于 2020-12-25 08:15:36 | 只看该作者
窄口牛 发表于 2020-12-24 22:33
好几个人做了自动修复引导,比如蜜蜜,杏雨梨云,程祥都有自动修复引导。

        问题很多都是闭源的,另外不知道他们的软件是否能够确定我在一楼所说的引导分区?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 05:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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