无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
12
返回列表 发新帖
楼主: hilsonma
打印 上一主题 下一主题

[分享] 添加pe到硬盘

    [复制链接]
31#
发表于 2025-3-13 17:01:42 | 只看该作者
回复

使用道具 举报

32#
发表于 2025-3-14 13:37:56 | 只看该作者
学到了
回复

使用道具 举报

33#
发表于 2025-3-14 16:38:10 | 只看该作者
需要管理员权限。
回复

使用道具 举报

34#
发表于 2025-3-14 20:08:33 | 只看该作者
回复

使用道具 举报

35#
发表于 2025-3-18 13:59:21 | 只看该作者
加一个卸载命令就好了。能加上不。楼主。

点评

没有这个必要。因为我没有设计备份的操作,没有备份原先的启动文件,卸载我这模板后会丢失启动文件启动不了。 如果你事先有做备份,那么只要格式化fat32分区或者把该分区全部文件删除,再把备份放回去就好了。  详情 回复 发表于 2025-3-18 16:08
回复

使用道具 举报

36#
 楼主| 发表于 2025-3-18 16:08:08 | 只看该作者
本帖最后由 hilsonma 于 2025-3-18 17:05 编辑
qq8899399 发表于 2025-3-18 13:59
加一个卸载命令就好了。能加上不。楼主。

刚才回复错了,跟U盘双启模板搞混了。

卸载只能手工操作,因为添加启动项的时候没有做记录,批处理不好判断哪个项是之前添加的,所以做不到自动卸载。
回复

使用道具 举报

37#
发表于 2025-4-4 15:27:19 | 只看该作者
试试看看
回复

使用道具 举报

38#
发表于 2025-4-5 01:31:00 | 只看该作者
多谢,先用先得!
回复

使用道具 举报

39#
发表于 7 天前 | 只看该作者
本帖最后由 oym2016 于 2025-4-6 14:22 编辑

在楼主的基础上  经deepseek_r 检测

  @echo off
pushd %~dp0
title 添加PE VHD到硬盘
setlocal ENABLEDELAYEDEXPANSION

set "src=%~1"
if "%~1"=="" (echo.&set /p "src=请将PE的WIM/VHDX文件拖放到本窗口后按回车键:")
set "src=%src:"=%"
for %%a in ("%src%") do (set "fn=%%~na"&set "fx=%%~xa")

:process_drv
cls&echo.
:: 查找可用驱动器号
set "pan="
for %%i in (Q R S T U V W X Y Z) do (if not exist %%i:\ set "pan=%%i"&goto :mount_vol)
        
:mount_vol
if defined pan (
    mountvol !pan!: /s >nul 2>&1 && (
    echo "系统UEFI启动.使用ESP分区efi\microsoft\boot\BCD."
    set "bd=!pan!"
    set "sdi=\EFI\boot.sdi"
    set "ext=efi"
    set "is_efi=1"
    if /i "%fx%"==".vhdx" goto process_vhd
    echo.&set /p "drv=请输入PE添加到的盘符(回车ESP分区; C D E F... ):"
         )
) else (
    echo "非UEFI启动.使用C:盘BCD."
    set bd=C
    set "sdi=\boot\boot.sdi"
    set "ext=exe"
    set "is_efi=0"
    if /i "%fx%"==".vhdx"  goto process_vhd
)

:chksdi
if not exist "%bd%:%sdi%" (
    if exist "C:\Windows\Boot\DVD\EFI\boot.sdi" (
        set "sdi1=C:\Windows\Boot\DVD\EFI\boot.sdi"
    ) else if exist "%~dp0boot.sdi" (
        set "sdi1=%~dp0boot.sdi"
    ) else (
        echo.
        set /p "sdi1=请将boot.sdi文件拖放到本窗口后按回车键:"
        set "sdi1=!sdi1:"=!"
    )
    if exist "!sdi1!" copy "!sdi1!" "%bd%:%sdi%" >nul
)

:chkwim
if not "!drv!"=="" (
if not exist "%drv%:\sources\%fn%%fx%" (
      if not exist "%drv%:\sources" md "%drv%:\sources"
         if exist "%src%" (
           copy "%src%" "%drv%:\sources" >nul
         )   
   )
)else (     
if not exist "%bd%:\sources\%fn%%fx%" (
    if not exist "%bd%:\sources" md "%bd%:\sources"
        if exist "%src%" (
        copy "%src%" "%bd%:\sources" >nul
       )
   )
)
:bcd
if defined pan mountvol !pan!: /d >nul 2>&1
for /f "tokens=1*" %%c in ('Dism.exe /Get-ImageInfo /ImageFile:"%src%" /Index:1 ^| findstr /i "名称:"') do (
    set "desc=%%d"
)
if "!desc!"=="" set "desc=Windows PE_%fn%%fx%"
call :osid

if !is_efi! equ 1 (
    set "wim=[boot]\sources\%fn%%fx%"
    if exist !drv!: set  "wim=[%drv%:]\sources\%fn%%fx%"
    ) else (
    set "wim=[%bd%:]\sources\%fn%%fx%"
)

echo BCD_%fn%%fx%:
echo.
echo 系统存储:SystemBCD
echo 设备文件:!wim!
echo GUID    :!guid!
echo 菜单标题:!desc!
echo 启动文件:\Windows\system32\boot\winload.!ext!
echo.
pause

bcdedit /enum {ramdiskoptions} | findstr /i "boot.sdi" >nul || (
    bcdedit /create {ramdiskoptions} >nul
    bcdedit /set {ramdiskoptions} ramdisksdidevice boot >nul
    bcdedit /set {ramdiskoptions} ramdisksdipath "%sdi%" >nul
)

bcdedit /set !guid! device "ramdisk=!wim!,{ramdiskoptions}"
bcdedit /set !guid! osdevice "ramdisk=!wim!,{ramdiskoptions}"
bcdedit /set !guid! path "\Windows\system32\boot\winload.!ext!"
bcdedit /set !guid! systemroot \Windows >nul
bcdedit /set !guid! detecthal 1 >nul
bcdedit /set !guid! winpe 1 >nul
bcdedit /displayorder !guid! /addlast >nul
bcdedit /timeout 3 >nul
bcdedit /set {bootmgr} displaybootmenu 1 >nul
bcdedit /set {bootmgr} nointegritychecks 1 >nul

:end
echo 请按任意键结束...
pause >nul
if defined pan mountvol !pan!: /d >nul 2>&1
exit

:process_vhd
if defined pan mountvol !pan!: /d >nul 2>&1
set "vhd_path=%src%"
set "desc=Windows_%fn%%fx%"
call :osid
echo.
echo BCD_%fn%%fx%:
echo.
echo 系统存储:SystemBCD
echo 设备文件:"[!vhd_path:~0,2!]!vhd_path:~2!"
echo GUID     :!guid!
echo 菜单标题:!desc!
echo 启动文件:\Windows\system32\winload.!ext!
echo.
pause

bcdedit /set !guid! device "vhd=[!vhd_path:~0,2!]!vhd_path:~2!"
bcdedit /set !guid! osdevice "vhd=[!vhd_path:~0,2!]!vhd_path:~2!"
bcdedit /set !guid! path "\Windows\system32\winload.!ext!" >nul
bcdedit /set !guid! systemroot \Windows >nul
bcdedit /displayorder !guid! /addlast >nul
bcdedit /timeout 5 >nul
echo VHD启动项 [!guid!] 已创建
pause
exit

:osid
for /f "tokens=2 delims={}" %%a in ('bcdedit /create /d "%desc%" /application osloader 2^>nul') do (
    set "guid={%%a}"
    set "guid=!guid:~0,38!"
)
exit /b
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-4-13 00:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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