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

[原创] 创建本地PE批处理 抛砖引玉型概念

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
@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

发表于 2 小时前 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 2 小时前 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 1 小时前 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 1 小时前 来自手机 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 半小时前 | 显示全部楼层
此帖仅作者可见

使用道具 举报

发表于 半小时前 来自手机 | 显示全部楼层
此帖仅作者可见

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-1 12:48

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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