找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24626|回复: 2

[系统相关] [已解决]win7 64系统,bat搭配bcdedit,如何将符合条件的启动菜单项目,彻底删除?

[复制链接]
发表于 2015-1-20 10:27:14 | 显示全部楼层 |阅读模式
本帖最后由 ygqiang 于 2015-1-20 12:11 编辑

[已解决]win7 64系统,bat搭配bcdedit,如何将符合条件的启动菜单项目,彻底删除?
description/说明选项里面,符合条件的要求是:同时包含“通用”和“PE”这2个关键字。
  1. @echo off
  2. set "bcdedit=%SystemRoot%\System32\bcdedit.exe"
  3. setlocal enableDelayedExpansion
  4. for /f "tokens=1,2*" %%c in ('%bcdedit% /v') do (
  5. if %%c*==标识符* (
  6.   echo   ID: %%d %%e >>1.txt
  7.   )
  8. if %%c*==description* echo 说明: %%d %%e >>1.txt
  9. )
复制代码
这个代码,执行后1.txt文件内容如下:
  ID: {9dea862c-5cdd-4e70-acc1-f32b344d4795}  
说明: Windows Boot Manager
  ID: {b562ed92-5fbd-11e2-bdba-b9260cd4d68b}  
说明: Windows 7
  ID: {777778af-66c9-4ad4-a54e-d76256db09e1}  
说明: 通用PE工具箱5.0  


删除win7 64系统某个启动菜单项目的命令是:
%bcdedit% /delete {ID值}

在这个例子中,ID值就是:777778af-66c9-4ad4-a54e-d76256db09e1

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2015-1-20 12:11:04 | 显示全部楼层
本帖最后由 ygqiang 于 2015-1-20 12:13 编辑

解决了。
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "bcdedit=%SystemRoot%\System32\bcdedit.exe"
  4. %bcdedit% /v >list.txt
  5. set "strID="
  6. for /f "tokens=1,2* delims=: " %%i in ('findstr /n /r "通用.*PE" list.txt') do (
  7.         echo,当前发现符合条件描述在 : %%i 行
  8.         set /a "desLine=%%i"
  9.         echo,完整描述内容为         : %%k
  10.         echo,&echo,

  11.         echo,从描述行前推4行,作为more的传入参数,作单循环处理便可查询当前节点的标识符
  12.         set /a "desLine-=4"
  13.         if !desLine! LSS 0 set /a "desLine=0"
  14.        
  15.         for /f "tokens=1,*" %%a in ('more +!desLine! list.txt^|findstr /i /r "标识符"') do (
  16.                 echo,查询当前节点的标识符为 : %%b
  17.                 set "strID=%%b"
  18.                 goto :next
  19.         )
  20. )
  21. :next
  22. echo,现在你已经得到标识符了,它存于变量strID里面,如果为空,则无符合条件
  23. echo,strID值 : !strID!
  24. pause



  25. if "!strID!" EQU "" goto :creatt
  26. %bcdedit% /enum
  27. pause
  28. %bcdedit% /delete !strID!
  29. %bcdedit% /enum
  30. pause

  31. :creatt
  32. %bcdedit% /enum
  33. pause
  34. exit
复制代码
 楼主| 发表于 2015-1-20 13:48:07 | 显示全部楼层
本帖最后由 ygqiang 于 2015-1-20 21:38 编辑
  1. :通用PE工具箱5.0-win7-64
  2. setlocal enabledelayedexpansion

  3. set tim=3
  4. set descri="通用PE工具箱5.0"
  5. set "bcdedit=%SystemRoot%\System32\bcdedit.exe"
  6. set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"

  7. if not exist c:\8888 "%rar%" x -y "通用PE工具箱5.0.rar" c:\

  8. echo %bcdedit%
  9. %bcdedit% /v >list.txt
  10. %bcdedit% /enum >list1.txt

  11. %bcdedit% /timeout %tim%




  12. echo,赋值初始行指针
  13. set /a "nLine=0"
  14. echo,&echo,

  15. echo,查找符合条件总共有多少个节点
  16. set /a "nCount=0"
  17. for /f "delims=" %%i in ('findstr /i /r "通用.*PE" list.txt') do set /a "nCount+=1"
  18. echo,总共有 !nCount! 个节点符合要求
  19. echo,&echo,

  20. echo,设置查找次数标记
  21. set /a "nIndex=0"
  22. echo,&echo,

  23. :_start
  24. set /a "nIndex+=1"
  25. set "strID!nIndex!="
  26. for /f "tokens=1,2* delims=: " %%i in ('^(more +!nLine! list.txt^) ^| findstr /n /r "通用.*PE"') do (
  27.         set /a "desLine=nLine+%%i"
  28.         echo,当前发现符合条件描述在 : !desLine! 行
  29.         set /a "nLine=desLine"
  30.         echo,查到目标,更新行指针为 : !nLine!
  31.         echo,完整描述内容为         : %%k
  32.         echo,&echo,

  33.         echo,从描述行前推4行,作为more的传入参数,作单循环处理便可查询当前节点的标识符
  34.         set /a "desLine-=4"
  35.         if !desLine! LSS 0 set /a "desLine=0"
  36.        
  37.         for /f "tokens=1,*" %%a in ('^(more +!desLine! list.txt^)^|findstr /i /r "标识符"') do (
  38.                 echo,查询当前节点的标识符为 : %%b
  39.                 set "strID!nIndex!=%%b"
  40.                 goto :next
  41.         )
  42. )
  43. :next
  44. if !nIndex! LEQ !nCount! (
  45.         echo,现在你已经得到标识符了,它存于变量strID!nIndex!里面,如果为空,则无符合条件
  46.         call echo,strID!nIndex!值 : %%strID!nIndex!%%
  47.         echo,==========================================&echo,&echo,
  48.        
  49.         REM 做你要做的事情
  50.         REM Code here...
  51.         REM 要做的事情结束       
  52.         call %bcdedit% /delete %%strID!nIndex!%%

  53.         set /a "nLine+=1"
  54.         echo,现在将行指针下移一行,继续开始查找符合条件项
  55.         echo,新的行指针为 : !nLine!
  56. )

  57. if !nIndex! LEQ !nCount! goto :_start





  58. %bcdedit% /v >list2.txt


  59. :creatt

  60. %bcdedit% /create {777778af-66c9-4ad4-a54e-d76256db09e1} /application bootsector /d %descri%
  61. %bcdedit% /set {777778af-66c9-4ad4-a54e-d76256db09e1} device partition=C:
  62. %bcdedit% /set {777778af-66c9-4ad4-a54e-d76256db09e1} path \8888\PELOAD
  63. %bcdedit% /displayorder {777778af-66c9-4ad4-a54e-d76256db09e1} /addlast

  64. %bcdedit% /v >list3.txt

  65. cls
  66. ping 127.0.0.1 -n 1 >nul 2>nul
  67. del /f /q list*.txt

  68. 1pause&goto :EOF
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:28 , Processed in 0.019011 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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