无忧启动论坛

标题: 添加pe到硬盘 [打印本页]

作者: hilsonma    时间: 2025-3-10 13:49
标题: 添加pe到硬盘
分享一个批处理:添加pe到硬盘

  1. @echo off
  2. title 添加PE到硬盘
  3. setlocal ENABLEDELAYEDEXPANSION
  4. if %1.==. (set src=pe\boot.wim) else set src=%1
  5. set drv=c
  6. pushd %~dp0
  7. :do
  8. cls
  9. echo.
  10. echo 即将把 %src% 复制到 %drv%:\pe.wim 并添加引导
  11. echo.
  12. echo 1.确认执行 2.修改目标盘符 3.退出
  13. echo.
  14. set n=1
  15. set /p n=请输入选项并回车:
  16. goto:do%n%

  17. :do2
  18. echo.&set /p drv=请输入PE添加到的盘符:
  19. goto:do

  20. :do1
  21. if exist s: mountvol s: /d
  22. mountvol s: /s && (call :uefi) || call :bios
  23. call :chksdi
  24. call :chkwim
  25. call :bcd
  26. echo 请按任意键结束...
  27. pause>nul
  28. exit

  29. :uefi
  30.   set bd=s
  31.   set sdi=\EFI\boot.sdi
  32.   exit /b
  33. :bios
  34.   set bd=c
  35.   set sdi=\boot\boot.sdi
  36.   exit /b
  37. :chksdi
  38. if not exist %bd%:%sdi% (
  39.     if exist C:\Windows\Boot\DVD\EFI\boot.sdi (
  40.         set sdi1=C:\Windows\Boot\DVD\EFI\boot.sdi
  41.     ) else (
  42.         if exist pe\boot.sdi (
  43.             set sdi1=pe\boot.sdi
  44.         ) else (
  45.             echo.&set /p sdi1=请将boot.sdi文件拖放到本窗口后按回车键:
  46.         )
  47.     )
  48.     copy !sdi1! %bd%:%sdi%
  49. )
  50. exit /b

  51. :chkwim
  52. if not exist %drv%:\pe.wim (
  53.     if exist %src% (
  54.         set wim=%src%
  55.     ) else (
  56.         echo.&set /p wim=请将pe的wim文件拖放到本窗口后按回车键:
  57.     )
  58.     echo 复制 !wim! 到 %drv%:\pe.wim
  59.     copy !wim! %drv%:\pe.wim
  60. )
  61. exit /b

  62. :bcd
  63. if not exist %drv%:\pe.wim goto:error
  64. if not exist %bd%:%sdi% goto:error
  65. echo 添加菜单引导项
  66. set desc="Win PE"
  67. set wim=[%drv%:]\pe.wim
  68. for /f "tokens=2 delims={}" %%a in ('bcdedit /create /application osloader') do set id={%%a}
  69. bcdedit /set %id% description %desc%
  70. bcdedit /set %id% device ramdisk="%wim%,{ramdiskoptions}"
  71. bcdedit /set %id% osdevice ramdisk="%wim%,{ramdiskoptions}"
  72. bcdedit /set %id% systemroot \Windows
  73. bcdedit /set %id% detecthal 1
  74. bcdedit /set %id% winpe 1
  75. bcdedit /displayorder %id% /addlast
  76. bcdedit /timeout 3
  77. bcdedit /set {bootmgr} displaybootmenu 1
  78. bcdedit /set {bootmgr} nointegritychecks 1
  79. bcdedit /create {ramdiskoptions}
  80. bcdedit /set {ramdiskoptions} ramdisksdidevice boot
  81. bcdedit /set {ramdiskoptions} ramdisksdipath %sdi%
  82. exit /b

  83. :error
  84. ::cls
  85. echo.
  86. echo 复制文件失败,请手动复制文件 pe.wim 和 boot.sdi 到 %drv%:\pe.wim 和 %bd%:%sdi% 后按任意键继续...
  87. pause>nul
  88. goto:bcd
复制代码


添加PE到硬盘.7z (1.05 KB, 下载次数: 136)

作者: handsome_xiang    时间: 2025-3-10 13:58
谢谢共享!
作者: youxia1220    时间: 2025-3-10 15:00
谢谢分享
作者: it323    时间: 2025-3-10 15:10
感谢分享!
作者: 122996388    时间: 2025-3-10 15:13
怎么使用的??
作者: yc2428    时间: 2025-3-10 15:13
谢谢分享
作者: 小灰兔    时间: 2025-3-10 15:19
感谢楼主分享
作者: wwwlhp    时间: 2025-3-10 15:26
多谢楼主分享!!!
作者: y迎旭    时间: 2025-3-10 15:53
感谢分享!
作者: yzydys    时间: 2025-3-10 16:37
下载试用,谢谢分享。
作者: 2010sya    时间: 2025-3-10 16:38
122996388 发表于 2025-3-10 15:13
怎么使用的??

应该是“pe\boot.wim”这个位置就可以。。。

无标题.png (16.36 KB, 下载次数: 62)

无标题.png

作者: hilsonma    时间: 2025-3-10 16:45
本帖最后由 hilsonma 于 2025-3-10 21:21 编辑
2010sya 发表于 2025-3-10 16:38
应该是“pe\boot.wim”这个位置就可以。。。

不是
我这个批本来自身文件夹中还有个pe文件夹,里面有boot.wim,所以就默认了这样的wim文件
如果批所在文件夹中没有 pe\boot.wim 会提示拖放一个别的wim文件来进行的,什么位置的都可以,只要找到wim文件拖放到批处理窗口,在批处理窗口按Enter键就可以了,批脚本会将它复制成 c:\pe.wim 然后添加菜单项
请参考第4行和第57-63行

如果不想将pe.wim放在c盘,就可以选2修改成别的盘,比如efi分区或d盘等。
之所以默认c盘是因为c盘比较容易成功,不用担心efi分区没有足够空间,也不用担心d盘是逻辑分区出现启动问题。
如果efi分区空间够的话我建议放在efi分区。
作者: 进士小站    时间: 2025-3-10 17:01
感谢分享收下了
作者: 2011lanz    时间: 2025-3-10 17:05
收下了,谢谢大佬分享!
作者: jh198354    时间: 2025-3-10 17:20

谢谢分享!!!
作者: jho    时间: 2025-3-10 17:23
感谢分享!!!
作者: jnwin123    时间: 2025-3-10 17:31
本帖最后由 jnwin123 于 2025-3-10 17:32 编辑

用工具右右键直接安装PE到本地硬盘更简单

作者: Jcz777    时间: 2025-3-10 18:16
WIT挂pe挺方便的。
作者: 少马石    时间: 2025-3-10 18:16
大佬能不能做个gui界面的,方便操作
作者: abxy    时间: 2025-3-10 19:10
谢谢分享!!
作者: hilsonma    时间: 2025-3-10 19:37
少马石 发表于 2025-3-10 18:16
大佬能不能做个gui界面的,方便操作

我不懂做gui界面。
作者: lyrgcy    时间: 2025-3-10 20:09
微PE那个安装好,可以设置密码,我都是安装了,再替换PE文件
作者: wjzj    时间: 2025-3-10 20:35
这贴也要收藏,感谢分享。
作者: 2010zihan    时间: 2025-3-10 22:01
必要时很有用。
作者: 呆萌鼠    时间: 2025-3-11 08:22
非常不错,十分感谢分享!



作者: wang1126    时间: 2025-3-11 08:50
谢谢楼主分享
作者: yzydys    时间: 2025-3-12 15:47
给力!感谢楼主分享
作者: l191128    时间: 2025-3-12 16:03
感谢分享
作者: hilsonma    时间: 2025-3-13 11:05
本帖最后由 hilsonma 于 2025-3-13 11:06 编辑
122996388 发表于 2025-3-10 15:13
怎么使用的??

将想要添加的pe的wim文件拖放到批处理上来执行
批处理会将这个wim文件复制成 c:\pe.wim 并添加启动项到bcd菜单

默认第1个选项,直接按Enter键不需要输入1就会执行
如果不想放到c盘而想放到其他盘,就选2来修改盘符放到其他盘
作者: fegr    时间: 2025-3-13 15:07
谢谢分享
作者: CWJ    时间: 2025-3-13 17:01
谢谢分享,回头试试
作者: coolbrother007    时间: 2025-3-14 13:37
学到了
作者: aqq1122    时间: 2025-3-14 16:38
需要管理员权限。
作者: 花盗睡鼠    时间: 2025-3-14 20:08
https://www.123912.com/s/AkjRVv-7mQ8d
作者: qq8899399    时间: 2025-3-18 13:59
加一个卸载命令就好了。能加上不。楼主。
作者: hilsonma    时间: 2025-3-18 16:08
本帖最后由 hilsonma 于 2025-3-18 17:05 编辑
qq8899399 发表于 2025-3-18 13:59
加一个卸载命令就好了。能加上不。楼主。

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

卸载只能手工操作,因为添加启动项的时候没有做记录,批处理不好判断哪个项是之前添加的,所以做不到自动卸载。
作者: lovelyelfpop    时间: 2025-4-4 15:27
试试看看
作者: lovelyelfpop    时间: 2025-4-5 01:31
多谢,先用先得!
作者: oym2016    时间: 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




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