[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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. for /f "tokens=1,*" %%a in ('more +!desLine! list.txt^|findstr /i /r "标识符"') do (
  15. echo,查询当前节点的标识符为 : %%b
  16. set "strID=%%b"
  17. goto :next
  18. )
  19. )
  20. :next
  21. echo,现在你已经得到标识符了,它存于变量strID里面,如果为空,则无符合条件
  22. echo,strID值 : !strID!
  23. pause
  24. if "!strID!" EQU "" goto :creatt
  25. %bcdedit% /enum
  26. pause
  27. %bcdedit% /delete !strID!
  28. %bcdedit% /enum
  29. pause
  30. :creatt
  31. %bcdedit% /enum
  32. pause
  33. exit
复制代码

TOP

本帖最后由 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. for /f "tokens=1,*" %%a in ('^(more +!desLine! list.txt^)^|findstr /i /r "标识符"') do (
  37. echo,查询当前节点的标识符为 : %%b
  38. set "strID!nIndex!=%%b"
  39. goto :next
  40. )
  41. )
  42. :next
  43. if !nIndex! LEQ !nCount! (
  44. echo,现在你已经得到标识符了,它存于变量strID!nIndex!里面,如果为空,则无符合条件
  45. call echo,strID!nIndex!值 : %%strID!nIndex!%%
  46. echo,==========================================&echo,&echo,
  47. REM 做你要做的事情
  48. REM Code here...
  49. REM 要做的事情结束
  50.         call %bcdedit% /delete %%strID!nIndex!%%
  51. set /a "nLine+=1"
  52. echo,现在将行指针下移一行,继续开始查找符合条件项
  53. echo,新的行指针为 : !nLine!
  54. )
  55. if !nIndex! LEQ !nCount! goto :_start
  56. %bcdedit% /v >list2.txt
  57. :creatt
  58. %bcdedit% /create {777778af-66c9-4ad4-a54e-d76256db09e1} /application bootsector /d %descri%
  59. %bcdedit% /set {777778af-66c9-4ad4-a54e-d76256db09e1} device partition=C:
  60. %bcdedit% /set {777778af-66c9-4ad4-a54e-d76256db09e1} path \8888\PELOAD
  61. %bcdedit% /displayorder {777778af-66c9-4ad4-a54e-d76256db09e1} /addlast
  62. %bcdedit% /v >list3.txt
  63. cls
  64. ping 127.0.0.1 -n 1 >nul 2>nul
  65. del /f /q list*.txt
  66. 1pause&goto :EOF
复制代码

TOP

返回列表