无忧启动论坛

标题: 怎么修复ESP分区 [打印本页]

作者: qkywan    时间: 2023-12-20 08:25
标题: 怎么修复ESP分区
昨晚用WinNTSetup v5.3.3b 在windows 10 企业版 (品牌dell,原电脑带的是家庭版,用改key的方式升级成了企业版)中创建了一个VHD,并在VHD中安装了win 8.1 ,可能是我安装的方式不对,现在系统完全进不去了,一直形成蓝屏死循环,并且是带中文提示的 什么 “收集信息”之类的,这个报错信息我现在都不确定是dell的硬件层给出的,还是win 10系统层给出的,应该不是系统层,因为没有修复之类的,dell电脑还自带了一个 SupportAssist OS Recovery,用这个修复了,也不行,请教各位大神给看看,我怀疑是ESP分区出错了,应该怎么修复
作者: szwp    时间: 2023-12-20 08:47
可以先联系一下DELL客服,报服务代码。
作者: sunlenghua    时间: 2023-12-20 08:47
估计应该只是vhd 8.1 设成默认启动项而已,在winpe里挂载esp分区(mountvol s: /s),然后查看编辑BCD,把win10设为默认启动项就可以了(或者直接运行引导修复,应该也可以修复)
作者: tanglf    时间: 2023-12-20 08:49
没遇到过



作者: 2013gjq5127465    时间: 2023-12-20 08:57
先试试修复引导吧  进pe  用工具试试看
作者: 2010经典含具    时间: 2023-12-20 08:58
搜引导修复
作者: rgfwqx@163.com    时间: 2023-12-20 09:02
这可能是DELL的PC恢复系统是它的专利,不对外示人。
作者: qkywan    时间: 2023-12-20 09:24
sunlenghua 发表于 2023-12-20 08:47
估计应该只是vhd 8.1 设成默认启动项而已,在winpe里挂载esp分区(mountvol s: /s),然后查看编辑BCD,把w ...

老兄能说得详细一些吗,  任何一个PE都可以吗?mountvol这个命令是外部命令还是cmd的内部命令?
作者: qkywan    时间: 2023-12-20 09:26
sunlenghua 发表于 2023-12-20 08:47
估计应该只是vhd 8.1 设成默认启动项而已,在winpe里挂载esp分区(mountvol s: /s),然后查看编辑BCD,把w ...

在PE中能用bootice去修复吗?,我昨天手头没有合适的PE,所以昨晚没法修复,今天来单位现制作的
作者: lmzhong    时间: 2023-12-20 09:32
引导修复应该可以
作者: 2012andyle113    时间: 2023-12-20 09:40
看你自己说的只是装了个VHD8,正常情况应该不会这样的,就是你默认启动8了,但是安装失败蓝屏了,你的所谓的启动故障更大的问题,其实是你用自带修复造成的,你真没动过其他东西的话,自带修复应该可以给你还原到初始状态,就是慢了点
你这情况其实稍微有点复杂,要现场按不同情况不同处理,会的不难,但是看你的问题,估计自己是处理不了了
作者: sunlenghua    时间: 2023-12-20 09:48
本帖最后由 sunlenghua 于 2023-12-20 09:52 编辑
qkywan 发表于 2023-12-20 09:24
老兄能说得详细一些吗,  任何一个PE都可以吗?mountvol这个命令是外部命令还是cmd的内部命令?

mountvol 是 windows 自带的命令,专门用来挂载默认ESP/EFI分区的,新内核都自带了,除非很老的PE一般都可以直接运行的,cmd里直接运行就好,(mountvol s: /s 的意思是:把EFI/ESP分区挂载为S盘),如果你用的PE没有这个命令,你可以使用其它分区工具查看EFI/ESP分区也是可以的,(比如:Diskgen自带EFI分区查看功能)

挂载EFI/ESP分区后,就可以查看修改BCD了,PE里最常见的工具应该是:BOOTICE,BCD文件应该在ESP/EFI分区的 \EFI\Microsoft\Boot 目录下面,你用BOOTICE打开查看是不是你后装的vhd8.1被设成默认启动项了,如果是,在这里修改为win10为默认启动项就行了,
*************
PE里应该有一个“引导修复”程序,上面的是手动排查问题的,引导修复程序可以自动搜索你硬盘里的win10并将其设为默认启动项,(可能修复后,要重新激活一下而矣)
*************
当然了,如果你手速够快,CMOS引导完快速按F8返回windows启动菜单,也能选择从win10启动,之后从系统里修改也是可行的。

作者: 君临唯一    时间: 2023-12-20 09:52
过来看看
作者: qkywan    时间: 2023-12-20 09:55
sunlenghua 发表于 2023-12-20 09:48
mountvol 是 windows 自带的命令,专门用来挂载默认ESP/EFI分区的,新内核都自带了,除非很老的PE一般都 ...

太感谢了!!!学到了
昨晚手头没有PE,系统又进不去,根本不能折腾,今天回去试试试,再次感谢!!!
作者: willishe    时间: 2023-12-20 10:01
学习学习。
作者: jlshnlhj    时间: 2023-12-20 10:12
先用PE启动,用BOOTICE打开硬盘BCD,查看windows 10是否是默认启动项,如果不是,则选中windows 10,上移到最上面,或点击默认。

作者: qkywan    时间: 2023-12-20 10:13
2012andyle113 发表于 2023-12-20 09:40
看你自己说的只是装了个VHD8,正常情况应该不会这样的,就是你默认启动8了,但是安装失败蓝屏了,你的所谓 ...

昨晚出的事故,当时手头没有PE,如果有PE应该可以处理
作者: qkywan    时间: 2023-12-20 10:15
jlshnlhj 发表于 2023-12-20 10:12
先用PE启动,用BOOTICE打开硬盘BCD,查看windows 10是否是默认启动项,如果不是,则选中windows 10,上移到 ...

谢谢,昨晚也是想用BOOTICE处理的,苦于只有一台电脑,又没有PE
作者: iaanqrm    时间: 2023-12-20 11:44

作者: lhc0688    时间: 2023-12-20 11:57
运行【管理工具】-【系统配置】,里面删掉多的引导项即可:



作者: cao8mm    时间: 2023-12-20 12:19
学习
作者: 610644034    时间: 2023-12-20 15:17
BCD引导重建工具.bat

@echo off &color 0a &setlocal enabledelayedexpansion

title BCD引导重建工具

echo.
echo                             BCD引导重建工具
echo.
echo  =========================================================================
set "b_当前系统所有盘符="
call :获取当前系统可识别的Windows系统盘列表 "b_当前系统所有盘符"

if "" EQU "!b_当前系统所有盘符!" (
   echo  没有找到任何的Windows系统盘符!任意键结束......
   pause>nul
   goto :eof
)

echo  输入您要修复或重建有关BCD所有引导文件的 Windows系统盘符(不带冒号)
echo  输入0 结束脚本
set "Esi_pan="
set "Edi_pan="
set /p Esi_pan=.请输入(!b_当前系统所有盘符! ):
if "0" EQU "!Esi_pan!" goto :eof

for %%a in (!b_当前系统所有盘符!) do if /i "%%a" EQU "!Esi_pan!" set "Esi_pan=%%a" & goto :确定盘符
echo  您输入的系统盘符错误!任意键结束......
pause>nul
goto :eof

:确定盘符
set "m_磁盘模式="
set "m_磁盘号="
echo.
echo  您需要修复引导的系统盘符 !Esi_pan!
echo.
call :DiskPart获取一个盘符的磁盘号和磁盘模式 "!Esi_pan!" "m_磁盘号" "m_磁盘模式"
if "" NEQ "!m_磁盘号!" if " " NEQ "!m_磁盘号!" goto :确定磁盘模式
echo  获取的磁盘号错误,没有办法重建BCD引导,任意键结束......
pause>nul
goto :eof
:确定磁盘模式
if /i "mbr" NEQ "!m_磁盘模式!" if /i "gpt" NEQ "!m_磁盘模式!" (
    echo  只有MBR或GPT模式的磁盘才可以重建BCD引导,任意键结束......
    pause>nul
    goto :eof
)
set "m_ESP分区盘符列表="
set "m_磁盘所有盘符列表="
echo  正在获取磁盘信息......
echo.
call :DiskPart获取一个磁盘号上的ESP分区盘符和所有盘符列表 "!m_磁盘号!" "m_ESP分区盘符列表" "m_磁盘所有盘符列表"
echo  您选择的系统在磁盘号 !m_磁盘号! 上 该磁盘挂载的所有盘符:!m_磁盘所有盘符列表!
:选择修复BCD引导
echo.
echo  =========================================================================
echo  您需要修复引导的系统盘符 !Esi_pan!
echo.
if /i "" NEQ "!m_ESP分区盘符列表!" (
   echo  盘符!Esi_pan! 位于磁盘号 !m_磁盘号! 上 磁盘模式为: !m_磁盘模式! 其中ESP分区盘符有:!m_ESP分区盘符列表!
)
if /i "" EQU "!m_ESP分区盘符列表!" (
   echo  盘符!Esi_pan! 位于磁盘号 !m_磁盘号! 上 磁盘模式为: !m_磁盘模式!
)
echo.
echo  请选择重建引导方式:
echo  =========================================================================
echo.
if /i "mbr" EQU "!m_磁盘模式!" echo   1.重建MBR模式的磁盘BCD引导^(推荐^)   2.重建GPT模式的磁盘BCD引导  0.退出
if /i "gpt" EQU "!m_磁盘模式!" echo   1.重建MBR模式的磁盘BCD引导   2.重建GPT模式的磁盘BCD引导^(推荐^)  0.退出
echo.
echo  =========================================================================
set /p 选择重建引导方式=.请输入选择重建引导方式:
if "1" NEQ "!选择重建引导方式!" if "2" NEQ "!选择重建引导方式!" if "0" NEQ "!选择重建引导方式!" (
    echo  您的输入有误,请重新选择......
    goto :选择修复BCD引导
)
if "0" EQU "!选择重建引导方式!" goto :eof
if "1" EQU "!选择重建引导方式!" call :重建MBR模式的磁盘BCD引导
if "2" EQU "!选择重建引导方式!" (
    if /i "gpt" EQU "!m_磁盘模式!" call :查找显示ESP分区
    if /i "mbr" EQU "!m_磁盘模式!" (
        set "Edi_pan="
        echo  请输入您需要创建 UEFI 启动BCD 的盘符^(!m_磁盘所有盘符列表! ^)
        set /p "Edi_pan=.输入^(!m_磁盘所有盘符列表! ^),回车默认!Esi_pan!盘:"
        set "确认目的盘符="
        for %%a in (!m_磁盘所有盘符列表!) do if /i "%%a" EQU "!Edi_pan!" set "确认目的盘符=!Edi_pan!"
        set "Edi_pan=!确认目的盘符!"
    )
    call :重建GPT模式的磁盘BCD引导
    echo.
)
goto :选择修复BCD引导
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:查找显示ESP分区
set "Edi_pan="
if "" EQU "!m_ESP分区盘符列表!" (
   echo  在磁盘号!m_磁盘号!里没有找到任何 ESP分区,任意键继续......
   pause>nul
   goto :eof
)
echo.
echo  =========================================================================
echo  输入您要重建UEFI启动的esp引导分区的盘符(不带冒号)
set /p Edi_pan=.请输入(!m_ESP分区盘符列表! ):
for %%a in (!m_ESP分区盘符列表!) do if /i "%%a" EQU "!Edi_pan!" set "Edi_pan=%%a" & goto :eof
set "Edi_pan="
echo  您输入的ESP分区盘符错误!任意键继续......
pause>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:重建GPT模式的磁盘BCD引导
echo.
if "" EQU "!Edi_pan!" (
    set "Edi_pan=!Esi_pan!"
    echo  您要重建UEFI启动的esp引导分区的盘符被重置默认为!Esi_pan!盘
)
if not exist !Edi_pan!:\ set "Edi_pan=!Esi_pan!"
echo  开始重建盘符 !Esi_pan! 的 !m_磁盘模式!模式的磁盘UEFI BCD引导到盘符 !Edi_pan! ......
echo  =========================================================================
bcdboot %Esi_pan%:\Windows /s %Edi_pan%: /f uefi /l zh-cn

if not exist %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi (
   copy /Y /B /V %Esi_pan%:\Windows\Boot\DVD\EFI\boot.sdi %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi >nul
)
if not exist %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi (
   copy /Y /B /V %Esi_pan%:\Windows\Boot\DVD\PCAT\boot.sdi %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi >nul
)
if not exist %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi (
   copy /Y /B /V %Esi_pan%:\Windows\System32\boot.sdi %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi >nul
)
if not exist %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi (
   copy /Y /B /V %Esi_pan%:\Windows\SysWOW64\boot.sdi %Edi_pan%:\EFI\Microsoft\Boot\boot.sdi >nul
)

if exist "%Edi_pan%:\EFI\Microsoft\Boot\zh-CN\bootmgfw.efi.mui" (
    mkdir "%Edi_pan%:\EFI\Boot\zh-CN"

    if exist "%Edi_pan%:\EFI\Boot\bootx64.efi" (
        copy /Y /B /V "%Edi_pan%:\EFI\Microsoft\Boot\zh-CN\bootmgfw.efi.mui" "%Edi_pan%:\EFI\Boot\zh-CN\bootx64.efi.mui"

        attrib -R -S -H "%Edi_pan%:\EFI\Boot\bootx64.efi"
        del /f/q "%Edi_pan%:\EFI\Boot\bootx64.efi"
        copy /Y /B /V "%Edi_pan%:\EFI\Microsoft\Boot\bootmgfw.efi" "%Edi_pan%:\EFI\Boot\bootx64.efi"
    )
    if exist "%Edi_pan%:\EFI\Boot\bootx32.efi" (
        copy /Y /B /V "%Edi_pan%:\EFI\Microsoft\Boot\zh-CN\bootmgfw.efi.mui" "%Edi_pan%:\EFI\Boot\zh-CN\bootx32.efi.mui"

        attrib -R -S -H "%Edi_pan%:\EFI\Boot\bootx32.efi"
        del /f/q "%Edi_pan%:\EFI\Boot\bootx32.efi"
        copy /Y /B /V "%Edi_pan%:\EFI\Microsoft\Boot\zh-CN\bootmgfw.efi" "%Edi_pan%:\EFI\Boot\zh-CN\bootx32.efi"
    )
)>nul 2>nul
echo.
echo  重建盘符 !Esi_pan! 的UEFI BCD引导到盘符 !Edi_pan! 完毕! ......
goto :eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:重建MBR模式的磁盘BCD引导
echo.
echo  开始重建盘符 !Esi_pan! 的 !m_磁盘模式!模式的磁盘BIOS BCD引导......
echo  =========================================================================
bcdboot %Esi_pan%:\Windows /s %Esi_pan%: /f BIOS /l zh-cn
if exist %Esi_pan%:\boot (
   if not exist %Esi_pan%:\Boot\boot.sdi (
      copy /Y /B /V %Esi_pan%:\Windows\Boot\DVD\EFI\boot.sdi %Esi_pan%:\Boot\boot.sdi >nul
   )
   if not exist %Esi_pan%:\Boot\boot.sdi (
      copy /Y /B /V %Esi_pan%:\Windows\Boot\DVD\PCAT\boot.sdi %Esi_pan%:\Boot\boot.sdi >nul
   )

   if not exist %Esi_pan%:\Boot\boot.sdi (
      copy /Y /B /V %Esi_pan%:\Windows\System32\boot.sdi %Esi_pan%:\Boot\boot.sdi >nul
   )

   if not exist %Esi_pan%:\Boot\boot.sdi (
      copy /Y /B /V %Esi_pan%:\Windows\SysWOW64\boot.sdi %Esi_pan%:\Boot\boot.sdi >nul
   )
   xcopy "%Esi_pan%:\Boot\zh-CN\*"  "%Esi_pan%:\zh-CN\*" /C/H/R/Y >nul
)
echo.
echo  重建盘符 !Esi_pan! 的 !m_磁盘模式!模式的磁盘BIOS BCD引导完毕!......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:获取当前系统可识别的Windows系统盘列表
set "b_当前系统可识别的Windows系统盘列表="
for /f "tokens=1,* delims= " %%a in ('fsutil fsinfo drives') do for %%c in ( %%b ) do (
   set "获取当前系统可识别的Windows系统盘列表_可用驱动器="
   for /f "tokens=3" %%d in ('dir /-c %%cWindows\ 2^>nul') do if "" NEQ "%%d" set "获取当前系统可识别的Windows系统盘列表_可用驱动器=%%d"
   if "" NEQ "!获取当前系统可识别的Windows系统盘列表_可用驱动器!" for /f "tokens=1 delims=:" %%d in ("%%c") do set "b_当前系统可识别的Windows系统盘列表=!b_当前系统可识别的Windows系统盘列表! %%d"
)
if "" NEQ "%~1" set "%~1=!b_当前系统可识别的Windows系统盘列表!"
if "" EQU "%~1" echo  !b_当前系统可识别的Windows系统盘列表!
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart获取一个盘符的磁盘号和磁盘模式
rem :DiskPart获取一个盘符的磁盘号和磁盘模式 "In"
rem :参数列表                               盘符

set "DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘号="
set "DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘模式=MBR"
set "DiskPart获取一个盘符的磁盘号和磁盘模式_命令文件=%Random%_%Random%"
echo Sel Vol %~1 >!DiskPart获取一个盘符的磁盘号和磁盘模式_命令文件!
echo Det Vol >>!DiskPart获取一个盘符的磁盘号和磁盘模式_命令文件!
call :DiskPart文件命令_只回调列表行 "DiskPart获取一个盘符的磁盘号和磁盘模式_命令文件" "DiskPart获取一个盘符的磁盘号和磁盘模式_001" "DiskPart获取一个盘符的磁盘号和磁盘模式_临时变量"
if "" NEQ "%~2" set "%~2=!DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘号!"
if "" EQU "%~2" if "" NEQ "!DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘号!"   echo !DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘号!
if "" NEQ "%~3" set "%~3=!DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘模式!"
if "" EQU "%~3" if "" NEQ "!DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘模式!" echo !DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘模式!
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart获取一个盘符的磁盘号和磁盘模式_001
if "" EQU "!DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘号!" for /f "tokens=3 delims= " %%a in ("!%~1!") do set "DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘号=%%a"
if "*" EQU "!%~1:~-1!" set "DiskPart获取一个盘符的磁盘号和磁盘模式_磁盘模式=GPT"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart获取一个磁盘号上的ESP分区盘符和所有盘符列表
:DiskPart获取一个磁盘号上的ESP分区盘符列表
rem :DiskPart获取一个磁盘号上的ESP分区盘符列表 "In"   ["Out_ptr"]          ["Out_ptr"]
rem :参数列表                                  磁盘号 输出ESP分区盘符列表  输出所有盘符列表
set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区列表="
set "DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP分区列表="
set "DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表="
set "DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表="
set "DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件=%Random%_%Random%"
echo Sel Disk %~1 >!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
echo List Part   >>!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
call :DiskPart文件命令_只回调列表行 "DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件" "DiskPart获取一个磁盘号上的ESP分区盘符列表_获取分区号列表" "DiskPart获取一个磁盘号上的ESP分区盘符列表_临时变量"
for %%a in (!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区列表!) do (
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型="
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符="
   echo Sel Disk %~1  >!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
   echo Sel Part %%a >>!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
   echo Det Part     >>!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
   call :DiskPart文件命令 "DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件" "DiskPart获取一个磁盘号上的ESP分区盘符列表_获取分区类型和盘符" "DiskPart获取一个磁盘号上的ESP分区盘符列表_临时变量"
   call :字符串去掉前面和后面空格 "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型"

   if /i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" EQU "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型!" (
      set "DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP分区列表=!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP分区列表! %%a"
      if "" EQU "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符!" ( call :挂载一个分区号 "%~1" "%%a" )>nul 2>nul
   )
   if /i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" NEQ "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型!" (
      if "" NEQ "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符!" (
         set "DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表=!DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表! !DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符!"
      )
   )
)
for %%a in (!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP分区列表!) do (
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型="
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符="
   echo Sel Disk %~1  >!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
   echo Sel Part %%a >>!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
   echo Det Part     >>!DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件!
   call :DiskPart文件命令 "DiskPart获取一个磁盘号上的ESP分区盘符列表_命令文件" "DiskPart获取一个磁盘号上的ESP分区盘符列表_获取分区类型和盘符" "DiskPart获取一个磁盘号上的ESP分区盘符列表_临时变量"
   if "" NEQ "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符!" (
      set "DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表=!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表! !DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符!"
   )
)
if "" NEQ "!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表!" (
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表=!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表!!DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表!"
)
if "" NEQ "%~2" set "%~2=!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表!"
if "" EQU "%~2" if "" NEQ "!DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表!" echo !DiskPart获取一个磁盘号上的ESP分区盘符列表_ESP盘符列表!
if "" NEQ "%~3" set "%~3=!DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表!"
if "" EQU "%~3" if "" NEQ "!DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表!" echo !DiskPart获取一个磁盘号上的ESP分区盘符列表_所有盘符列表!
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart获取一个磁盘号上的ESP分区盘符列表_获取分区号列表
for /f "tokens=2 delims= " %%a in ("!%~1!") do if "" NEQ "%%a" (
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区列表=!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区列表! %%a"
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart获取一个磁盘号上的ESP分区盘符列表_获取分区类型和盘符
if "-" EQU "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型!" for /f "tokens=2 delims=:" %%a in ("!%~1!") do if "" NEQ "%%a" set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型=%%a"
if "" EQU "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型!" for /f "tokens=2 delims=:" %%a in ("!%~1!") do set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区类型=-"

if "-" EQU "!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符!" (
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符=!%~1:~14,4!"
   set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符=!DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符: =!"
)
if "---" EQU "!%~1:~2,3!" set "DiskPart获取一个磁盘号上的ESP分区盘符列表_分区盘符=-"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:挂载一个分区号
if "" NEQ "%~1" if "" NEQ "%~2" (
   (
      echo select disk %~1
      echo select part %~2
      echo assign
   )|diskpart
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DiskPart卸载盘符
rem :DiskPart卸载盘符 "In"
(
   echo Sel Vol %~1
   echo ReMove
) | 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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: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"
set /a DiskPart文件命令_只回调列表行_解释行=0
for /f "delims=" %%a in ('DiskPart.exe /s "!%~1!"') do (
   set "DiskPart文件命令_只回调列表行_临时行=%%a"
   if 1 EQU !DiskPart文件命令_只回调列表行_解释行! (
      if "" NEQ "%%a" if "" NEQ "%~2" (
         if "" NEQ "%~3" (
            set "%~3=%%a"
            call !DiskPart文件命令_只回调列表行_回调标签! "%~3"
         )
         if "" EQU "%~3" call !DiskPart文件命令_只回调列表行_回调标签! "DiskPart文件命令_只回调列表行_临时行"
      )
      if "" NEQ "%%a" if "" EQU "%~2" echo %%a
   )
   if "---" EQU "!DiskPart文件命令_只回调列表行_临时行:~2,3!" set /a DiskPart文件命令_只回调列表行_解释行=!DiskPart文件命令_只回调列表行_解释行! + 1
   if exist "!%~1!" ( del /f /q !%~1! ) >nul 2>nul
)
if exist "!%~1!" ( del /f /q !%~1! ) >nul 2>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:字符串去掉前面空格
:去除字符串前面空格
rem :字符串去掉前面空格 "InOut_ptr"
if "" NEQ "%~1" if "" NEQ "!%~1!" if " " EQU "!%~1:~0,1!" set "%~1=!%~1:~1!" & goto %~0
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:字符串去掉后面空格
:去除字符串后面空格
rem :字符串去掉后面空格 "InOut_ptr"
if "" NEQ "%~1" if "" NEQ "!%~1!" if " " EQU "!%~1:~-1!" set "%~1=!%~1:~0,-1!" & goto %~0
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:字符串去掉前面和后面空格
:去除字符串前面和后面空格
rem :字符串去掉前面和后面空格 "InOut_ptr"
if "" NEQ "%~1" if "" NEQ "!%~1!" if " " EQU "!%~1:~0,1!" set "%~1=!%~1:~1!" & goto %~0
if "" NEQ "%~1" if "" NEQ "!%~1!" if " " EQU "!%~1:~-1!" set "%~1=!%~1:~0,-1!" & goto %~0
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


通常我是 BCD重建后,efi 目录如果在系统分区就从系统盘拷贝到 ESP分区 , 然后需要对 BCD文件进行少量数据修改。
作者: qkywan    时间: 2023-12-20 15:17
lhc0688 发表于 2023-12-20 11:57
运行【管理工具】-【系统配置】,里面删掉多的引导项即可:

谢谢,当时系统是进不去的,所以您给的这个方法不
现在已经处理好
作者: qkywan    时间: 2023-12-20 15:23
谢谢各位,已经处理好,就是如前面各位大神所说的,win 8.1变成了默认启动项,我在安装win8.1时, vhd文件选用的是mbr分区表格式,,虽然知道有UEFI必须配合GPT来使用,主要对VHD理解不深,以为VHD属于当前系统的下的附属系统之类的想法,所以当时选择自己以前很喜欢用的MBR,而BIOS里是UEFI的,并且用WinNTSetup安装完成之后,首选启动系统就变成了MBR分区格式的win8.1,所以导致启动不了,并形成了死循环,当时手里也没有PE,谢谢各位指导。
作者: qkywan    时间: 2023-12-20 15:26
610644034 发表于 2023-12-20 15:17
BCD引导重建工具.bat

@echo off &color 0a &setlocal enabledelayedexpansion

谢谢您的指导 ,这份代码收藏了,无忧真好!
作者: qkywan    时间: 2023-12-20 15:33
还有个意外插曲,再请教各位,我在PE里处置BCD这个文件时,因为直接用的bootice这个工具,没有给ESP分区分配盘符,所以没有找到ESP里的BCD,直接在原系统上C盘根目录下找到一个BCD文件(当时就觉得肯定不是这个文件),用BOOTICE也能打开,但里面没有多余的Win8.1启动项,后来,把ESP分配个盘符之后,才在ESP分区里面找到正确的BCD,然后编辑了一下就正常了,我想问的是,C盘下的BCD文件是做什么用的?
作者: 610644034    时间: 2023-12-20 15:50
qkywan 发表于 2023-12-20 15:26
谢谢您的指导 ,这份代码收藏了,无忧真好!

不用谢,我曾经对PE完全无知,来到无忧才得以进步,知识从哪来,回哪去而已。
作者: qq27722    时间: 2023-12-20 16:05
qkywan 发表于 2023-12-20 15:33
还有个意外插曲,再请教各位,我在PE里处置BCD这个文件时,因为直接用的bootice这个工具,没有给ESP分区分 ...

你可以这样理解。这个就是原引导备份,有问题通过bcdboot命令再把这个复制到esp里。
作者: qkywan    时间: 2023-12-20 18:45
qq27722 发表于 2023-12-20 16:05
你可以这样理解。这个就是原引导备份,有问题通过bcdboot命令再把这个复制到esp里。

多谢指教!
作者: zzzlllxyt    时间: 2023-12-21 07:09
路过……
作者: kmwger    时间: 2023-12-23 07:56
610644034 发表于 2023-12-20 15:17
BCD引导重建工具.bat

@echo off &color 0a &setlocal enabledelayedexpansion

兄弟这一段代码辛苦了。感谢分享。收藏了。
作者: temp2005    时间: 2023-12-23 08:32
lhc0688 发表于 2023-12-20 11:57
运行【管理工具】-【系统配置】,里面删掉多的引导项即可:

不知后来怎么解决的
作者: slayerwwj    时间: 2023-12-29 15:23
本帖最后由 slayerwwj 于 2023-12-29 15:26 编辑

近期这个相似问题论坛出现2次,不知是不是同一人问的。

第1次问题已经回答,不是软件的问题,是主板BIOS的安全设置问题,我用的就是DELL 主机,不改的话,不能重新安装系统,什么版本的系统都不能,当然除了DELL原机的,其他只能进PE。

一台13代的DELL主机,本人手快,进PE,删除了硬盘分区,全新安装新版的WIN11,一切顺利,重启蓝屏。反复测试手头几个版本的系统,WIN10,win8,WIN11,原版,精简版,都不行。
后来抱着试试的想法,进主板的BIOS,关闭里面一项安装选项就行,什么版本都没有问题。

具体改哪项,进BIOS,安全选项,自己判断吧,机器不在身边。

作者: hehuiying    时间: 2024-4-21 07:55
谢谢分享




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