|
一直用自己的脚本,自己想怎样都行!
@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
|
|