无忧启动论坛

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

[已解决] 能不能用批处理添加wim启动项

  [复制链接]
跳转到指定楼层
#
发表于 2018-4-5 10:46:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 807979023 于 2019-3-6 17:10 编辑

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

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

1.jpg
50#
发表于 2023-10-18 17:48:30 | 只看该作者
不❌
回复

使用道具 举报

49#
发表于 2023-10-18 10:04:38 | 只看该作者
进来学习
回复

使用道具 举报

48#
发表于 2023-10-18 08:12:55 | 只看该作者
批处理无所不能??是底层
回复

使用道具 举报

47#
发表于 2023-10-13 15:10:00 | 只看该作者
zhang9876 发表于 2020-4-5 20:39
传统模式用这个,右击用管理员身份运行。

这两种模式的代码咋看着是一模一样的,为啥要区分开呢。
回复

使用道具 举报

46#
发表于 2021-12-6 22:48:44 | 只看该作者
610644034 发表于 2021-10-16 22:42
一直用自己的脚本,自己想怎样都行!
@echo off
setlocal enabledelayedexpansion

用脚本写要考虑到各种环境,还担心某种新情况没考虑进去,的确不简单。
感觉只要直观说清楚,对于小白还是不太难:
就是涉及:一个工具bootice加菜单,提取boot.wim和boot.sdi到相应的路径下。
回复

使用道具 举报

45#
发表于 2021-10-16 22:42:13 | 只看该作者
一直用自己的脚本,自己想怎样都行!
@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

点评

用脚本写要考虑到各种环境,还担心某种新情况没考虑进去,的确不简单。 感觉只要直观说清楚,对于小白还是不太难: 就是涉及:一个工具bootice加菜单,提取boot.wim和boot.sdi到相应的路径下。  详情 回复 发表于 2021-12-6 22:48
回复

使用道具 举报

44#
发表于 2021-9-22 14:32:19 | 只看该作者
nttwqz 发表于 2021-9-21 13:14
版主是不是喝了十斤二锅头?

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

实现的方法不一样吧?
回复

使用道具 举报

43#
发表于 2021-9-22 14:27:04 | 只看该作者
回复

使用道具 举报

42#
发表于 2021-9-21 13:14:51 来自手机 | 只看该作者
gmy 发表于 2021-9-21 10:30
加精,欢迎更多人讨论。

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

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

点评

gmy
实现的方法不一样吧?  详情 回复 发表于 2021-9-22 14:32
回复

使用道具 举报

41#
发表于 2021-9-21 11:52:20 来自手机 | 只看该作者
看我发的帖子

点评

gmy
是这个帖子吗?http://bbs.wuyou.net/forum.php?mod=viewthread&tid=426642  详情 回复 发表于 2021-9-22 14:27
回复

使用道具 举报

40#
发表于 2021-9-21 10:30:25 | 只看该作者
加精,欢迎更多人讨论。

点评

版主是不是喝了十斤二锅头? 像GRUB4DOS for UEFI这样需要编程实现的帖子都不是精华,本帖何以配的上精华二字?  详情 回复 发表于 2021-9-21 13:14
回复

使用道具 举报

39#
发表于 2021-5-16 01:38:23 | 只看该作者
精彩!非常感谢分享
回复

使用道具 举报

38#
发表于 2021-3-1 18:02:50 | 只看该作者
批处理添加wim启动项
回复

使用道具 举报

37#
发表于 2020-10-6 14:03:20 | 只看该作者
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          启用或禁用操作系统项的远程
                事件日志记录。
回复

使用道具 举报

36#
发表于 2020-5-20 21:53:50 来自手机 | 只看该作者
Bluebells 发表于 2020-5-20 19:54
UEFI 引导 + GPT 分区样式,标准的 Windows 引导,其 BCD 都是在 ESP 分区吧,但 BOOT.SDI 不在 ESP 分区 ...

        我记不清倒底是什么场景了,总之boot.sdi放在启动分区绝对要比随便放在某个分区,然后在BCD中指定目录要稳定很多,而且就是很寻常的场景。
回复

使用道具 举报

35#
发表于 2020-5-20 19:54:41 | 只看该作者
liuzhaoyzz 发表于 2020-5-20 12:07
GPT分区,引导用的BCD如果在ESP分区,一般要求boot.sdi也在ESP分区,一般不可能放到“任意分区 ...

UEFI 引导 + GPT 分区样式,标准的 Windows 引导,其 BCD 都是在 ESP 分区吧,但 BOOT.SDI 不在 ESP 分区也可以引导 WIM 引导映像的

点评

我记不清倒底是什么场景了,总之boot.sdi放在启动分区绝对要比随便放在某个分区,然后在BCD中指定目录要稳定很多,而且就是很寻常的场景。  详情 回复 发表于 2020-5-20 21:53
回复

使用道具 举报

34#
发表于 2020-5-20 13:53:30 | 只看该作者
感觉有点难度
回复

使用道具 举报

33#
发表于 2020-5-20 13:53:20 | 只看该作者
这个我也看不懂
回复

使用道具 举报

32#
发表于 2020-5-20 12:07:24 来自手机 | 只看该作者
本帖最后由 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好像也不能放在“任意分区”的。

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

点评

UEFI 引导 + GPT 分区样式,标准的 Windows 引导,其 BCD 都是在 ESP 分区吧,但 BOOT.SDI 不在 ESP 分区也可以引导 WIM 引导映像的  详情 回复 发表于 2020-5-20 19:54
回复

使用道具 举报

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

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





点评

GPT分区,BCD如果在ESP分区,一般要求boot.sdi也在ESP分区,一般不可能放到“任意分区”下的。 就是MBR分区,也是一般要求boot.sdi与bcd同一个盘符才行,否则无法启动。比如BCD放在100MB那种引导分区  详情 回复 发表于 2020-5-20 12:07
回复

使用道具 举报

30#
发表于 2020-5-20 08:32:42 | 只看该作者
y7y007 发表于 2018-4-5 19:23
论坛以前qiqiqicool大神的 WimRamOS_制作与热备份工具  批处理里面有这个的

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

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

回复

使用道具 举报

29#
发表于 2020-5-20 07:25:08 来自手机 | 只看该作者
807979023 发表于 2020-5-19 17:07
小改一下,BOOT.WIM和BOOT.SDI 可以放入任意分区 任意文件夹。
id值{20200519-1646-5277-eeee-fffffffffff ...

        你确定boot.sdi放在任意分区,真的在所有条件下都能启动?

点评

简单条件下测试通过,复杂条件下未测试,不知道,可能不行。  详情 回复 发表于 2020-5-20 10:04
回复

使用道具 举报

28#
 楼主| 发表于 2020-5-19 17:07:30 | 只看该作者
小改一下,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, 下载次数: 245)

3.jpg

点评

你确定boot.sdi放在任意分区,真的在所有条件下都能启动?  详情 回复 发表于 2020-5-20 07:25
回复

使用道具 举报

27#
发表于 2020-5-19 11:33:46 | 只看该作者
好东西,谢谢!
回复

使用道具 举报

26#
发表于 2020-4-25 13:40:38 | 只看该作者
能用批处理添加wim启动项
回复

使用道具 举报

25#
发表于 2020-4-9 20:52:32 | 只看该作者

感谢分享
回复

使用道具 举报

24#
发表于 2020-4-8 22:00:35 | 只看该作者
可以
回复

使用道具 举报

23#
发表于 2020-4-5 22:54:14 来自手机 | 只看该作者
马克一下,没搞过efi的
回复

使用道具 举报

22#
发表于 2020-4-5 20:39:38 | 只看该作者
传统模式用这个,右击用管理员身份运行。



@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
回复

使用道具 举报

21#
发表于 2019-12-22 01:05:11 | 只看该作者
还是无忧论坛人才多,找了好久的批处理添加WIM,自己都试着写也还没搞定,这篇真是雪中送炭,好好研究下,用bootice每次操作都要花3分钟时间设置,好累
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 05:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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