无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站Win To Go 极致利器(IXUNCIS固态U盘)广告联系 微信:wuyouceo QQ:184822951
查看: 597|回复: 8

[求助] 如何取bootmgr所在盘符?

[复制链接]
发表于 2022-7-6 15:07:33 | 显示全部楼层 |阅读模式
本帖最后由 VirtualHotBar 于 2022-8-4 11:23 编辑

如题,我想到的方法是用Bcdedit.exe:Legacy:


UEFI


目的是为了定位\boot或\EFI\Microsoft\Boot的绝对位置
还有更好的方法吗
发表于 2022-7-6 15:12:02 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2022-7-6 16:09:42 | 显示全部楼层
在系统下,EFI通常是隐藏引导区的,无盘符,但可用BCDBOOT直接更新引导文件,加入PE等,不需要挂载。
回复

使用道具 举报

发表于 2022-7-6 16:09:59 | 显示全部楼层
目的是为了干什么?盘符本身就不是绝对的,虽然写参数的时候是盘符,但是保存的不是盘符,因为启动阶段有盘符分配吗?肯定没有,万一变了岂不是经常无法启动
回复

使用道具 举报

发表于 2022-7-6 17:10:18 | 显示全部楼层
意思是查找启动分区的位置吧
  1. wmic os get BootDevice /value
复制代码

点评

感謝分享,學習了  详情 回复 发表于 2022-7-7 14:54
回复

使用道具 举报

发表于 2022-7-6 17:37:12 | 显示全部楼层
UEFI 启动时 ESP 分区是没有盘符的。
我用的方法是获取 HKLM\SYSTEM\CurrentControlSet\Control\FirmwareBootDevice (UEFI) 或者 HKLM\SYSTEM\CurrentControlSet\Control\SystemBootDevice (BIOS),这个是 ARC 格式路径,通过一些手段把它转化成 Volume GUID 路径就行了。
回复

使用道具 举报

发表于 2022-7-6 18:51:04 | 显示全部楼层

ChkMbrPbr.7z (1.13 MB, 下载次数: 33)
回复

使用道具 举报

发表于 2022-7-7 14:54:54 | 显示全部楼层
Bluebells 发表于 2022-7-6 17:10
意思是查找启动分区的位置吧

感謝分享,學習了
回复

使用道具 举报

发表于 2022-7-7 22:44:15 | 显示全部楼层
直接挂载 ESP 分区 , 加载到一个盘符 , 不就可以访问了!

一个批处理就搞定: 一键挂载所有ESP分区.bat

@echo off & color 0a & setlocal ENABLEDELAYEDEXPANSION

set volumeListFile=%Random%_%Random%_卷信息.txt
set 分区信息文件=%Random%_%Random%_分区信息.txt

rem 显示所有卷信息
echo list volume | diskpart >%volumeListFile%
for /f "tokens=2,3" %%a in (%volumeListFile%) do (
   for %%I in (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25) do (
      if "%%I"=="%%a" if not exist %%b: (
          (
              echo select volume %%a
              echo det part
          )>"!分区信息文件!"
          set "m_分区类型="
          set /a m_分区类型_行计数=0
          call :DiskPart文件命令 "分区信息文件" "解释分区类型"
          if /i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" EQU "!m_分区类型!" call :挂在卷号 "%%a"
      )
   )
)
( del /f /q "%volumeListFile%" )>nul 2>nul
( del /f /q "%分区信息文件%" )>nul 2>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:解释分区类型
if 2 EQU !m_分区类型_行计数! goto :eof
for /f "tokens=2 delims=:" %%a in ("!%~1!") do if "" NEQ "%%a" (
   set "m_分区类型=%%a"
   set "m_分区类型=!m_分区类型: =!"
   set /a m_分区类型_行计数=!m_分区类型_行计数! + 1
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:获取卷号的分区类型
(
     echo select volume %~1
     echo det part
)|diskpart
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:挂在卷号
(
     echo select volume %~1
     echo assign
)|diskpart
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart文件命令
rem :DiskPart文件命令 "In_Ptr"    "In_Code" "In_ptr"
rem :参数列表         文件变量名  回调标签  回调参数 "In_ptr" 字符串行变量名
if "" EQU "%~1" goto :eof
if not exist "!%~1!" goto :eof
set "DiskPart文件命令_回调标签=%~2"
if "" NEQ "%~2" if ":" NEQ "!DiskPart文件命令_回调标签:~0,1!" set "DiskPart文件命令_回调标签=:%~2"
for /f "delims=" %%a in ('DiskPart.exe /s "!%~1!"') do if "" NEQ "%%a" (
   if "" NEQ "%~2" (
      if "" EQU "%~3" (
         set "DiskPart文件命令_临时行=%%a"
         call !DiskPart文件命令_回调标签! "DiskPart文件命令_临时行"
      )
      if "" NEQ "%~3" (
         set "%~3=%%a"
         call !DiskPart文件命令_回调标签! "%~3"
      )
   )
   if "" NEQ "%%a" if "" EQU "%~2" echo %%a
   if exist "!%~1!" ( del /f /q !%~1! ) >nul 2>nul
)
if exist "!%~1!" ( del /f /q !%~1! ) >nul 2>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2022-9-27 15:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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