|
|
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
REM ========== 前置检查 ==========
set "PEWIM=%~dp0boot.wim"
set "SDIFILE=%~dp0boot.sdi"
if not exist "%PEWIM%" (echo [错误] 缺少 boot.wim & pause & exit /b)
if not exist "%SDIFILE%" (echo [错误] 缺少 boot.sdi & pause & exit /b)
openfiles >nul 2>&1 || (echo [错误] 请以管理员身份运行 & pause & exit /b)
REM ========== 图形菜单 ==========
:menu
cls
echo ==========================================
echo PE(内存盘)启动项管理
echo 当前PE路径:%~dp0
echo ==========================================
echo 1. 安装启动项(开机按 F5 进入PE)
echo 2. 卸载启动项
echo 3. 退出
echo ==========================================
set "choice="
set /p "choice=请输入选项 (1/2/3): "
if "%choice%"=="1" goto install
if "%choice%"=="2" goto uninstall
if "%choice%"=="3" exit /b
goto menu
REM ========== 安装模块 ==========
:install
bcdedit /enum | find /i "PE" >nul && (
echo [提示] 启动项“PE”已存在,无需重复安装。
pause
goto menu
)
echo 正在配置...
REM 判断固件类型
bcdedit /enum bootmgr | find /i "efi" >nul && (set "exef=efi") || (set "exef=exe")
REM 确保 {ramdiskoptions} 存在
bcdedit /enum {ramdiskoptions} >nul 2>&1 || (
bcdedit /create {ramdiskoptions} /d "Ramdisk Options"
)
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=%~d0
bcdedit /set {ramdiskoptions} ramdisksdipath %~p0boot.sdi
REM 创建启动项
for /f "tokens=2" %%i in ('bcdedit /create /d "PE" /application osloader') do set "id=%%i"
bcdedit /set %id% device ramdisk=[%~d0]%~p0boot.wim,{ramdiskoptions}
bcdedit /set %id% osdevice ramdisk=[%~d0]%~p0boot.wim,{ramdiskoptions}
bcdedit /set %id% path \Windows\System32\boot\winload.%exef%
bcdedit /set %id% systemroot \Windows
bcdedit /set %id% locale zh-CN
bcdedit /set %id% inherit {bootloadersettings}
bcdedit /set %id% bootmenupolicy Standard
bcdedit /displayorder %id% /addlast
REM 热键与无菜单启动(timeout=0)
bcdedit /timeout 0
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} customactions 0x100003f000002
bcdedit /set %id% custom:54000002 yes
echo.
echo [成功] PE安装完成!
echo [提示] 重启后按住 F5 即可进入PE,正常开机直接进入系统。
pause
goto menu
REM ========== 卸载模块 ==========
:uninstall
bcdedit /enum | find /i "PE" >nul || (
echo [提示] 未找到“PE”启动项,无需卸载。
pause
goto menu
)
echo 正在查找并删除“PE”启动项...
:deloop
bcdedit > %temp%\bcd_dump.txt
findstr /n /c:"PE" %temp%\bcd_dump.txt > nul
if errorlevel 1 goto done_del
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"PE" %temp%\bcd_dump.txt') do set "nid=%%i"
set /a nid=nid-4
if %nid% lss 1 goto done_del
for /f "skip=%nid% tokens=2" %%i in (%temp%\bcd_dump.txt) do set "id=%%i" && goto got_id
:got_id
echo [删除] 启动项 %id%
bcdedit /delete %id% >nul
REM 尝试清理关联的 ramdisk 设备(忽略错误)
set /a nid=nid+1
for /f "skip=%nid% tokens=2" %%i in (%temp%\bcd_dump.txt) do set "line=%%i" && goto parse_ram
:parse_ram
for /f "tokens=2 delims=," %%i in ("!line!") do (
bcdedit /delete %%i >nul 2>&1
)
del %temp%\bcd_dump.txt 2>nul
goto deloop
:done_del
del %temp%\bcd_dump.txt 2>nul
echo.
echo [成功] “PE”启动项已卸载。
echo [提示] boot.wim / boot.sdi 仍保留在原位,如不需要请手动删除。
pause
goto menu
|
|