无忧启动论坛

标题: 如何取bootmgr所在盘符? [打印本页]

作者: VirtualHotBar    时间: 2022-7-6 15:07
标题: 如何取bootmgr所在盘符?
本帖最后由 VirtualHotBar 于 2022-8-4 11:23 编辑

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


UEFI


目的是为了定位\boot或\EFI\Microsoft\Boot的绝对位置
还有更好的方法吗

作者: 9527sss    时间: 2022-7-6 15:12
感谢分享
作者: szwp    时间: 2022-7-6 16:09
在系统下,EFI通常是隐藏引导区的,无盘符,但可用BCDBOOT直接更新引导文件,加入PE等,不需要挂载。
作者: nttwqz    时间: 2022-7-6 16:09
目的是为了干什么?盘符本身就不是绝对的,虽然写参数的时候是盘符,但是保存的不是盘符,因为启动阶段有盘符分配吗?肯定没有,万一变了岂不是经常无法启动
作者: Bluebells    时间: 2022-7-6 17:10
意思是查找启动分区的位置吧
  1. wmic os get BootDevice /value
复制代码


作者: wintoflash    时间: 2022-7-6 17:37
UEFI 启动时 ESP 分区是没有盘符的。
我用的方法是获取 HKLM\SYSTEM\CurrentControlSet\Control\FirmwareBootDevice (UEFI) 或者 HKLM\SYSTEM\CurrentControlSet\Control\SystemBootDevice (BIOS),这个是 ARC 格式路径,通过一些手段把它转化成 Volume GUID 路径就行了。

作者: 527104427    时间: 2022-7-6 18:51

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

ChkMbrPbr.exe -ChkBootDrv

ChkMbrPbr.exe -ChkBootVol




作者: 2011matrixvexx    时间: 2022-7-7 14:54
Bluebells 发表于 2022-7-6 17:10
意思是查找启动分区的位置吧

感謝分享,學習了
作者: 610644034    时间: 2022-7-7 22:44
直接挂载 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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::





欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3