• bcdedit bcd 批处理 增加 删除操作


    rem 这是一个由高级菜鸟改进的用于向Vista、Win7系统添加多系统引导菜单项的一键批处理,可以自定义引导文件名和其它文件所在文件夹的文件夹名。多次试验,稳定可靠。以下是批处理内容,红色部分是全局默认设置,可预先自定义文件名等。复制到文本文档,扩展名改为bat


    @echo off
    cd /d %~dp0
    rem >nul 屏蔽标准输出在屏幕上的显示,2>nul 是屏蔽出错显示,>nul 2>nul 是无论对错,都屏蔽屏幕显示。
    attrib -h -s -r temp_bcd.txt >nul 2>nul
    del temp_bcd.txt >nul 2>nul
    COLOR 1f

    rem ==============以下是全局设置项,自行设置=================
    set timeout=2
    rem 设置引导在菜单的名称
    set gname=逸优启引导菜单

    rem 设置文件、文件夹默认名称,默认分别为grldr.mbr,grldr,文件夹是自己修改设置的
    set mbrname=eldr.mbr
    set ldrname=ldr.e
    set ldrfile=wx
    rem =========================================================

    rem set pingtime=20
    rem pingtime是程序操作完成后的自动退出等待时间,调节与否随意,这里已注释掉,手动退出,以方便阅读安装过程。gname是bcd启动菜单显示名称,根据喜好可自己设置,mbrname是mbr的名称,可以自己改名,timeout是bcd菜单等待选择时间,自己随便调
    set vid=
    set destpart=
    Set TIT=【逸优启Vista/Win7 BCD菜单项添加与删除批处理】 By高级菜鸟

    TITLE %TIT%
    echo.
    echo 高级菜鸟 改自lianjiang的批处理(wowfans修改版),并添加了大量帮助新手学习的注释,有兴趣的可自行修改以满足自己的设置要求。
    echo.
    echo 本批处理将帮助你安全地在VISTA/WIN7/2008/2008R2系统下将【多系统引导】安装或卸载,可自定义要安装的文件的名称,按默认值一直回车即可智能判断,一键完成!
    echo.
    echo 该批处理与【多系统引导】文件放在一起即可,不需要复制到C盘后运行
    echo.
    echo 警告!请确定你是在VISTA/WIN7/2008/2008R2系统下运行本批处理,XP系统下不使用本批处理安装!如果不满足条件,请现在关闭窗口退出!
    echo.
    pause
    echo.
    echo 检测权限...
    rem 直接运行bcdedit相当于bcdedit /enum active列出启动菜单上有的项目,all指所有项目标。加/v用完整标志符取代特殊标识符。下面是将bcd的内容输出到temp_bcd.txt文件中。&&前面的执行失败,后面的不执行
    bcdedit >temp_bcd.txt 2>nul
    rem type显示文本文件的内容,| 读取前一个命令中的输出作为后一个命令的输入
    type temp_bcd.txt | find "Windows Boot Manager" >nul && goto gaosir
    rem 若找不到Windows Boot Manager证明不是管理员,删掉刚刚用来记录BCD内容的文件。
    del temp_bcd.txt >nul 2>nul
    echo 请在VISTA/WIN7/2008/2008R2系统中以管理员身份运行,任意键退出.
    pause>nul
    exit

    :gaosir
    echo 权限检测已通过
    rem 去掉隐藏等属性,以免后面的操作找不到文件
    attrib -h -s -r %mbrname% >nul 2>nul
    attrib -h -s -r %ldrname% >nul 2>nul
    attrib -h -s -r %ldrfile% >nul 2>nul
    attrib -h -s -r %ldrfile%\* >nul 2>nul
    set inputv=
    echo.
    echo 下面将提示你输入grub引导文件、主体文件、相关文件的文件夹的名称方便安装你自己改名的文件。对于本【多系统引导】不需要输入,一路回车确定即可。(文件已为避免与win7软激活相冲突而特意改过名),若需自定义,输入名称时可用TAB键选择或快速补齐。
    echo.
    echo 以下是扩展名为.mbr的文件列表,一般grub引导文件名应该为下面的文件名,仅供参考
    dir /a /b *.mbr
    echo.
    echo.
    set /p inputv=若确实要自定义,请输入要安装或卸载的grub引导文件名(未改名时为grldr.mbr),直接回车采用默认的%mbrname%  :
    if not "%inputv%"=="" set mbrname=%inputv%&&echo 您输入的引导文件名为:%inputv%
    echo.
    set /p inputv=若确实要自定义,请输入要安装或卸载的grub主体文件名称(未改名时为grldr),直接回车采用默认的%ldrname%  :
    if not "%inputv%"=="" set ldrname=%inputv%&&echo 您输入的grub主体文件名为:%inputv%
    echo.
    set /p inputv=若确实要自定义,请输入要安装或卸载的放有【多系统引导】有关文件的文件夹,直接回车采用默认的%ldrfile%文件夹  :
    if not "%inputv%"=="" set ldrfile=%inputv%&&echo 您输入的文件夹名为:%inputv%
    echo.
    echo.
    if not exist %mbrname% echo 请注意,当前目录下没有%mbrname%文件,但仍可以继续安装,安装完成时会提示您将%mbrname%等文件手动复制到您即将选择的安装盘中。(注意:若%mbrname%文件所在位置与将要复制到的位置相同,由于无法自身复制,所以仍会错误的提示要手动复制,这没关系!)&pause

    rem defdest:自定义分区
    set defdest=%systemdrive%
    rem 找到并设定含有bcd的盘符作为默认安装位置,搜到光驱时可能会弹出没有磁盘!如果不是多系统(特别是不止一个vista以上系列的系统),BCD一般就在系统盘,就算不是,%destpart%也是可以自定义位置的,下面的搜索其实意义不大。
    for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%i:\Boot\BCD set defdest=%%i:

    rem mbrname的路径,就放根目录下
    set mbrpath=\%mbrname%
    rem destpart:分区,defdest:自定义分区
    rem 将寻找%mbrpath%决定是安装还是卸载放在寻找defdest后,是为了无论是安装还是卸载都能找到destpart的正确位置
    set destpart=%defdest%
    rem 如果在temp_bcd.txt中找到了%mbrpath%(屏蔽输出),就转到卸载否则继续安装。
    type temp_bcd.txt | find "%mbrpath%" >nul && goto un_bcd
    goto seldest


    :seldest
    COLOR 1f
    set inputv=
    echo.
    echo 请输入%mbrname%文件的安装盘符,直接回车采用%destpart%盘根目录
    echo 输入盘符时不用输入冒号,如D盘输入D或d即可
    echo.
    set /p inputv=输入盘符(不带冒号),请直接回车使用默认%destpart%盘: 
    if not "%inputv%"=="" set destpart=%inputv%:
    if not exist "%destpart%\" goto patherr
    rem 试着随便创建一个目录:sbcjdygml
    md %destpart%\sbcjdygml
    rem 创建不成功,转到写错误:writerr
    if not exist "%destpart%\sbcjdygml" goto writerr
    rem 存在,表示可写,删除这个随便创建的目录
    rd "%destpart%\sbcjdygml"
    goto bcd_1


    rem 路径错误
    :patherr
    COLOR 16
    cls
    echo 指定盘符%destpart%无效, 按任意键重新指定!!!
    pause
    goto seldest


    rem 指定盘不可写入
    :writerr
    COLOR 16
    cls
    echo.
    echo 指定盘不可写入, 可能为光驱, 请重新指定 !!!
    pause
    goto seldest


    rem 编辑BCD,安装引导
    :bcd_1
    echo.
    echo 正在将"%gname%"项添加到BCD
    rem create创建一个启动项,/d 指定菜单里的文字。XP示例:bcdedit /create {ntldr} /d "Win XP"
    rem VISTA:bcdedit /create /d "VISTA" /application osloader
    rem osloader:操作系统加载器,bootsector:启动扇区
    bcdedit  /create /d "%gname%" /application bootsector >vid.ini
    for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do set vida=%%i
    rem 变量vid记录启动项标识符
    for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do set vid={%%i}
    rem 设置文件路径
    bcdedit  /set %vid% device partition=%destpart%  >nul
    bcdedit  /set %vid% path %mbrpath% >nul
    rem displayorder设置启动项启动顺序,如:bcdedit /displayorder {legacy} {current} 将首先显示Windows XP,然后再显示默认启动的系统如Windows 7;不清楚具体情况可加 /addfirst /addlast参数,如:将现在安装的【多系统引导】项放最后:bcdedit  /displayorder %vid% /addlast >nul
    rem {legacy} :指存在上一代Windows系统如Windows XP的硬盘或分区;{default} : 默认操作系统所在硬盘或分区;{current} : 当前硬盘或分区;
    bcdedit  /displayorder %vid% /addfirst >nul
    bcdedit  /timeout  %timeout% >nul
    rem 设置默认启动项,如:bcdedit /default %vid% 设定现在添加的项目为默认启动项 ; bcdedit /default {ntldr} 设定默认启动操作系统为NTLDR;bcdedit /default {current} 将目前所处的操作系统作为默认启动的项目。
    rem 如果想保留现在默认启动项目不变动,请去掉或注释掉下面这条
    bcdedit /default {current}
    echo.
    echo   BCD菜单项"%gname%"添加完成


    rem 复制文件,更改文件属性,去掉要复制文件(否则无法复制)及已存在同名文件的隐藏、系统、只读,复制后再给源和目标加上隐藏、系统、只读。
    if exist %mbrname% (
    echo.
    echo   开始复制文件到安装目录……
    attrib -h -s -r %destpart%\%mbrname% >nul 2>nul
    copy %mbrname% %destpart%\ /y
    attrib +h +s +r %destpart%\%mbrname%
    attrib +h +s +r %mbrname%

    attrib -h -s -r %destpart%\%ldrname% >nul 2>nul
    copy %ldrname% %destpart%\ /y
    attrib +h +s +r %destpart%\%ldrname%
    attrib +h +s +r %ldrname%

    rem 复制文件夹,不使用DOS外部命令xcopy,因为我不知道精简系统的CMD里有没有该命令
    rem 先在目标位置创建一个文件夹%ldrfile%
    attrib -h -s -r %destpart%\%ldrfile% >nul 2>nul
    attrib -h -s -r %destpart%\%ldrfile%\* >nul 2>nul
    rd /s /q %destpart%\%ldrfile%\ >nul
    md %destpart%\%ldrfile%
    rem %ldrfile%后不能加\
    copy %ldrfile%\ %destpart%\%ldrfile%\ /y
    attrib +h +s +r %destpart%\%ldrfile%\*
    attrib +h +s +r %destpart%\%ldrfile%
    attrib +h +s +r %ldrfile%
    echo.
    echo   复制完成
    goto exit
    ) else (
    echo   若有复制失败,请稍后请自行把%mbrname%等多系统引导文件及文件夹拷贝到%destpart%\根目录
    echo.
    rem set /a pingtime=%pingtime%+8
    Goto exit
    )


    :un_bcd
    COLOR 2f
    echo.
    echo   系统的BCD启动项中存在项目["%mbrpath%"]。
    echo   ==============================================
    echo.
    set un_bcd=
    Set /P un_bcd=  是否需要卸载%mbrpath%项目?[y/是  n/否]:
    If /i %un_bcd%#==y# goto un_bcd_1
    rem &第一项执行失败不影响第二项执行
    If /i %un_bcd%#==n# echo 卸载已取消...&goto exit
    cls
    echo.
    echo 选择错误,请输入Y或者N(不分大小写)后继续
    Goto un_bcd


    :un_bcd_1
    for /f "tokens=1 delims=:" %%i In ('findstr /n %mbrpath%  temp_bcd.txt') Do (
    Set nid=%%i
    )
    set /a nid=%nid%-3
    for /f "skip=%nid% tokens=2" %%i in (temp_bcd.txt) do set vid=%%i&goto vidok


    :vidok
    bcdedit /delete %vid% /cleanup >nul
    bcdedit /timeout   %timeout% >nul
    bcdedit >temp_bcd.txt
    rem 菜单中可能有多个重复的%mbrpath%项目录,转回再试直到所有的都清除
    type temp_bcd.txt | find "%mbrpath%" >nul && goto un_bcd
    echo.
    echo 已成功卸载%mbrname%项目

    rem 前面如果设置了新增的项目为默认启动项,则卸载后要设一个其它的项目为默认
    bcdedit /default {current}


    rem 显示之前被隐藏了的文件,以便下面判断是否存在该文件,否则会误判。
    attrib -h -s -r %destpart%\%mbrname% >nul 2>nul
    attrib -h -s -r %destpart%\%ldrname% >nul 2>nul
    attrib -h -s -r %destpart%\%ldrfile% >nul 2>nul
    attrib -h -s -r %destpart%\%ldrfile%\* >nul 2>nul

    if exist %destpart%\%mbrname% (
    echo.
    echo   清理残留的文件……
    attrib -h -s -r %destpart%\%mbrname% >nul 2>nul
    del %destpart%\%mbrname% >nul
    attrib -h -s -r %destpart%\%ldrname% >nul 2>nul
    del %destpart%\%ldrname% >nul
    rem %ldrfile%后不能加\
    attrib -h -s -r %destpart%\%ldrfile% >nul 2>nul
    attrib -h -s -r %ldrfile%\* >nul 2>nul
    rem %ldrfile%后可加可不加\
    rd /s /q %destpart%\%ldrfile%\ >nul 2>nul
    echo.
    echo   文件清理完成
    )


    :exit
    COLOR 0f
    attrib -h -s -r temp_bcd.txt >nul 2>nul
    del temp_bcd.txt >nul 2>nul
    del vid.ini >nul 2>nul
    echo.
    echo 请保留该安装与卸载批处理文件,以便以后卸载(或再次安装)【多系统引导】时使用!
    echo.
    PAUSE >nul
    rem echo %pingtime%秒后窗口自动关闭
    rem ping -n %pingtime% 127.0.0.1 >nul
    exit

  • 相关阅读:
    揭秘富人的22种习惯与风格
    CSS
    浏览器--编辑器
    3 位运算 , 补码 ----在开发中比较少用
    2 Java数据类型+转义字符
    1 概述
    如何使用大脑
    JDBC
    web.xml文件的作用
    WindowBuilder插件探索
  • 原文地址:https://www.cnblogs.com/chixiaojin/p/1988923.html
Copyright © 2020-2023  润新知