无忧启动论坛

标题: 能不能用批处理添加wim启动项 [打印本页]

作者: 807979023    时间: 2018-4-5 10:46
标题: 能不能用批处理添加wim启动项
本帖最后由 807979023 于 2019-3-6 17:10 编辑

图中用bootice添加的wim启动项,pe启动成功。
请问能不能用批处理添加这个启动项?

1.jpg (103.92 KB, 下载次数: 224)

1.jpg

作者: q8155128    时间: 2018-4-5 11:06
可以.......

不过俺记不住命令.......

难得折腾......
作者: nttwqz    时间: 2018-4-5 11:10

可以.......

不过俺记懒得编写.......

懒得折腾......
作者: nttwqz    时间: 2018-4-5 11:11
批处理最重要的功能在于批量,如果你只改一两次,编个批处理没有意义。。。
作者: tt911    时间: 2018-4-5 11:13
可以是可以,但是分清哪项,别选错了,脑袋 大了。
作者: 江南一根葱    时间: 2018-4-5 12:56
可以,我写了个查找当前目录下的wim文件添加到启动菜单,win7下添加测试成功,10貌似没成功,所以搁置着
作者: 807979023    时间: 2018-4-5 13:21
江南一根葱 发表于 2018-4-5 12:56
可以,我写了个查找当前目录下的wim文件添加到启动菜单,win7下添加测试成功,10貌似没成功,所以搁置着

能不能分享一下,感觉很适用,只要是指定名称的wim都行,我只会添加xp和grldr。
作者: 永远的大象    时间: 2018-4-5 15:33
807979023 发表于 2018-4-5 13:21
能不能分享一下,感觉很适用,只要是指定名称的wim都行,我只会添加xp和grldr。

指定WIM需要添加SDI文件的信息,这是个麻烦
作者: y7y007    时间: 2018-4-5 19:23
论坛以前qiqiqicool大神的 WimRamOS_制作与热备份工具  批处理里面有这个的


  1. @ECHO OFF
  2. set bcddir=/store %SystemDrive%\boot\BCD
  3. bcdedit %bcddir% /create {ramdiskoptions} /d "Ramdisk options"
  4. bcdedit %bcddir% /set {ramdiskoptions} ramdisksdidevice "boot"
  5. bcdedit %bcddir% /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
  6. for /f "delims={,} tokens=2" %%a in ('bcdedit %bcddir% -create /d "QiRAMW7" -application osloader  ') do set ID={%%a}
  7. bcdedit %bcddir% -set %ID% device ramdisk="[boot]\boot\QiRAMW7.wim,{ramdiskoptions}"
  8. bcdedit %bcddir% -set %ID% osdevice ramdisk="[boot]\boot\QiRAMW7.wim,{ramdiskoptions}"
  9. bcdedit %bcddir% -set %ID% path \windows\system32\winload.exe
  10. bcdedit %bcddir% -set %ID% locale zh-CN
  11. bcdedit %bcddir% -set %ID% systemroot \windows
  12. bcdedit %bcddir% -set %ID% detecthal no
  13. bcdedit %bcddir% -set %ID% winpe yes
  14. bcdedit %bcddir% -set %ID% testsigning yes
  15. bcdedit %bcddir% -set %ID% nointegritychecks yes
  16. bcdedit %bcddir% -set %ID% pae forceenable
  17. bcdedit %bcddir% -displayorder %ID% -addlast
  18. pause
复制代码

作者: 江南一根葱    时间: 2018-4-5 20:27
本帖最后由 江南一根葱 于 2018-4-5 20:29 编辑
807979023 发表于 2018-4-5 13:21
能不能分享一下,感觉很适用,只要是指定名称的wim都行,我只会添加xp和grldr。


我弄得有点复杂,可以编辑下用,把批处理wim文件和boot.sdi放在同个目录下,不管wim文件名

@echo off
rem 硬盘安装Windows时,在现用系统上添加启动要安装系统的boot.wim
:: 获取管理员权限运行批处理
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" 1>nul 2>nul
exit /b
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) 1>nul 2>nul
rem 判断biosefi
:::::::::::::::::::::::::::::::::::::::::::::::::::以上是获取管理员权限运行批处理::::::::::::::::::::::::::::::::::::
set wimdriver=%~d0
::echo pe =%1
::set lj=%1
:::echo pe=%lj:~3,100%
for /f "tokens=1-3 delims=\" %%a in ('dir /b /s %~dp0\*.wim') do (
set mulu=%%b
set wimname=%%c
)

echo 你要添加的pe为%wimname%位于%wimdriver%的%mulu%目录下!
echo 请确认!!!如有误请立即马上赶紧迅速关闭此黑咕隆咚的界面。。
echo 即将在你的系统盘添加“拆”字卷标!
label %systemdrive% 拆
echo 系统卷标已经改为"拆"!
bcdedit /enum {current}|find "system32\winload.exe">nul
if errorlevel 1 echo 当前模式为efi&&timeout 8&&set bootmode=2&&goto biosefi
if errorlevel 0 echo 当前模式为bios&&timeout 8&&set bootmode=1&&goto biosefi

rem 管理者模式启动仍保持工作路径为脚本所在目录
:biosefi
cd /d "%~dp0"

set TEST_OPT=1
::::::set /p WINISODRV=请输入安装文件所在盘符(例如:F):
set winisodrv=%wimdriver%
:BM_CHOOICE
echo 请选择启动模式:
echo       1.Legacy BIOS-based 模式(MBR引导)
echo       2.UEFI-based 模式(EFI引导)

:::set /p bootmode=
if "%bootmode%"=="1" goto :BCD_EDIT
if "%bootmode%"=="2" goto :BCD_EDIT
goto :BM_CHOOICE

:BCD_EDIT
if "%bootmode%"=="1" set bootmode=LEGACY
if "%bootmode%"=="2" set bootmode=EFI

rem 指定测试选项,创建用于测试的BCD文件
if not "%TEST_OPT%"=="" (
    rem 备份当前系统BCD
    bcdedit > ".\SYS_BCD.txt"
    bcdedit /export ".\SYS_BCD.bak"
    set TMP_BCD=.\TEST_BCD
)

if not "%TEST_OPT%"=="" (
    del /f /q %TMP_BCD%
    bcdedit /createstore %TMP_BCD%
    set TEST_OPT=/store %TMP_BCD%
)

if "bootmode"=="LEGACY" goto :BCD_LEGACY
if "bootmode"=="EFI" goto :BCD_EFI

:BCD_LEGACY

echo 创建安装程序 Ramdisk 选项
bcdedit %TEST_OPT% /create {ramdiskoptions} /d "Windows 10pe远程维护平台"
bcdedit %TEST_OPT% /set {ramdiskoptions} ramdisksdidevice partition=%wimdriver%
bcdedit %TEST_OPT% /set {ramdiskoptions} ramdisksdipath \%mulu%\boot.sdi
for /f "tokens=2 delims={}" %%i in ('bcdedit %TEST_OPT% /create /d "Windows Boot" /application osloader') do (
    set LOADER_GUID={%%i}
)
echo GUID:%LOADER_GUID%
if "%LOADER_GUID%"=="" goto :ErrorExit

echo 创建Windows 启动加载器
bcdedit %TEST_OPT% /set %LOADER_GUID% device ramdisk=[%wimdriver%]\%mulu%\%wimname%,{ramdiskoptions}
:::::::::bcdedit %TEST_OPT% /set %LOADER_GUID% path \windows\system32\winload.exe
bcdedit %TEST_OPT% /set %LOADER_GUID% description "Windows 10pe远程维护平台"
bcdedit %TEST_OPT% /set %LOADER_GUID% locale zh-CN
bcdedit %TEST_OPT% /set %LOADER_GUID% inherit {bootloadersettings}
bcdedit %TEST_OPT% /set %LOADER_GUID% osdevice ramdisk=[%wimdriver%]\%mulu%\%wimname%,{ramdiskoptions}
bcdedit %TEST_OPT% /set %LOADER_GUID% systemroot \windows
bcdedit %TEST_OPT% /set %LOADER_GUID% detecthal yes
bcdedit %TEST_OPT% /set %LOADER_GUID% winpe yes
bcdedit %TEST_OPT% /set %LOADER_GUID% ems no
bcdedit %TEST_OPT% /default %LOADER_GUID%

if "%TEST_OPT%"=="" (
    bcdedit %TEST_OPT% /displayorder %LOADER_GUID% /addlast
)
goto :BCD_END

:BCD_EFI

bcdedit -store S:\EFI\Microsoft\pe\BCD -create {bootmgr} /d "Boot Manager"
bcdedit -store S:\EFI\Microsoft\pe\BCD -create {globalsettings} /d "globalsettings"
bcdedit -store S:\EFI\Microsoft\pe\BCD -create {dbgsettings} /d "debugsettings"
bcdedit -store S:\EFI\Microsoft\pe\BCD -create {ramdiskoptions} /d "ramdiskoptions"
bcdedit -store S:\EFI\Microsoft\pe\BCD -create /d "Windows PE" -application osloader

bcdedit -store S:\EFI\Microsoft\pe\BCD /default <GUID from Windows PE store>

bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} device ramdisk=[%wimdriver%]\%mulu%\%wimname%,{ramdiskoptions}
:::::::::::bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} path \windows\system32\winload.efi
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} osdevice ramdisk=[%wimdriver%]\%mulu%\%wimname%,{ramdiskoptions}
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} systemroot \windows
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} winpe yes
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} nx optin
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {Default} detecthal yes
bcdedit -store S:\EFI\Microsoft\pe\BCD -displayorder {Default} -addfirst

bcdedit -store S:\EFI\Microsoft\pe\BCD -set {dbgsettings} debugtype Serial
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {dbgsettings} debugport 1
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {dbgsettings} baudrate 115200

bcdedit -store S:\EFI\Microsoft\pe\BCD -set {ramdiskoptions} ramdisksdidevice partition=%wimdriver%
bcdedit -store S:\EFI\Microsoft\pe\BCD -set {ramdiskoptions} ramdisksdipath \%mulu%\boot.sdi

:BCD_END
if not "%TEST_OPT%"=="" (
    echo 确认添加的引导信息
    bcdedit %TEST_OPT% /enum all

    echo 确认信息无误后,按任意键将引导信息添加到系统启动菜单
   timeout 1

    set TEST_OPT=
    goto :BCD_EDIT
)
echo 添加引导信息到系统启动菜单成功
pause
exit


::::::::改自论坛和ramos群一批处理文件


作者: 807979023    时间: 2018-4-6 16:21
y7y007 发表于 2018-4-5 19:23
论坛以前qiqiqicool大神的 WimRamOS_制作与热备份工具  批处理里面有这个的

谢谢分享!能够正确添加wim启动项,但启动时0F兰屏,以后再硏究。
作者: 807979023    时间: 2018-4-6 16:22
江南一根葱 发表于 2018-4-5 20:27
我弄得有点复杂,可以编辑下用,把批处理wim文件和boot.sdi放在同个目录下,不管wim文件名

@echo of ...

谢谢分享!批处理和boot.wim和BOOT.SDI 在任意目录中运行,添加错误,运行后兰屏
               批处理和boot.wim和BOOT.SDI 拷贝到c盘boot中运行,添加成功,运行成功
              代码复杂,只能简单改一下。
作者: 807979023    时间: 2018-4-6 17:54
终于按自已的要求修改成功,感谢楼上两位提供的代码。

添加wim菜单项.bat :
  1. @echo off
  2. color 1f

  3. set aa=0
  4. if /i %SystemDrive% == x: set aa=1
  5. ver|find "5.">nul && set aa=1
  6. if "%aa%" == "1" (
  7.    cls
  8.    echo.
  9.    echo.
  10.    echo     不能在xp或PE中运行 !
  11.    echo.
  12.    echo     按任意键退出...
  13.    pause >nul
  14.    exit
  15. )

  16. copy boot.wim c:\boot
  17. copy BOOT.SDI c:\boot

  18. :: 获取管理员权限运行批处理
  19. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  20. if '%errorlevel%' NEQ '0' (
  21. goto UACPrompt
  22. ) else ( goto gotAdmin )
  23. :UACPrompt
  24. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  25. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  26. "%temp%\getadmin.vbs" 1>nul 2>nul
  27. exit /b
  28. :gotAdmin
  29. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) 1>nul 2>nul
  30. :: 以上是获取管理员权限运行批处理

  31. rem 管理者模式启动仍保持工作路径为脚本所在目录
  32. cd /d "%~dp0"

  33. echo 创建安装程序 Ramdisk 选项
  34. :: bcdedit /create {ramdiskoptions} /d "w8x32PE"
  35. bcdedit /set {ramdiskoptions} ramdisksdidevice partition=c:
  36. bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
  37. for /f "tokens=2 delims={}" %%i in ('bcdedit /create /d "Windows Boot" /application osloader') do (
  38.     set id={%%i}
  39. )

  40. echo 创建Windows 启动加载器
  41. bcdedit /set %id% device ramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
  42. bcdedit /set %id% osdevice ramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
  43. :: bcdedit /set %id% path \windows\system32\winload.exe
  44. bcdedit /set %id% description "w8x32PE"
  45. bcdedit /set %id% locale zh-CN
  46. bcdedit /set %id% inherit {bootloadersettings}
  47. bcdedit /set %id% systemroot \windows
  48. bcdedit /set %id% detecthal yes
  49. bcdedit /set %id% winpe yes
  50. bcdedit /set %id% ems no
  51. bcdedit /displayorder %id% /addlast

  52. echo 添加引导信息到系统启动菜单成功 !
  53. echo.
  54. echo 按任意键退出...
  55. pause >nul
复制代码

作者: 江南一根葱    时间: 2018-4-6 19:26
807979023 发表于 2018-4-6 16:22
谢谢分享!批处理和boot.wim和BOOT.SDI 在任意目录中运行,添加错误,运行后兰屏
               批处理 ...

嗯,应该和目录名称有关,我试过C:\pe之类的短目录可以启动  还有和wim也有关 我这儿的wim用64位可以,32位蓝屏,跟一些参数有关吧,10下貌似没成功
作者: inxiaoxi    时间: 2019-3-6 11:33
807979023 发表于 2018-4-6 17:54
终于按自已的要求修改成功,感谢楼上两位提供的代码。

添加wim菜单项.bat :

感谢感谢!成功了
作者: 807979023    时间: 2019-3-6 16:54
inxiaoxi 发表于 2019-3-6 11:33
感谢感谢!成功了

上面这个批处理第1次运行正常,删除新增启动项后,再次运行批处理报错,但启动正常,好像bcd有记忆。
后来改进一下,用当时的秒和毫秒替换id1和id2的前4个值,相当于手工设置变化的id,不再报错。
id值可随变修改,甚至可改成:
set id1={%time:~6,2%%time:~9,2%8888-8888-8888-8888-168168168ffa}
set id2={%time:~6,2%%time:~9,2%8888-8888-8888-8888-168168168ffb}

添加wim菜单项.bat
  1. @echo off
  2. color 1f
  3. echo.
  4. echo.
  5. set aa=0
  6. if /i %SystemDrive% == x: set aa=1
  7. ver|find "5.">nul && set aa=1
  8. if "%aa%" == "1" (
  9.    cls
  10.    echo.
  11.    echo.
  12.    echo     不能在xp或PE中运行 !
  13.    echo.
  14.    echo     按任意键退出...
  15.    pause >nul
  16.    exit
  17. )
  18. set id1={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffa}
  19. set id2={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffb}
  20. bcdedit /create %id2% /d "w8x32PE" /device
  21. bcdedit /set %id2% ramdisksdidevice partition=c:
  22. bcdedit /set %id2% ramdisksdipath \boot\boot.sdi
  23. echo.
  24. bcdedit /create %id1% /d "w8x32PE" /application osloader
  25. bcdedit /set %id1% device ramdisk=[c:]\boot\BOOT.WIM,%id2%
  26. bcdedit /set %id1% osdevice ramdisk=[c:]\boot\BOOT.WIM,%id2%
  27. bcdedit /set %id1% path \windows\system32\boot\winload.exe
  28. bcdedit /set %id1% description w8x32PE
  29. bcdedit /set %id1% locale zh-CN
  30. bcdedit /set %id1% inherit {bootloadersettings}
  31. bcdedit /set %id1% systemroot \windows
  32. bcdedit /set %id1% detecthal Yes
  33. bcdedit /set %id1% winpe Yes
  34. bcdedit /set %id1% ems no
  35. bcdedit /displayorder %id1% /addlast
  36. echo.
  37. echo 按任意键退出...
  38. pause >nul
复制代码


2.jpg (56.21 KB, 下载次数: 219)

2.jpg

作者: inxiaoxi    时间: 2019-3-7 11:40
嗯嗯,这是个好办法!学习了
作者: vaf    时间: 2019-3-7 11:48
木有研究过
作者: liu_zhenfeng    时间: 2019-9-12 21:15
谢谢大神们的分享!实验成了。

依据16楼的代码小改一点:

addwim.cmd

@echo off
set aa=0
if /i %SystemDrive% == x: set aa=1
ver|find "5.">nul && set aa=1
if "%aa%" == "1" (
cls&echo 不能在PE、XP中运行
ping 127.1 -n 5 >nul 2>nul&&exit ||pause&exit
)
::
if exist %SystemDrive%\boot\Win7PE\id_1 (set/p id_1=<%SystemDrive%\boot\Win7PE\id_1 )
if exist %SystemDrive%\boot\Win7PE\id_2 (set/p id_2=<%SystemDrive%\boot\Win7PE\id_2 )
bcdedit /delete %id_1% /f >nul 2>nul
bcdedit /delete %id_2% /f >nul 2>nul
::
set id1={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffa}
set id2={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffb}
bcdedit /create %id2% /d "Win7_PE" /device
bcdedit /set %id2% ramdisksdidevice partition=%SystemDrive%
bcdedit /set %id2% ramdisksdipath \boot\Win7PE\Win7_PE.sdi
::
bcdedit /create %id1% /d "Win7_PE" /application osloader
bcdedit /set %id1% device ramdisk=[%SystemDrive%]\boot\Win7PE\Win7_PE.wim,%id2%
bcdedit /set %id1% osdevice ramdisk=[%SystemDrive%]\boot\Win7PE\Win7_PE.wim,%id2%
bcdedit /set %id1% path \windows\system32\boot\winload.exe
bcdedit /set %id1% description Win7_PE
bcdedit /set %id1% locale zh-CN
bcdedit /set %id1% inherit {bootloadersettings}
bcdedit /set %id1% systemroot \windows
bcdedit /set %id1% detecthal Yes
bcdedit /set %id1% winpe Yes
bcdedit /set %id1% ems no
bcdedit /displayorder %id1% /addlast
echo %id1%>%SystemDrive%\boot\Win7PE\id_1
echo %id2%>%SystemDrive%\boot\Win7PE\id_2
::
ping 127.1 -n 10 >nul 2>nul&&exit ||pause&exit

用winrar打成自解压缩包提示找不到bcdedit命令,查了下是因默认自解包执行批处理命令是32位环境。想了个办法:将addwim.cmd压缩成64位自解包;用批处理判断是否存在SysWOW64,存在运行addwim.exe不存在运行addwim.cmd 。再将所有文件打包成32位自解包,附件里面的Win7_PE.sdi、Win7_PE.wim是空文件。


copywimfiles.cmd
@echo off
md %SystemDrive%\boot\Win7PE
copy Win7_PE.wim %SystemDrive%\boot\Win7PE
copy Win7_PE.sdi %SystemDrive%\boot\Win7PE
if exist %windir%\SysWOW64 (start addwim.exe)else (start addwim.cmd)



添加wim菜单项.7z (141.03 KB, 下载次数: 90)



作者: liu_zhenfeng    时间: 2019-9-13 12:09
本帖最后由 liu_zhenfeng 于 2019-9-13 13:53 编辑

20190913更新:临时文件方式传递wim、sdi文件名,生成删除启动项批处理。

wimPE硬盘安装模板.zip (176.44 KB, 下载次数: 100)


copywimfiles.cmd

@echo off
set aa=0
if /i %SystemDrive% == x: set aa=1
ver|find "5.">nul && set aa=1
if "%aa%" == "1" (cls&echo 不能在PE、XP中运行 &echo.&pause&exit)
::
for /f "delims=" %%i in ('dir/b *.wim')do echo %%~ni>"%temp%\wim"
for /f "delims=" %%i in ('dir/b *.sdi')do echo %%~ni>"%temp%\sdi"
set/p wim=<"%temp%\wim"
set/p sdi=<"%temp%\sdi"
::
md "%SystemDrive%\boot\%wim%"
copy "%wim%.wim" "%SystemDrive%\boot\%wim%"
del "%wim%.wim"
copy "%sdi%.sdi" "%SystemDrive%\boot\%wim%"
del "%sdi%.sdi"
if exist %windir%\SysWOW64 (start addwim.exe)else (start addwim.cmd)
if exist %windir%\SysWOW64 (del addwim.cmd)else (del addwim.exe)
echo.&echo.&echo 即将关闭窗口&timeout /t 15
del addwim.exe >nul 2>nul
del addwim.cmd >nul 2>nul
del %0




addwim.cmd

@echo off
set aa=0
if /i %SystemDrive% == x: set aa=1
ver|find "5.">nul && set aa=1
if "%aa%" == "1" (cls&echo 不能在PE、XP中运行 &echo.&pause&exit)
::
set/p wim=<"%temp%\wim"
del "%temp%\wim"
set/p sdi=<"%temp%\sdi"
del "%temp%\sdi"
::
if exist "%SystemDrive%\boot\%wim%\id_1" (set/p id_1=<"%SystemDrive%\boot\%wim%\id_1" )
if exist "%SystemDrive%\boot\%wim%\id_2" (set/p id_2=<"%SystemDrive%\boot\%wim%\id_2" )
bcdedit /delete %id_1% /f >nul 2>nul
bcdedit /delete %id_2% /f >nul 2>nul
::
set id1={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffa}
set id2={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffb}
bcdedit /create %id2% /d "%wim%" /device
bcdedit /set %id2% ramdisksdidevice partition=%SystemDrive%
bcdedit /set %id2% ramdisksdipath "\boot\%wim%\%sdi%.sdi"
::
bcdedit /create %id1% /d "%wim%" /application osloader
bcdedit /set %id1% device ramdisk="[%SystemDrive%]\boot\%wim%\%wim%.wim",%id2%
bcdedit /set %id1% osdevice ramdisk="[%SystemDrive%]\boot\%wim%\%wim%.wim",%id2%
bcdedit /set %id1% path \windows\system32\boot\winload.exe
bcdedit /set %id1% description "%wim%"
bcdedit /set %id1% locale zh-CN
bcdedit /set %id1% inherit {bootloadersettings}
bcdedit /set %id1% systemroot \windows
bcdedit /set %id1% detecthal Yes
bcdedit /set %id1% winpe Yes
bcdedit /set %id1% ems no
bcdedit /displayorder %id1% /addlast
echo %id1%>"%SystemDrive%\boot\%wim%\id_1"
echo %id2%>"%SystemDrive%\boot\%wim%\id_2"
::
echo @echo off >"%SystemDrive%\boot\DEL_%wim%.cmd"
echo bcdedit /delete %id1% >>"%SystemDrive%\boot\DEL_%wim%.cmd"
echo bcdedit /delete %id2% >>"%SystemDrive%\boot\DEL_%wim%.cmd"
echo rd /s /q "%SystemDrive%\boot\%wim%" >>"%SystemDrive%\boot\DEL_%wim%.cmd"
echo del "%SystemDrive%\boot\DEL_%wim%.cmd" >>"%SystemDrive%\boot\DEL_%wim%.cmd"
::
echo.&echo.&echo 即将关闭窗口&timeout /t 10 &del %0 &exit


作者: liu_zhenfeng    时间: 2019-9-14 23:42
20190914更新:临时文件方式传递菜单标题名,用winrar自解包功能加了个是否安装提示。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=416395

作者: czvo    时间: 2019-12-22 01:05
还是无忧论坛人才多,找了好久的批处理添加WIM,自己都试着写也还没搞定,这篇真是雪中送炭,好好研究下,用bootice每次操作都要花3分钟时间设置,好累
作者: zhang9876    时间: 2020-4-5 20:39
传统模式用这个,右击用管理员身份运行。



@echo OFF
@ECHO OFF
MD %SYSTEMDRIVE%\WinPE
copy /y "%~dp0BOOT.WIM" C:\WinPE\
copy /y "%~dp0BOOT.SDI" C:\WinPE\


bcdedit /delete {ffffffff-3600-11de-8e71-ffffffffffff} /cleanup
bcdedit /delete {ffffffff-3600-11de-8e71-fffffffffffe} /cleanup
bcdedit /create {ffffffff-3600-11de-8e71-ffffffffffff} /d "WinPE(查杀木马时可选择此项)" /device
bcdedit /create  {ffffffff-3600-11de-8e71-fffffffffffe} /d "360winpe" /application osloader
bcdedit /set {ffffffff-3600-11de-8e71-ffffffffffff} ramdisksdidevice partition=C:
bcdedit /set {ffffffff-3600-11de-8e71-ffffffffffff} ramdisksdipath \WinPE\boot.sdi
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} device                  ramdisk=[C:]\WinPE\boot.wim,{ffffffff-3600-11de-8e71-ffffffffffff}
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} path                    \windows\system32\boot\winload.exe       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} description             WinPE(查杀木马时可选择此项)               
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} locale                  en-US       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} inherit                 {bootloadersettings}               
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} osdevice                ramdisk=[C:]\WinPE\boot.wim,{ffffffff-3600-11de-8e71-ffffffffffff}       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} systemroot              \windows       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} detecthal               Yes       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} winpe                   Yes       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} ems                     no       
bcdedit /displayorder {ffffffff-3600-11de-8e71-fffffffffffe} /addlast
pause


EFI模式用下面这个,还是用管理员身份运行

@ECHO OFF
@ECHO OFF
MD %SYSTEMDRIVE%\WinPE
copy /y "%~dp0BOOT.WIM" C:\WinPE\
copy /y "%~dp0BOOT.SDI" C:\WinPE\


bcdedit /delete {ffffffff-3600-11de-8e71-ffffffffffff} /cleanup
bcdedit /delete {ffffffff-3600-11de-8e71-fffffffffffe} /cleanup
bcdedit /create {ffffffff-3600-11de-8e71-ffffffffffff} /d "WinPE(查杀木马时可选择此项)" /device
bcdedit /create  {ffffffff-3600-11de-8e71-fffffffffffe} /d "360winpe" /application osloader
bcdedit /set {ffffffff-3600-11de-8e71-ffffffffffff} ramdisksdidevice partition=C:
bcdedit /set {ffffffff-3600-11de-8e71-ffffffffffff} ramdisksdipath \WinPE\boot.sdi
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} device                  ramdisk=[C:]\WinPE\boot.wim,{ffffffff-3600-11de-8e71-ffffffffffff}
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} path                    \windows\system32\boot\winload.efi       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} description             WinPE(查杀木马时可选择此项)               
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} locale                  en-US       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} inherit                 {bootloadersettings}               
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} osdevice                ramdisk=[C:]\WinPE\boot.wim,{ffffffff-3600-11de-8e71-ffffffffffff}       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} systemroot              \windows       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} detecthal               Yes       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} winpe                   Yes       
bcdedit /set  {ffffffff-3600-11de-8e71-fffffffffffe} ems                     no       
bcdedit /displayorder {ffffffff-3600-11de-8e71-fffffffffffe} /addlast
pause
作者: wjgyz740526    时间: 2020-4-5 22:54
马克一下,没搞过efi的
作者: xbwin96e    时间: 2020-4-8 22:00
可以
作者: xbwin96e    时间: 2020-4-9 20:52

感谢分享
作者: wojinz    时间: 2020-4-25 13:40
能用批处理添加wim启动项
作者: tjxachina    时间: 2020-5-19 11:33
好东西,谢谢!
作者: 807979023    时间: 2020-5-19 17:07
小改一下,BOOT.WIM和BOOT.SDI 可以放入任意分区 任意文件夹。
id值{20200519-1646-5277-eeee-fffffffffffa} 表示该启动项添加日期是20年5月19日16点46分52.77秒。
id值绝对不会重复。

  1. @echo off&color 1f&echo.&echo.
  2. set aa=0
  3. if /i %SystemDrive% == x: set aa=1
  4. ver|find "5.">nul && set aa=1
  5. if "%aa%" == "1" cls&echo.&echo.&echo 不能在PE或XP中运行!&echo.&echo 按任意键退出...&pause>nul&exit
  6. set time1=%time%
  7. if "%time1:~0,1%"==" " set time1=0%time1:~1%
  8. set id1={%date:~0,4%%date:~5,2%%date:~8,2%-%time1:~0,2%%time1:~3,2%-%time1:~6,2%%time1:~9,2%-eeee-fffffffffffa}
  9. set id2={%date:~0,4%%date:~5,2%%date:~8,2%-%time1:~0,2%%time1:~3,2%-%time1:~6,2%%time1:~9,2%-eeee-fffffffffffb}
  10. echo.
  11. bcdedit /create %id2% /d "w8x32PE" /device
  12. bcdedit /set %id2% ramdisksdidevice partition=e:
  13. bcdedit /set %id2% ramdisksdipath \00e\boot.sdi
  14. echo.
  15. bcdedit /create %id1% /d "w8x32PE" /application osloader
  16. bcdedit /set %id1% device ramdisk=[e:]\00e\BOOT.WIM,%id2%
  17. bcdedit /set %id1% osdevice ramdisk=[e:]\00e\BOOT.WIM,%id2%
  18. bcdedit /set %id1% path \windows\system32\boot\winload.exe
  19. bcdedit /set %id1% description w8x32PE
  20. bcdedit /set %id1% locale zh-CN
  21. bcdedit /set %id1% inherit {bootloadersettings}
  22. bcdedit /set %id1% systemroot \windows
  23. bcdedit /set %id1% detecthal Yes
  24. bcdedit /set %id1% winpe Yes
  25. bcdedit /set %id1% ems no
  26. bcdedit /displayorder %id1% /addlast
  27. echo.
  28. echo 按任意键退出...
  29. pause >nul
复制代码


3.jpg (89.2 KB, 下载次数: 181)

3.jpg

作者: liuzhaoyzz    时间: 2020-5-20 07:25
807979023 发表于 2020-5-19 17:07
小改一下,BOOT.WIM和BOOT.SDI 可以放入任意分区 任意文件夹。
id值{20200519-1646-5277-eeee-fffffffffff ...

        你确定boot.sdi放在任意分区,真的在所有条件下都能启动?
作者: 2012qnmd    时间: 2020-5-20 08:32
y7y007 发表于 2018-4-5 19:23
论坛以前qiqiqicool大神的 WimRamOS_制作与热备份工具  批处理里面有这个的

这个我以前用过差不多的,win7好用

win10蓝屏,可能是缺 bcdedit /set %id1% ems no  
ems no   缺少这个参数,可能蓝屏,我以前遇到过


作者: 807979023    时间: 2020-5-20 10:04
本帖最后由 807979023 于 2020-5-20 10:13 编辑
liuzhaoyzz 发表于 2020-5-20 07:25
你确定boot.sdi放在任意分区,真的在所有条件下都能启动?

简单条件下测试通过,复杂条件下未测试,不知道,可能不行。
另外,grldr也可以放在任意分区任意文件夹,由bcd加载,同样是简单条件测试通过






作者: liuzhaoyzz    时间: 2020-5-20 12:07
本帖最后由 liuzhaoyzz 于 2020-5-20 12:10 编辑
807979023 发表于 2020-5-20 10:04
简单条件下测试通过,复杂条件下未测试,不知道,可能不行。
另外,grldr也可以放在任意分区任意文件夹 ...


        GPT分区,引导用的BCD如果在ESP分区,一般要求boot.sdi也在ESP分区,一般不可能放到“任意分区”下的。
      就是MBR分区,也是一般要求boot.sdi与bcd同一个盘符才行,否则无法启动。比如BCD放在100MB那种引导分区的话,boot.sdi好像也不能放在“任意分区”的。

这些都不算是“复杂条件”。

作者: bshd917    时间: 2020-5-20 13:53
这个我也看不懂
作者: bshd917    时间: 2020-5-20 13:53
感觉有点难度
作者: Bluebells    时间: 2020-5-20 19:54
liuzhaoyzz 发表于 2020-5-20 12:07
GPT分区,引导用的BCD如果在ESP分区,一般要求boot.sdi也在ESP分区,一般不可能放到“任意分区 ...

UEFI 引导 + GPT 分区样式,标准的 Windows 引导,其 BCD 都是在 ESP 分区吧,但 BOOT.SDI 不在 ESP 分区也可以引导 WIM 引导映像的
作者: liuzhaoyzz    时间: 2020-5-20 21:53
Bluebells 发表于 2020-5-20 19:54
UEFI 引导 + GPT 分区样式,标准的 Windows 引导,其 BCD 都是在 ESP 分区吧,但 BOOT.SDI 不在 ESP 分区 ...

        我记不清倒底是什么场景了,总之boot.sdi放在启动分区绝对要比随便放在某个分区,然后在BCD中指定目录要稳定很多,而且就是很寻常的场景。
作者: 1018438419    时间: 2020-10-6 14:03
C:\Windows\system32>bcdedit /?

BCDEDIT - 启动配置数据存储编辑器

Bcdedit.exe 命令行工具用于修改启动配置数据存储。
启动配置数据存储包含启动配置参数并
控制操作系统的启动方式。这些参数以前
位于 Boot.ini 文件中(在基于 BIOS 的操作系统中)或位于非易失性 RAM 项中
(在基于可扩展固件接口的操作系统中)。可以
使用 Bcdedit.exe 在启动配置数据存储中
添加、删除、编辑和附加项。

有关命令和选项的详细信息,请键入 bcdedit.exe /? <command>。例
如,若要显示有关 /createstore 命令的详细信息,请键入:

     bcdedit.exe /? /createstore

有关本帮助文件中按字母顺序排列的主题列表,请运行 "bcdedit /? TOPICS"。

对存储执行的命令
================================
/store          用于指定当前系统默认值以外的 BCD 存储。
/createstore    新建空的启动配置数据存储。
/export         将系统存储的内容导出到文件。以后
                可以使用该文件还原系统存储的状态。
/import         使用 /export 命令创建的备份文件来还原
系统存储的状态。
/sysstore       设置系统存储设备(仅影响 EFI 系统,在重新启动后不再保留,
               且仅用于系统存储
                设备不确定的情况下)。

对存储中的项执行的命令
===========================================
/copy           复制存储中的项。
/create         在存储中创建新项。
/delete         删除存储中的项。
/mirror         创建存储中项的镜像。

运行 bcdedit /? ID 可获得有关这些命令使用的标识符的信息。

对项选项执行的命令
======================================
/deletevalue    删除存储中的项选项。
/set            设置存储中的项选项值。

运行 bcdedit /? TYPES 可获得这些命令使用的数据类型的列表。
运行 bcdedit /? FORMATS 可获得有效数据格式的列表。

控制输出的命令
============================
/enum           列出存储中的项。
/v              命令行选项,完整显示项标识符,
                而不是使用已知标识符的名称。
                单独使用命令 /v 可完整
                显示 ACTIVE 类型的项标识符。

单独运行 "bcdedit" 等同于运行 "bcdedit /enum ACTIVE"。

控制启动管理器的命令
======================================
/bootsequence   为启动管理器设置一次性启动序列。
/default        设置启动管理器将使用的默认项。
/displayorder   设置启动管理器显示
                多重启动菜单的顺序。
/timeout        设置启动管理器的超时值。
/toolsdisplayorder  设置启动管理器显示工具
                    菜单的顺序。

控制启动应用程序紧急管理服务的命令
==========================================================================
/bootems        启用或禁用启动应用程序的
                紧急管理服务。
/ems            启用或禁用操作系统项的
                紧急管理服务。
/emssettings    设置全局紧急管理服务参数。

控制调试的命令
==============================
/bootdebug      启用或禁用启动应用程序的启动调试。
/dbgsettings    设置全局调试程序参数。
/debug          启用或禁用操作系统项的内核
                调试。
/hypervisorsettings  设置虚拟机监控程序的参数。

控制远程事件日志记录的命令
=========================================
/eventsettings  设置全局远程事件日志记录参数。
/event          启用或禁用操作系统项的远程
                事件日志记录。
作者: 阿咏    时间: 2021-3-1 18:02
批处理添加wim启动项
作者: wsan5420    时间: 2021-5-16 01:38
精彩!非常感谢分享
作者: gmy    时间: 2021-9-21 10:30
加精,欢迎更多人讨论。
作者: wjgyz740526    时间: 2021-9-21 11:52
看我发的帖子
作者: nttwqz    时间: 2021-9-21 13:14
gmy 发表于 2021-9-21 10:30
加精,欢迎更多人讨论。

版主是不是喝了十斤二锅头?

像GRUB4DOS for UEFI这样需要编程实现的帖子都不是精华,本帖何以配的上精华二字?
作者: gmy    时间: 2021-9-22 14:27
wjgyz740526 发表于 2021-9-21 11:52
看我发的帖子

是这个帖子吗?http://bbs.wuyou.net/forum.php?mod=viewthread&tid=426642

作者: gmy    时间: 2021-9-22 14:32
nttwqz 发表于 2021-9-21 13:14
版主是不是喝了十斤二锅头?

像GRUB4DOS for UEFI这样需要编程实现的帖子都不是精华,本帖何以配的上 ...

实现的方法不一样吧?
作者: 610644034    时间: 2021-10-16 22:42
一直用自己的脚本,自己想怎样都行!
@echo off
setlocal enabledelayedexpansion
::CMD窗口字体绿色
title %~n0
color 0a

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set "m_脚本标题=%~n0"
set "m_BCD文件=%~1"
set "m_BCD文件命令="
set "m_本地脚本文件名=%~0"
set "m_脚本文件名=%~nx0"
set "m_BCD文件有效="
set "m_BCD文件启动类型="
set /a m_BCD文件启动项计数=0
set "m_BCD文件启动类型_MBR="
set "m_BCD文件启动类型_EFI="

set "m_主功能菜单行1=D.删除启动项   R.添加到启动目录   P.修改启动项名      Q.删除项数值"
set "m_主功能菜单行2=S.修改项数值   H.设置默认启动项   T.设置启动项超时    A.添加一个数值"
set "m_主功能菜单行3=M.关闭驱动数字证书检测程序        G.全部关闭驱动数字证书检测程序"
set "m_主功能菜单行4=N.打开驱动数字证书检测程序        F.全部打开驱动数字证书检测程序"
set "m_主功能菜单行5=C.添加一个系统分区的启动项        W.添加WinPE或WinRE启动项"
set "m_主功能菜单行6=V.添加一个VHD文件启动项           L.文本查看数据"
set "m_主功能菜单行7=B.创建一个基本BCD文件             E.退出              Z.注册表校验"
set "m_主功能菜单行8=X.添加NTLDR启动项或实模式启动项"

set "m_选择主功能项="
set "m_主功能菜单标签="

set /a m_当前选择的启动项索引号=0
set "m_当前选择的启动项ID="
set "m_当前选择的启动项启动项名="
set /a m_当前选择的启动项启动数值计数=0
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rem 安装脚本
set "m_命令临时数据=%~1"
if /i " " EQU "!m_命令临时数据:~0,1!" goto :安装本地脚本右键功能
if /i "*" EQU "!m_命令临时数据:~0,1!" goto :安装本地脚本右键功能
if /i "?" EQU "!m_命令临时数据:~0,1!" goto :安装本地脚本右键功能
if /i "|" EQU "!m_命令临时数据:~0,1!" goto :安装本地脚本右键功能
call :安装本地脚本右键功能
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mode con:  cols=130
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if "" EQU "!m_BCD文件!" call :选择BCD文件
if "" EQU "!m_BCD文件!" goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
call :脚本顶层标题
if exist "!m_BCD文件!" (
   call :判断有效的BCD文件 "!m_BCD文件!" "m_BCD文件有效"
   if "" EQU "!m_BCD文件有效!" (
      echo  *****您选择了无效的BCD文件:!m_BCD文件!
      echo.
      echo  任意键结束......
      pause>nul
      goto :eof
   )
)
if " " EQU "!m_BCD文件:~0,1!" set "m_BCD文件= "
if exist "!m_BCD文件!" set m_BCD文件命令=/store "!m_BCD文件!"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:全局循环CODE

set "m_选择主功能项="
set "m_主功能菜单标签="

set /a m_当前选择的启动项索引号=0
set "m_当前选择的启动项ID="
set "m_当前选择的启动项启动项名="
set /a m_当前选择的启动项启动数值计数=0

call :脚本顶层标题
set "m_BCD文件启动类型="
call :获取BCD文件的启动类型 "!m_BCD文件!" "m_BCD文件启动类型"
if "" EQU "!m_BCD文件启动类型!" (
   if " " EQU "!m_BCD文件!" echo  *****无法获取当前系统的启动类型是MBR还是EFI*****
   if " " NEQ "!m_BCD文件!" (
      echo  *****您选择的BCD文件:!m_BCD文件!
      echo  *****无法获取启动类型是MBR还是EFI*****
   )
   echo.
   echo  任意键结束......
   pause>nul
   goto :eof
)
for %%a in (!m_BCD文件启动类型!) do (
   if /i "mbr" EQU "%%a" set "m_BCD文件启动类型_MBR=MBR"
   if /i "efi" EQU "%%a" set "m_BCD文件启动类型_EFI=EFI"
)
call :显示BCD基本信息
call :加载BCD信息
call :显示主菜单

set "m_主功能菜单标签="
set "m_选择主功能项="
set /p m_选择主功能项=.请选择键入主功能项前面字母(不区分大小写):

if /i "E" EQU "!m_选择主功能项!" (
    if exist "!m_BCD文件!" call :注册表日志文件文件清除 "!m_BCD文件!"
    goto :eof
)
call :显示选择主功能操作 "您选择了:"
if "" EQU "!m_选择主功能项!" (
   echo  您的选择有误,任意键返回主菜单......
   pause>nul
   goto :全局循环CODE
)
if "" NEQ "!m_主功能菜单标签!" (
   call :标签_!m_主功能菜单标签!
   call :注册表日志文件文件清除 "!m_BCD文件!"
)
pause>nul
goto :全局循环CODE
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_注册表校验
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  注册表校验运行完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_注册表校验
if not exist "%~1" goto :eof
set "主功能_注册表校验_注册表名=%Random%_%Random%"
( Reg Load "HKEY_LOCAL_MACHINE\!主功能_注册表校验_注册表名!" "%~1" )>nul 2>nul
( Reg UnLoad "HKEY_LOCAL_MACHINE\!主功能_注册表校验_注册表名!" )>nul 2>nul
call :注册表日志文件文件清除 "%~1"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_删除启动项
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
echo.
echo  正在删除 第 !m_当前选择的启动项索引号! 项ID !m_当前选择的启动项ID!
bcdedit %m_BCD文件命令% /delete !m_当前选择的启动项ID! /f
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo.
echo  项目删除指令运行完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_添加到启动目录
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
echo.
echo  正在添加 第 !m_当前选择的启动项索引号! 项ID !m_当前选择的启动项ID!
bcdedit %m_BCD文件命令% /displayorder !m_当前选择的启动项ID! /addlast
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo.
echo  添加到启动目录完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_设置默认启动项
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
echo.
echo  正在设置为默认启动项 于 第 !m_当前选择的启动项索引号! 项ID !m_当前选择的启动项ID!
bcdedit %m_BCD文件命令% /default !m_当前选择的启动项ID!
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo.
echo  正在设置为默认启动项完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_修改启动项名
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
set "修改前的启动项名=!m_当前选择的启动项启动项名!"
echo.
echo  当前启动项名:!修改前的启动项名!
echo.
set "修改后的启动项名=!修改前的启动项名!"
set /p 修改后的启动项名=.请输入您要的新启动项名(回车默认原来的启动项名不做修改):
if "!修改前的启动项名!" NEQ "!修改后的启动项名!" (
   bcdedit %m_BCD文件命令% /set !m_当前选择的启动项ID! description "!修改后的启动项名!"
   echo.
)
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  修改启动项名 完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_删除项数值
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
call :显示当前启动项的详细数值
echo.
echo  请输入您要删除的数值索引号
set /a 标签_删除项数值_选中数值索引号=0
set /p 标签_删除项数值_选中数值索引号=.数值索引号:
set "标签_删除项数值_索引号确认="
for /l %%i in ( 1 1 !m_当前选择的启动项启动数值计数! ) do if "%%i" EQU "!标签_删除项数值_选中数值索引号!" set "标签_删除项数值_索引号确认=1"
if "" EQU "!标签_删除项数值_索引号确认!" (
   echo.
   echo  您选择了不合法的选中数值索引号:!标签_删除项数值_选中数值索引号!
   echo  任意键返回主菜单......
   goto :eof
)
call :显示当前启动项的详细数值 "!标签_删除项数值_选中数值索引号!" "标签_删除项数值_001"
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  删除项数值 完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::
:标签_删除项数值_001
for /f "tokens=1,2 delims= " %%a in ("%~1") do (
   echo.
   echo  正在删除数值名:%%a 的值.......
   bcdedit %m_BCD文件命令% /deletevalue !m_当前选择的启动项ID! %%a
   echo.
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_修改项数值
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
call :显示当前启动项的详细数值
echo.
echo  请输入您要修改的数值索引号
set /a 标签_修改项数值_选中数值索引号=0
set /p 标签_修改项数值_选中数值索引号=.数值索引号:
set "标签_修改项数值_索引号确认="
for /l %%i in ( 1 1 !m_当前选择的启动项启动数值计数! ) do if "%%i" EQU "!标签_修改项数值_选中数值索引号!" set "标签_修改项数值_索引号确认=1"
if "" EQU "!标签_修改项数值_索引号确认!" (
   echo.
   echo  您选择了不合法的选中数值索引号:!标签_修改项数值_选中数值索引号!
   echo  任意键返回主菜单......
   goto :eof
)
call :显示当前启动项的详细数值 "!标签_修改项数值_选中数值索引号!" "标签_修改项数值_001"
echo.
echo  修改项数值 完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::
:标签_修改项数值_001
set "标签_修改项数值_001_整体数据=%~1"
set "标签_修改项数值_001_数据名="
set "标签_修改项数值_001_数据值="
call :标签_修改项数值_获取数据值 "标签_修改项数值_001_整体数据" "标签_修改项数值_001_数据名" "标签_修改项数值_001_数据值"
echo.
echo  开始修改数值名: !标签_修改项数值_001_数据名! 的数值......
echo  该数据原来数据为: !标签_修改项数值_001_数据值!
echo.
set "修改后的数值=!标签_修改项数值_001_数据值!"
set /p 修改后的数值=.请输入您当前要修改的数值(回车默认不修改):
if "!标签_修改项数值_001_数据值!" NEQ "!修改后的数值!" (
   echo.
   echo  正在修改 !标签_修改项数值_001_数据名! 的值为: !修改后的数值!
   bcdedit %m_BCD文件命令% /set !m_当前选择的启动项ID! !标签_修改项数值_001_数据名! "!修改后的数值!"
   echo.
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::
:标签_修改项数值_获取数据值
set "标签_修改项数值_获取数据值_1=!%~1!"
set "标签_修改项数值_获取数据值_2="
if "" NEQ "%~2" set "%~2="
if "" NEQ "%~3" set "%~3="
for /f "tokens=1,2 delims= " %%a in ("!标签_修改项数值_获取数据值_1!") do if "" NEQ "%~2" set "%~2=%%a"
for /l %%i in ( 0 1 99 ) do (
   if " " EQU "!标签_修改项数值_获取数据值_1:~%%i,1!" (
      set "标签_修改项数值_获取数据值_2=!标签_修改项数值_获取数据值_1:~%%i!"
      goto :标签_修改项数值_获取数据值_001
   )
)
:标签_修改项数值_获取数据值_001
call :加载BCD信息_去掉数据前面空格_001 "标签_修改项数值_获取数据值_2"
if "" NEQ "%~3" set "%~3=!标签_修改项数值_获取数据值_2!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_添加一个数值
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
echo.
echo  当前现有数值如下:
call :显示当前启动项的详细数值
echo.
echo  ***请输入您当前要添加的数值名和数值 数值名与数值之间以空格分开***
echo  ***这里不验证您的输入是否有误***

set "添加的数值名和数值="
set /p 添加的数值名和数值=.请输入您当前要添加的数值名和数值(回车默认不添加):
if "" NEQ "!添加的数值名和数值!" (
   bcdedit %m_BCD文件命令% /set !m_当前选择的启动项ID! !添加的数值名和数值!
   echo.
)
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  添加一个数值 完毕 ,任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_关闭驱动数字证书检测程序
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
echo.
echo  启动项正在 关闭驱动数字证书检测程序 于 第 !m_当前选择的启动项索引号! 项ID !m_当前选择的启动项ID!
bcdedit %m_BCD文件命令% /set !m_当前选择的启动项ID! nointegritychecks on
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  关闭驱动数字证书检测程序完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_打开驱动数字证书检测程序
call :显示选择主功能操作 "当前开始执行:"
call :选择启动项
if "" EQU "!m_当前选择的启动项ID!" goto :eof
echo.
echo  启动项正在 打开驱动数字证书检测程序 于 第 !m_当前选择的启动项索引号! 项ID !m_当前选择的启动项ID!
bcdedit %m_BCD文件命令% /set !m_当前选择的启动项ID! nointegritychecks off
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  打开驱动数字证书检测程序 完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_设置启动项超时
call :显示选择主功能操作 "当前开始执行:"
set "启动项超时时间=30"
set /p 启动项超时时间=.请设置启动项超时的时间,(回车默认!启动项超时时间!秒):
( set /a 验证启动项超时时间=!启动项超时时间! - 0 )>nul 2>nul
if !验证启动项超时时间! NEQ !启动项超时时间! (
   set "启动项超时时间=30"
   echo  您没有输入有效的数字,当前被重置为默认时间!启动项超时时间!秒
)
bcdedit %m_BCD文件命令% /timeout !启动项超时时间!
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  设置启动项超时为!启动项超时时间!秒 任务完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_全部关闭驱动数字证书检测程序
call :显示选择主功能操作 "当前开始执行:"
echo.
echo  开始批量全部关闭驱动数字证书检测程序......
for /l %%i in ( 1 1 !m_BCD文件启动项计数! ) do (
   set "全部关闭驱动数字证书检测程序_ID="
   call :全局获取项ID "%%i" "全部关闭驱动数字证书检测程序_ID"
   if "" NEQ "!全部关闭驱动数字证书检测程序_ID!" ( bcdedit %m_BCD文件命令% /set !全部关闭驱动数字证书检测程序_ID! nointegritychecks on )
)
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  全部关闭驱动数字证书检测程序完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_全部打开驱动数字证书检测程序
call :显示选择主功能操作 "当前开始执行:"
echo.
echo  开始批量全部打开驱动数字证书检测程序......
for /l %%i in ( 1 1 !m_BCD文件启动项计数! ) do (
   set "全部打开驱动数字证书检测程序_ID="
   call :全局获取项ID "%%i" "全部打开驱动数字证书检测程序_ID"
   if "" NEQ "!全部打开驱动数字证书检测程序_ID!" ( bcdedit %m_BCD文件命令% /set !全部打开驱动数字证书检测程序_ID! nointegritychecks off )
)
call :主功能_注册表校验 "!m_BCD文件!"
echo.
echo  全部打开驱动数字证书检测程序完毕!任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_文本查看数据
call :显示选择主功能操作 "当前开始执行:"
if exist "!m_BCD文件!" (
   bcdedit /store "!m_BCD文件!" /enum all >"!m_BCD文件!.txt"
   start %WinDir%\System32\notepad.exe "!m_BCD文件!.txt"
)
if not exist "!m_BCD文件!" (
   bcdedit /enum all >当前BCD信息.txt
   start %WinDir%\System32\notepad.exe "当前BCD信息.txt"
)
echo.
echo  导出查看BCD数据 完毕 ,任意键返回主菜单......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_添加一个系统分区的启动项
call :显示选择主功能操作 "当前开始执行:"
call :主功能_添加一个系统分区的启动项 "!m_BCD文件!"
call :主功能_注册表校验 "!m_BCD文件!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_添加WinPE或WinRE启动项
call :显示选择主功能操作 "当前开始执行:"
call :主功能_添加WinPE或WinRE启动项 "!m_BCD文件!"
call :主功能_注册表校验 "!m_BCD文件!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_添加一个VHD文件启动项
call :显示选择主功能操作 "当前开始执行:"
call :主功能_添加一个VHD文件启动项 "!m_BCD文件!"
call :主功能_注册表校验 "!m_BCD文件!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_添加NTLDR启动项或实模式启动项
call :显示选择主功能操作 "当前开始执行:"
call :主功能_添加NTLDR启动项或实模式启动项 "!m_BCD文件!"
call :主功能_注册表校验 "!m_BCD文件!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:标签_创建一个基本BCD文件
call :显示选择主功能操作 "当前开始执行:"
call :主功能_创建一个基本BCD文件
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:显示当前启动项的详细数值
if "" EQU "!m_当前选择的启动项ID!" goto :eof
set /a 启动项数值索引号=1
set "显示当前启动项的详细数值_开始计数="
set "显示当前启动项的详细数值_临时数据="
if "" EQU "%~1" if "" EQU "%~2" set /a m_当前选择的启动项启动数值计数=0
echo.
echo ***************************************************************************
for /f "delims=" %%a in ('bcdedit %m_BCD文件命令% /enum !m_当前选择的启动项ID!') do (
   set "显示当前启动项的详细数值_临时数据=%%a"
   if "2" EQU "!显示当前启动项的详细数值_开始计数!" set "显示当前启动项的详细数值_开始计数=3"
   if "1" EQU "!显示当前启动项的详细数值_开始计数!" set "显示当前启动项的详细数值_开始计数=2"
   if "---" EQU "!显示当前启动项的详细数值_临时数据:~0,3!" set "显示当前启动项的详细数值_开始计数=1"
   if "3" EQU "!显示当前启动项的详细数值_开始计数!" (
      set "启动项一个数值名="
      for /f "tokens=1,2 delims= " %%b in ("%%a") do if "" NEQ "%%c" set "启动项一个数值名=%%b"
         if "" NEQ "!启动项一个数值名!" (
            if "" EQU "%~1" if "" EQU "%~2" (
               if !启动项数值索引号! LSS 10 echo  数值索引号: !启动项数值索引号! 数值: %%a
               if 9 LSS !启动项数值索引号!  echo  数值索引号:!启动项数值索引号! 数值: %%a
            )
            if "" NEQ "%~1" if "" NEQ "%~2" (
               if "%~1" EQU "!启动项数值索引号!" call :%~2 "%%a"
            )
            set /a 启动项数值索引号=!启动项数值索引号! + 1
         )
      )
   )
)
call :注册表日志文件文件清除 "!m_BCD文件!"
if "" EQU "%~1" if "" EQU "%~2" set /a m_当前选择的启动项启动数值计数=!启动项数值索引号! - 1
echo ***************************************************************************
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:选择启动项
set /a m_当前选择的启动项索引号=0
set "m_当前选择的启动项ID="
set "m_当前选择的启动项启动项名="
if !m_BCD文件启动项计数! LEQ 0 goto :eof
echo.
if 1 EQU !m_BCD文件启动项计数! (
   echo  当前只有一项BCD启动项,回车默认1:
   set /a m_当前选择的启动项索引号=1
)
if 1 LSS !m_BCD文件启动项计数! echo  请选择BCD启动项索引号( 1-!m_BCD文件启动项计数! )
set /p m_当前选择的启动项索引号=.请您选择的BCD启动项索引号,回车默认!m_当前选择的启动项索引号!:

for /l %%i in ( 1 1 !m_BCD文件启动项计数! ) do (
   if "%%i" EQU "!m_当前选择的启动项索引号!" (
      call :全局获取项ID "!m_当前选择的启动项索引号!" "m_当前选择的启动项ID"
      caLL :全局获取项启动项名 "!m_当前选择的启动项索引号!" "m_当前选择的启动项启动项名"
      echo.
      echo    当前选中BCD启动项索引号: !m_当前选择的启动项索引号!
      echo        当前选中BCD启动项ID: !m_当前选择的启动项ID!
      echo  当前选中BCD启动项启动项名: !m_当前选择的启动项启动项名!
      goto :eof
   )
)
echo  没有找到BCD启动项索引号: !m_当前选择的启动项索引号! ,任意键返回主菜单......
set /a m_当前选择的启动项索引号=0
set "m_当前选择的启动项ID="
set "m_当前选择的启动项启动项名="
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:显示主菜单
echo  主功能菜单,请选择主功能项
echo =========================================================================
for /l %%i in ( 1 1 7 ) do (
   echo.
   echo  !m_主功能菜单行%%i!
)
if /i "" NEQ "!m_BCD文件启动类型_MBR!" (
       echo.
       echo  !m_主功能菜单行8!
)
echo.
echo =========================================================================
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:显示选择主功能操作
set "显示选择主功能操作_输出确认="
set "显示选择主功能操作_临时数据="
set "m_主功能菜单标签="
if !m_BCD文件启动项计数! LEQ 0 echo  ****当前无任何启动项****

for /l %%a in ( 1 1 7 ) do (
   for %%b in (!m_主功能菜单行%%a!) do (
      set "显示选择主功能操作_临时数据=%%b"
      if /i "!m_选择主功能项!" EQU "!显示选择主功能操作_临时数据:~0,1!" (
         set "m_主功能菜单标签=!显示选择主功能操作_临时数据:~2!"
         echo.
         echo  %~1 !m_主功能菜单标签!
         goto :eof
      )
   )
)
if /i "" NEQ "!m_BCD文件启动类型_MBR!" (
   for %%b in (!m_主功能菜单行8!) do (
       set "显示选择主功能操作_临时数据=%%b"
       if /i "!m_选择主功能项!" EQU "!显示选择主功能操作_临时数据:~0,1!" (
         set "m_主功能菜单标签=!显示选择主功能操作_临时数据:~2!"
         echo.
         echo  %~1 !m_主功能菜单标签!
         goto :eof
      )
   )
)
set "m_选择主功能项="
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:显示BCD基本信息
if " " EQU "!m_BCD文件!" echo  当前载入了系统BCD
if exist "!m_BCD文件!"   echo  当前载入的BCD文件:!m_BCD文件!
echo  引导启动类型: !m_BCD文件启动类型!
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:加载BCD信息
set /a m_BCD文件启动项计数=0
set "加载BCD信息_行1="
set "加载BCD信息_行2="
set "加载BCD信息_行3="
set /a 加载BCD信息_当前项索引号=1

set "启动ID1="
set "启动ID2="

set "启动名="
set "启动设备="

set "启动系统设备="
set "休眠恢复项="
set "启动文件="

set "Ram设备="
set "Ram配置文件="
set "启动管理器="
set "关闭驱动数字证书检测程序="
set "隔离上下文="

set "启动项类型1="
set "启动项类型2="

for /f "delims=" %%a in ('bcdedit %m_BCD文件命令% /enum all') do (
   set "加载BCD信息_行1=!加载BCD信息_行2!"
   set "加载BCD信息_行2=!加载BCD信息_行3!"
   set "加载BCD信息_行3=%%a"

   rem 读取分析数据
   for /f "tokens=1,2,3,4,5,6,7,8,9 delims= " %%b in ("%%a") do (
      if /i "device" EQU "%%b" set "启动设备=!加载BCD信息_行3:~6!"
      if /i "osdevice" EQU "%%b" set "启动系统设备=!加载BCD信息_行3:~8!"
      if /i "description" EQU "%%b" set "启动名=!加载BCD信息_行3:~11!"
      if /i "filepath" EQU "%%b" set "休眠恢复项=休眠恢复项"
      if /i "path" EQU "%%b" set "启动文件=!加载BCD信息_行3:~4!"
      if /i "ramdisksdidevice" EQU "%%b" set "Ram设备=!加载BCD信息_行3:~16!"
      if /i "ramdisksdipath" EQU "%%b" set "Ram配置文件=!加载BCD信息_行3:~14!"
      if /i "toolsdisplayorder" EQU "%%b" set "启动管理器=!加载BCD信息_行3:~17!"

      if /i "nointegritychecks" EQU "%%b" if /i "Yes" EQU "%%c" set "关闭驱动数字证书检测程序=%%c (关闭检测状态%%b)"
      if /i "nointegritychecks" EQU "%%b" if /i "on"  EQU "%%c" set "关闭驱动数字证书检测程序=%%c (关闭检测状态%%b)"
      if /i "nointegritychecks" EQU "%%b" if /i "on"  NEQ "%%c" if /i "Yes" NEQ "%%c" set "关闭驱动数字证书检测程序=%%c (开启检测状态%%b)"

      if /i "isolatedcontext" EQU "%%b" set "隔离上下文=隔离上下文%%b "
      if /i "isolatedcontext" EQU "%%b" if /i "Yes" EQU "%%c" set "隔离上下文=%%c (关闭隔离上下文状态%%b)"
      if /i "isolatedcontext" EQU "%%b" if /i "on"  EQU "%%c" set "隔离上下文=%%c (关闭隔离上下文状态%%b)"
      if /i "isolatedcontext" EQU "%%b" if /i "on"  NEQ "%%c" if /i "Yes" NEQ "%%c" set "隔离上下文=%%c (开启隔离上下文状态%%b)"
   )
   if "---" EQU "!加载BCD信息_行2:~0,3!" (
      set "启动ID1=!启动ID2!"
      for /f "tokens=1,2 delims= " %%b in ("!加载BCD信息_行3!") do  set "启动ID2=%%c"

      set "启动项类型1=!启动项类型2!"
      set "启动项类型2=!加载BCD信息_行1!"

      call :加载BCD信息_打印条目

      set "启动名="
      set "启动设备="

      set "启动系统设备="
      set "休眠恢复项="
      set "启动文件="
      set "Ram设备="
      set "Ram配置文件="
      set "启动管理器="
      set "关闭驱动数字证书检测程序="
      set "隔离上下文="
   )
)
call :注册表日志文件文件清除 "!m_BCD文件!"
set "启动ID1=!启动ID2!"
set "启动项类型1=!启动项类型2!"
call :加载BCD信息_打印条目
set /a m_BCD文件启动项计数=!加载BCD信息_当前项索引号! - 1
echo.
echo =========================================================================
call :显示BCD基本信息
echo  启动项总条目: !m_BCD文件启动项计数!
echo.
goto :eof
:::::::::::::::::::::::::::::::::::::::::
:加载BCD信息_打印条目
if "" EQU "!启动ID1!" goto :eof
if "" EQU "!启动项类型1!" goto :eof
call :加载BCD信息_去掉数据前面空格
echo.
echo --------------------------------------------------------
echo --输入 !加载BCD信息_当前项索引号! 选择以下启动项信息 启动项ID: !启动ID1!
call :全局设置项ID "!加载BCD信息_当前项索引号!" "启动ID1"
call :全局设置项启动项名 "!加载BCD信息_当前项索引号!" "启动名"

if /i "{current}" EQU "!启动ID1!" echo  ****当前系统启动项****
if /i "{default}" EQU "!启动ID1!" echo  ****默认启动项****
echo     启动项名: !启动名!
echo     启动项ID: !启动ID1!

if "" NEQ "!启动设备!"     (echo     启动设备: !启动设备!)
if "" NEQ "!启动系统设备!" (echo 启动系统设备: !启动系统设备!)
if "" NEQ "!启动文件!"     (echo     启动文件: !启动文件!)

if "" NEQ "!Ram设备!"      (echo      Ram设备: !Ram设备!)
if "" NEQ "!Ram配置文件!"  (echo  Ram配置文件: !Ram配置文件!)
if "" NEQ "!隔离上下文!"   (echo   上下文关闭: !隔离上下文!)
if "" NEQ "!启动管理器!"   (echo   启动管理器: !启动管理器!)
if "" NEQ "!关闭驱动数字证书检测程序!" (echo 证书检测关闭: !关闭驱动数字证书检测程序!)
rem if "" NEQ "!关闭驱动数字证书检测程序!" (echo 关闭驱动数字证书检测程序: !关闭驱动数字证书检测程序!)
if "" NEQ "!休眠恢复项!"   (echo   ****!休眠恢复项!****  )
echo   启动项类型: !启动项类型1!
set /a 加载BCD信息_当前项索引号=!加载BCD信息_当前项索引号! + 1
goto :eof
:::::::::::::::::::::::::::::::::::::::::
:加载BCD信息_去掉数据前面空格
call :加载BCD信息_去掉数据前面空格_001 "启动ID1"
call :加载BCD信息_去掉数据前面空格_001 "启动ID2"
call :加载BCD信息_去掉数据前面空格_001 "启动名"
call :加载BCD信息_去掉数据前面空格_001 "启动设备"
call :加载BCD信息_去掉数据前面空格_001 "启动文件"
call :加载BCD信息_去掉数据前面空格_001 "Ram设备"
call :加载BCD信息_去掉数据前面空格_001 "Ram配置文件"
call :加载BCD信息_去掉数据前面空格_001 "启动系统设备"
call :加载BCD信息_去掉数据前面空格_001 "启动管理器"
goto :eof
:::::::::::::::::::::::::::::::::::::::::
:加载BCD信息_去掉数据前面空格_001
if "" NEQ "%~1" if "" NEQ "!%~1!" if " " EQU "!%~1:~0,1!" set "%~1=!%~1:~1!" & goto :加载BCD信息_去掉数据前面空格_001
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:全局设置项ID
set "第%~1条启动项的ID=!%~2!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:全局获取项ID
if "" NEQ "%~2" set "%~2=!第%~1条启动项的ID!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:全局设置项启动项名
set "第%~1条启动项的启动项名=!%~2!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:全局获取项启动项名
if "" NEQ "%~2" set "%~2=!第%~1条启动项的启动项名!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:选择BCD文件
set "m_BCD文件= "
call :脚本顶层标题
set /p m_BCD文件=.请输入bcd位置,如:C:\BOOT\BCD,回车确认,x退出,回车默认当前系统BCD:
echo  正在加载BCD文件信息,请稍后......
set "m_BCD文件=!m_BCD文件:"=!"
set "选择BCD文件_判断有效BCD文件="
set "选择BCD文件_选择状态="
call :判断有效的BCD文件 "!m_BCD文件!" "选择BCD文件_判断有效BCD文件"

if " " EQU "!m_BCD文件!" if "" EQU "!选择BCD文件_判断有效BCD文件!" (
   set "m_BCD文件="
   call :脚本顶层标题
   echo  ***********没有办法获取当前系统的BCD文件***********
   echo  输入E/e结束脚本,否则任意键重新选择BCD文件......
   set /p 选择BCD文件_选择状态=.
   if /i "e" EQU "!选择BCD文件_选择状态!" goto :eof
   goto :选择BCD文件
)

if "" EQU "!选择BCD文件_判断有效BCD文件!" (
   call :脚本顶层标题
   echo  *****您选择了无效的BCD文件:!m_BCD文件!
   echo.
   set "m_BCD文件="
   echo  输入E/e结束脚本,否则任意键重新选择BCD文件......
   set /p 选择BCD文件_选择状态=.
   if /i "e" EQU "!选择BCD文件_选择状态!" goto :eof
   goto :选择BCD文件
)

goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:脚本顶层标题
title !m_脚本标题!
cls
echo.
echo                          !m_脚本标题!
echo.
echo =========================================================================
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:安装本地脚本右键功能
rem call :复制覆盖一个文件 "!m_本地脚本文件名!" "%SystemRoot%\System32\!m_脚本文件名!"

set "文件右键菜单中加上脚本打开_注册表路径=HKEY_CLASSES_ROOT\*\shell\用!m_脚本标题!打开该文件\Command"
(
   rem Reg Add "%文件右键菜单中加上脚本打开_注册表路径%" /ve /t REG_SZ /d "\"%SystemRoot%\System32\!m_脚本文件名!\" \"%%1\" \"%%2\" \"%%3\" \"%%4\"  \"%%5\"" /f
   Reg Add "%文件右键菜单中加上脚本打开_注册表路径%" /ve /t REG_SZ /d "\"%~dpnx0\" \"%%1\" \"%%2\" \"%%3\" \"%%4\"  \"%%5\"" /f
)>nul 2>nul
goto :eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_添加一个系统分区的启动项
set "主功能_添加一个系统分区的启动项_系统盘符="
set "主功能_添加一个系统分区的启动项_启动方式="
set "主功能_添加一个系统分区的启动项_启动名="

set "主功能_添加一个系统分区的启动项_系统盘符列表="
call :枚举Windows系统盘符列表 "主功能_添加一个系统分区的启动项_系统盘符列表"
echo.
if "" EQU "!主功能_添加一个系统分区的启动项_系统盘符列表!" (
   echo *****当前没有找到任何有Windows系统的盘符*****
   goto :eof
)
set /p 主功能_添加一个系统分区的启动项_系统盘符=.请选择输入系统盘符(!主功能_添加一个系统分区的启动项_系统盘符列表!):
echo.
for %%a in ( !主功能_添加一个系统分区的启动项_系统盘符列表! ) do if /i "%%a" EQU "!主功能_添加一个系统分区的启动项_系统盘符!" (
   set "主功能_添加一个系统分区的启动项_系统盘符=%%a"
   goto :主功能_添加一个系统分区的启动项_001
)
echo *****当前没有找到您选择的Windows系统盘符:!主功能_添加一个系统分区的启动项_系统盘符!*****
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_添加一个系统分区的启动项_001
set "主功能_添加一个系统分区的启动项_启动方式列表="
set "主功能_添加一个系统分区的启动项_mbr启动方式="
set "主功能_添加一个系统分区的启动项_efi启动方式="
set "主功能_添加一个系统分区的启动项_启动名=Windows OS"
call :获取一个目录下的Windows系统版本名 "!主功能_添加一个系统分区的启动项_系统盘符!" "主功能_添加一个系统分区的启动项_启动名"

if "" EQU "主功能_添加一个系统分区的启动项_启动名" (
   set "主功能_添加一个系统分区的启动项_启动名=Windows OS"
   set /p 主功能_添加一个系统分区的启动项_启动名=.请给!主功能_添加一个系统分区的启动项_系统盘符!盘指定一个启动项名称(回车默认!主功能_添加一个系统分区的启动项_启动名!):
)

call :获取BCD文件的启动类型 "%~1" "主功能_添加一个系统分区的启动项_启动方式列表"
for %%a in (!主功能_添加一个系统分区的启动项_启动方式列表!) do (
   if /i "mbr" EQU "%%a" set "主功能_添加一个系统分区的启动项_mbr启动方式=.exe"
   if /i "efi" EQU "%%a" set "主功能_添加一个系统分区的启动项_efi启动方式=.efi"
)
if "" EQU "!主功能_添加一个系统分区的启动项_启动方式列表!" (
   echo.
   echo  *****您选择的BCD文件数据格式不合法,没有获取到BCD文件的启动方式,无法添加启动项*****
   goto :eof
)
if "" NEQ "!主功能_添加一个系统分区的启动项_mbr启动方式!" (
   call :添加一个系统分区的启动项 "%~1" "主功能_添加一个系统分区的启动项_系统盘符" "主功能_添加一个系统分区的启动项_mbr启动方式" "主功能_添加一个系统分区的启动项_启动名"
   if "" NEQ "!主功能_添加一个系统分区的启动项_efi启动方式!" echo.
)
if "" NEQ "!主功能_添加一个系统分区的启动项_efi启动方式!" (
   call :添加一个系统分区的启动项 "%~1" "主功能_添加一个系统分区的启动项_系统盘符" "主功能_添加一个系统分区的启动项_efi启动方式" "主功能_添加一个系统分区的启动项_启动名"
)
echo.
echo  添加一个系统分区的启动项完毕! ......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_添加WinPE或WinRE启动项
set "主功能_添加WinPE或WinRE启动项_新建启动项名="
set "主功能_添加WinPE或WinRE启动项_mbr启动方式="
set "主功能_添加WinPE或WinRE启动项_efi启动方式="
set "主功能_添加WinPE或WinRE启动项_bcd启动类型="
set "主功能_添加WinPE或WinRE启动项_wim文件="
echo.
call :获取BCD文件的启动类型 "%~1" "主功能_添加WinPE或WinRE启动项_bcd启动类型"
if "" EQU "!主功能_添加WinPE或WinRE启动项_bcd启动类型!" (

   echo  *****您选择的BCD文件数据格式不合法,没有获取到BCD文件的启动方式,无法添加启动项*****
   goto :eof
)
for %%a in (!主功能_添加WinPE或WinRE启动项_bcd启动类型!) do (
   if /i "mbr" EQU "%%a" set "主功能_添加WinPE或WinRE启动项_mbr启动方式=.exe"
   if /i "efi" EQU "%%a" set "主功能_添加WinPE或WinRE启动项_efi启动方式=.efi"
)

call :脚本选择文件扩展名类型的文件 "wim" "主功能_添加WinPE或WinRE启动项_wim文件"
if "" EQU "!主功能_添加WinPE或WinRE启动项_wim文件!" goto :eof
for %%a in ("!主功能_添加WinPE或WinRE启动项_wim文件!") do set "主功能_添加WinPE或WinRE启动项_新建启动项名=%%~nxa"
set /p 主功能_添加WinPE或WinRE启动项_新建启动项名=.请指定新建启动项名,回车默认(!主功能_添加WinPE或WinRE启动项_新建启动项名!):
if "" NEQ "!主功能_添加WinPE或WinRE启动项_mbr启动方式!" (
   call :添加WinPE或WinRE启动项 "%~1" "主功能_添加WinPE或WinRE启动项_wim文件" "主功能_添加WinPE或WinRE启动项_mbr启动方式" "主功能_添加WinPE或WinRE启动项_新建启动项名"
)
if "" NEQ "!主功能_添加WinPE或WinRE启动项_efi启动方式!" (
   call :添加WinPE或WinRE启动项 "%~1" "主功能_添加WinPE或WinRE启动项_wim文件" "主功能_添加WinPE或WinRE启动项_efi启动方式" "主功能_添加WinPE或WinRE启动项_新建启动项名"
)
echo.
echo  添加一个WinPE或WinRE启动项完毕! ......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_添加一个VHD文件启动项
set "主功能_添加一个VHD文件启动项_新建启动项名="
set "主功能_添加一个VHD文件启动项_mbr启动方式="
set "主功能_添加一个VHD文件启动项_efi启动方式="
set "主功能_添加一个VHD文件启动项_bcd启动类型="
set "主功能_添加一个VHD文件启动项_vhd文件="
echo.
call :获取BCD文件的启动类型 "%~1" "主功能_添加一个VHD文件启动项_bcd启动类型"
if "" EQU "!主功能_添加一个VHD文件启动项_bcd启动类型!" (
   echo  *****您选择的BCD文件数据格式不合法,没有获取到BCD文件的启动方式,无法添加启动项*****
   goto :eof
)
for %%a in (!主功能_添加一个VHD文件启动项_bcd启动类型!) do (
   if /i "mbr" EQU "%%a" set "主功能_添加一个VHD文件启动项_mbr启动方式=.exe"
   if /i "efi" EQU "%%a" set "主功能_添加一个VHD文件启动项_efi启动方式=.efi"
)

call :脚本选择文件扩展名类型的文件 "vhd" "主功能_添加一个VHD文件启动项_vhd文件"
if "" EQU "!主功能_添加一个VHD文件启动项_vhd文件!" goto :eof

for %%a in ("!主功能_添加一个VHD文件启动项_vhd文件!") do set "主功能_添加一个VHD文件启动项_新建启动项名=%%~nxa"
set /p 主功能_添加一个VHD文件启动项_新建启动项名=.请指定新建启动项名,回车默认(!主功能_添加一个VHD文件启动项_新建启动项名!):

if "" NEQ "!主功能_添加一个VHD文件启动项_mbr启动方式!" (
   call :添加一个VHD文件启动项 "%~1" "主功能_添加一个VHD文件启动项_vhd文件" "主功能_添加一个VHD文件启动项_mbr启动方式" "主功能_添加一个VHD文件启动项_新建启动项名"
)
if "" NEQ "!主功能_添加一个VHD文件启动项_efi启动方式!" (
   call :添加一个VHD文件启动项 "%~1" "主功能_添加一个VHD文件启动项_vhd文件" "主功能_添加一个VHD文件启动项_efi启动方式" "主功能_添加一个VHD文件启动项_新建启动项名"
)
echo.
echo  添加一个VHD文件启动项完毕! ......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_添加NTLDR启动项或实模式启动项
set "主功能_添加NTLDR启动项或实模式启动项_新建启动项名="
set "主功能_添加NTLDR启动项或实模式启动项_NTLDR文件="
echo.
set /p 主功能_添加NTLDR启动项或实模式启动项_NTLDR文件=.请选择输入NTLDR文件或实模式启动文件,(支持文件拖拽):
if "" EQU "!主功能_添加NTLDR启动项或实模式启动项_NTLDR文件!" (
   echo  *****指定启动文件,无法添加启动项*****
   goto :eof
)

set "主功能_添加NTLDR启动项或实模式启动项_NTLDR文件=!主功能_添加NTLDR启动项或实模式启动项_NTLDR文件:"=!"

for %%a in ("!主功能_添加NTLDR启动项或实模式启动项_NTLDR文件!") do (
   if ":" NEQ "!主功能_添加NTLDR启动项或实模式启动项_NTLDR文件:~1,1!" set "主功能_添加NTLDR启动项或实模式启动项_NTLDR文件=%~dp0%%a"
   set "主功能_添加NTLDR启动项或实模式启动项_新建启动项名=%%~nxa"
)

call :添加NTLDR启动项或实模式启动项 "%~1" "主功能_添加NTLDR启动项或实模式启动项_NTLDR文件" "主功能_添加NTLDR启动项或实模式启动项_新建启动项名"
echo.
echo  添加NTLDR启动项或实模式启动项完毕! ......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:主功能_创建一个基本BCD文件
echo.
set "主功能_创建一个基本BCD文件_启动类型=M"
echo  请选择创建BCD文件类型:
echo =========================================================================
echo.
echo     M.创建一个基本的MBR引导BCD文件     E.创建一个基本的EFI引导BCD文件   
echo.
echo =========================================================================
set /p 主功能_创建一个基本BCD文件_启动类型=.请输入您选择的BCD文件类型(字母不区分大小写):
set "主功能_创建一个基本BCD文件_输出目录=%SystemDrive%\Users\Public\Desktop"
set /p 主功能_创建一个基本BCD文件_输出目录=.请输入创建的BCD文件保存目录(回车默认!主功能_创建一个基本BCD文件_输出目录!):
call :主功能_创建一个基本BCD文件_001 "主功能_创建一个基本BCD文件_输出目录"
( mkdir "!主功能_创建一个基本BCD文件_输出目录!")>nul 2>nul
if not exist "!主功能_创建一个基本BCD文件_输出目录!\" (
   echo.
   echo  ***您的选择了无效的输出目录,无法创建BCD文件***
   goto :eof
)
if /i "m" EQU "!主功能_创建一个基本BCD文件_启动类型!" call :创建一个基本BCD文件 "MBR" "主功能_创建一个基本BCD文件_输出目录"
if /i "e" EQU "!主功能_创建一个基本BCD文件_启动类型!" call :创建一个基本BCD文件 "EFI" "主功能_创建一个基本BCD文件_输出目录"
if /i "m" NEQ "!主功能_创建一个基本BCD文件_启动类型!" if /i "e" NEQ "!主功能_创建一个基本BCD文件_启动类型!" (
   echo.
   echo  ***您的选择有误无法创建BCD文件***
)
echo.
echo  创建一个基本BCD文件完毕! ......
goto :eof
:主功能_创建一个基本BCD文件_001
if "" NEQ "%~1" if "" NEQ "!%~1!" if "\" EQU "!%~1:~-1!" set "%~1=!%~1:~0,-1!" & goto %~0
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:添加一个系统分区的启动项
if /i ".exe" NEQ "!%~3!" if /i ".efi" NEQ "!%~3!" (
   echo  *****您的选择输入了不合法的启动方式:!%~3!*****
   goto :eof
)
set "添加一个系统分区的启动项_启动方式="
if /i ".exe" EQU "!%~3!" set "添加一个系统分区的启动项_启动方式=MBR"
if /i ".efi" EQU "!%~3!" set "添加一个系统分区的启动项_启动方式=EFI"
echo  正在添加盘符:!%~2! 的!%~4!系统的启动项,启动方式为:!添加一个系统分区的启动项_启动方式!
set "添加一个系统分区的启动项_现有系统启动项ID="
set "添加一个系统分区的启动项_新建系统启动项ID="
set "添加一个系统分区的启动项_BCD文件=%~1"
set "添加一个系统分区的启动项_BCD文件命令="
set "添加一个系统分区的启动项_临时文件=%Random%_%Random%.ini"
call :获取一个BCD文件的BCD文件路径命令 "添加一个系统分区的启动项_BCD文件" "添加一个系统分区的启动项_BCD文件命令"
if "" EQU "!添加一个系统分区的启动项_BCD文件命令!" (
   echo  *****您的选择了不合法BCD文件:%~1*****
   goto :eof
)
call :从BCD文件查找一个系统分区启动项ID "%~1" "添加一个系统分区的启动项_现有系统启动项ID" "!%~3!"
if "" EQU "!添加一个系统分区的启动项_现有系统启动项ID!" (
   ( bcdedit !添加一个系统分区的启动项_BCD文件命令! /create /d "!%~4!" /application osloader )>!添加一个系统分区的启动项_临时文件!
   for /f "tokens=2 delims={}"  %%a in (!添加一个系统分区的启动项_临时文件!) do set "添加一个系统分区的启动项_新建系统启动项ID={%%a}"
   ( del /f/q "!添加一个系统分区的启动项_临时文件!" )>nul 2>nul
   goto :添加一个系统分区的启动项_001
)
( bcdedit !添加一个系统分区的启动项_BCD文件命令! /copy !添加一个系统分区的启动项_现有系统启动项ID! /d "!%~4!" )>!添加一个系统分区的启动项_临时文件!
for /f "tokens=2 delims={}"  %%a in (!添加一个系统分区的启动项_临时文件!) do set "添加一个系统分区的启动项_新建系统启动项ID={%%a}"
( del /f/q "!添加一个系统分区的启动项_临时文件!" )>nul 2>nul
:添加一个系统分区的启动项_001
if "" EQU "!添加一个系统分区的启动项_新建系统启动项ID!" (
   echo  *****无法获取新建启动项的项ID*****
   goto :eof
)
( bcdedit !添加一个系统分区的启动项_BCD文件命令! /deletevalue !添加一个系统分区的启动项_新建系统启动项ID! recoverysequence )>nul 2>nul
( bcdedit !添加一个系统分区的启动项_BCD文件命令! /deletevalue !添加一个系统分区的启动项_新建系统启动项ID! resumeobject )>nul 2>nul
echo.
bcdedit !添加一个系统分区的启动项_BCD文件命令! /set !添加一个系统分区的启动项_新建系统启动项ID! description "!添加一个系统分区的启动项_启动方式!: !%~4!"
bcdedit !添加一个系统分区的启动项_BCD文件命令! /set !添加一个系统分区的启动项_新建系统启动项ID! device "partition=!%~2!:"
bcdedit !添加一个系统分区的启动项_BCD文件命令! /set !添加一个系统分区的启动项_新建系统启动项ID! osdevice "partition=!%~2!:"
bcdedit !添加一个系统分区的启动项_BCD文件命令! /set !添加一个系统分区的启动项_新建系统启动项ID! path "\Windows\system32\winload!%~3!"
bcdedit !添加一个系统分区的启动项_BCD文件命令! /set !添加一个系统分区的启动项_新建系统启动项ID! systemroot  \windows
bcdedit !添加一个系统分区的启动项_BCD文件命令! /displayorder !添加一个系统分区的启动项_新建系统启动项ID! /addlast
echo.
echo  完成添加盘符:!%~2! 的!%~4!系统的启动项,启动方式为:!添加一个系统分区的启动项_启动方式! ......
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:添加NTLDR启动项或实模式启动项
set "添加NTLDR启动项或实模式启动项_现有NTLDR启动项ID="
set "添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID="
set "添加NTLDR启动项或实模式启动项_NTLDR文件=!%~2!"
set "添加NTLDR启动项或实模式启动项_临时文件=%Random%_%Random%.ini"
set "添加NTLDR启动项或实模式启动项_BCD文件=%~1"
set "添加NTLDR启动项或实模式启动项_BCD文件命令="

echo.
call :获取一个BCD文件的BCD文件路径命令 "添加NTLDR启动项或实模式启动项_BCD文件" "添加NTLDR启动项或实模式启动项_BCD文件命令"
if "" EQU "!添加NTLDR启动项或实模式启动项_BCD文件命令!" (
   echo  *****您的选择了不合法BCD文件:%~1*****
   goto :eof
)

( bcdedit !添加NTLDR启动项或实模式启动项_BCD文件命令! /copy {ntldr} /d "!%~3!" )>!添加NTLDR启动项或实模式启动项_临时文件!
if 0 NEQ %errorlevel% ( bcdedit !添加NTLDR启动项或实模式启动项_BCD文件命令! /create {ntldr} /d "!%~3!" )>!添加NTLDR启动项或实模式启动项_临时文件!
for /f "tokens=2 delims={}"  %%a in (!添加NTLDR启动项或实模式启动项_临时文件!) do set "添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID={%%a}"
( del /f/q "!添加NTLDR启动项或实模式启动项_临时文件!" )>nul 2>nul

if "" EQU "!添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID!" (
   echo  *****无法获取新建启动项的项ID*****
   goto :eof
)

bcdedit !添加NTLDR启动项或实模式启动项_BCD文件命令! /set !添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID! device partition=!添加NTLDR启动项或实模式启动项_NTLDR文件:~0,2!
bcdedit !添加NTLDR启动项或实模式启动项_BCD文件命令! /set !添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID! path "!添加NTLDR启动项或实模式启动项_NTLDR文件:~2!"
if /i "!添加NTLDR启动项或实模式启动项_BCD文件:~0,1!" EQU "!添加NTLDR启动项或实模式启动项_NTLDR文件:~0,1!" (
   bcdedit !添加NTLDR启动项或实模式启动项_BCD文件命令! /set !添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID! device boot
)
bcdedit !添加NTLDR启动项或实模式启动项_BCD文件命令! /displayorder !添加NTLDR启动项或实模式启动项_新建NTLDR启动项ID! /addlast
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:添加一个VHD文件启动项
set "添加一个VHD文件启动项_新建vhd启动项ID="
set "添加一个VHD文件启动项_vhd文件=!%~2!"
set "添加一个VHD文件启动项_临时文件=%Random%_%Random%.ini"
set "添加一个VHD文件启动项_BCD文件=%~1"
set "添加一个VHD文件启动项_BCD文件命令="
set "添加一个VHD文件启动项_启动方式="

echo.
if /i ".exe" NEQ "!%~3!" if /i ".efi" NEQ "!%~3!" (
   echo  *****您的选择输入了不合法的启动方式:!%~3!*****
   goto :eof
)

call :获取一个BCD文件的BCD文件路径命令 "添加一个VHD文件启动项_BCD文件" "添加一个VHD文件启动项_BCD文件命令"
if "" EQU "!添加一个VHD文件启动项_BCD文件命令!" (
   echo  *****您的选择了不合法BCD文件:%~1*****
   goto :eof
)

set "添加一个VHD文件启动项_启动方式="
if /i ".exe" EQU "!%~3!" set "添加一个VHD文件启动项_启动方式=MBR"
if /i ".efi" EQU "!%~3!" set "添加一个VHD文件启动项_启动方式=EFI"

echo  开始添加vhd文件:!%~2!
echo       启动项名为:!%~4!
echo       启动方式为:!添加一个VHD文件启动项_启动方式!
echo.

( bcdedit !添加一个VHD文件启动项_BCD文件命令! /create /d "!%~4!" /application osloader )>!添加一个VHD文件启动项_临时文件!
for /f "tokens=2 delims={}"  %%a in (!添加一个VHD文件启动项_临时文件!) do set "添加一个VHD文件启动项_新建vhd启动项ID={%%a}"
( del /f/q "!添加一个VHD文件启动项_临时文件!" )>nul 2>nul
if "" EQU "!添加一个VHD文件启动项_新建vhd启动项ID!" (
   echo  *****无法获取新建vhd启动项的项ID位于BCD文件:%~1中*****
   goto :eof
)

bcdedit !添加一个VHD文件启动项_BCD文件命令! /set !添加一个VHD文件启动项_新建vhd启动项ID! description "!添加一个VHD文件启动项_启动方式! VHD : !%~4!"
bcdedit !添加一个VHD文件启动项_BCD文件命令! /set !添加一个VHD文件启动项_新建vhd启动项ID! device "vhd=[!添加一个VHD文件启动项_vhd文件:~0,2!]!添加一个VHD文件启动项_vhd文件:~2!"
bcdedit !添加一个VHD文件启动项_BCD文件命令! /set !添加一个VHD文件启动项_新建vhd启动项ID! osdevice "vhd=[!添加一个VHD文件启动项_vhd文件:~0,2!]!添加一个VHD文件启动项_vhd文件:~2!"
bcdedit !添加一个VHD文件启动项_BCD文件命令! /set !添加一个VHD文件启动项_新建vhd启动项ID! path \windows\system32\winload!%~3!
bcdedit !添加一个VHD文件启动项_BCD文件命令! /set !添加一个VHD文件启动项_新建vhd启动项ID! systemroot \windows
bcdedit !添加一个VHD文件启动项_BCD文件命令! /set !添加一个VHD文件启动项_新建vhd启动项ID! detecthal yes
bcdedit !添加一个VHD文件启动项_BCD文件命令! /displayorder !添加一个VHD文件启动项_新建vhd启动项ID! /addlast

echo.
echo  完成添加vhd文件:!%~2!
echo       启动项名为:!%~4!
echo       启动方式为:!添加一个VHD文件启动项_启动方式!
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:添加WinPE或WinRE启动项
rem "添加WinPE或WinRE启动项_sdi文件"
set "添加WinPE或WinRE启动项_现有wim启动项ID="
set "添加WinPE或WinRE启动项_新建wim启动项ID="
set "添加WinPE或WinRE启动项_新建sdi设备项ID="
set "添加WinPE或WinRE启动项_sdi文件="
set "添加WinPE或WinRE启动项_wim文件=!%~2!"
set "添加WinPE或WinRE启动项_临时文件=%Random%_%Random%.ini"
set "添加WinPE或WinRE启动项_BCD文件=%~1"
set "添加WinPE或WinRE启动项_BCD文件命令="

echo.
if /i ".exe" NEQ "!%~3!" if /i ".efi" NEQ "!%~3!" (
   echo  *****您的选择输入了不合法的启动方式:!%~3!*****
   goto :eof
)

call :获取一个BCD文件的BCD文件路径命令 "添加WinPE或WinRE启动项_BCD文件" "添加WinPE或WinRE启动项_BCD文件命令"
if "" EQU "!添加WinPE或WinRE启动项_BCD文件命令!" (
   echo  *****您的选择了不合法BCD文件:%~1*****
   goto :eof
)

set "添加WinPE或WinRE启动项_启动方式="
if /i ".exe" EQU "!%~3!" set "添加WinPE或WinRE启动项_启动方式=MBR"
if /i ".efi" EQU "!%~3!" set "添加WinPE或WinRE启动项_启动方式=EFI"

echo  开始添加Wim文件:!%~2!
echo       启动项名为:!%~4!
echo       启动方式为:!添加WinPE或WinRE启动项_启动方式!
echo.

set "添加WinPE或WinRE启动项_现有wim启动项ID="
call :从BCD文件查找一个WIM启动项ID "%~1" "添加WinPE或WinRE启动项_现有wim启动项ID" "添加WinPE或WinRE启动项_新建sdi设备项ID" "!%~3!"
if "" NEQ "!添加WinPE或WinRE启动项_现有wim启动项ID!" if "" NEQ "!添加WinPE或WinRE启动项_新建sdi设备项ID!" goto :添加WinPE或WinRE启动项_002

:::::::::::::::::::::::::::::::::::::
:添加WinPE或WinRE启动项_001

作者: lforl    时间: 2021-12-6 22:48
610644034 发表于 2021-10-16 22:42
一直用自己的脚本,自己想怎样都行!
@echo off
setlocal enabledelayedexpansion

用脚本写要考虑到各种环境,还担心某种新情况没考虑进去,的确不简单。
感觉只要直观说清楚,对于小白还是不太难:
就是涉及:一个工具bootice加菜单,提取boot.wim和boot.sdi到相应的路径下。
作者: 学习学习学习    时间: 2023-10-13 15:10
zhang9876 发表于 2020-4-5 20:39
传统模式用这个,右击用管理员身份运行。

这两种模式的代码咋看着是一模一样的,为啥要区分开呢。
作者: rbwrbw    时间: 2023-10-18 08:12
批处理无所不能??是底层
作者: yyz2191958    时间: 2023-10-18 10:04
进来学习
作者: rbwrbw    时间: 2023-10-18 17:48
不❌




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