标题: [系统相关] [已解决]win7 64系统,bat搭配bcdedit,如何将符合条件的启动菜单项目,彻底删除? [打印本页]
作者: ygqiang 时间: 2015-1-20 10:27 标题: [已解决]win7 64系统,bat搭配bcdedit,如何将符合条件的启动菜单项目,彻底删除?
本帖最后由 ygqiang 于 2015-1-20 12:11 编辑
[已解决]win7 64系统,bat搭配bcdedit,如何将符合条件的启动菜单项目,彻底删除?
description/说明选项里面,符合条件的要求是:同时包含“通用”和“PE”这2个关键字。- @echo off
- set "bcdedit=%SystemRoot%\System32\bcdedit.exe"
- setlocal enableDelayedExpansion
- for /f "tokens=1,2*" %%c in ('%bcdedit% /v') do (
- if %%c*==标识符* (
- echo ID: %%d %%e >>1.txt
- )
- if %%c*==description* echo 说明: %%d %%e >>1.txt
- )
复制代码
这个代码,执行后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
作者: ygqiang 时间: 2015-1-20 12:11
本帖最后由 ygqiang 于 2015-1-20 12:13 编辑
解决了。- @echo off
- setlocal enabledelayedexpansion
-
- set "bcdedit=%SystemRoot%\System32\bcdedit.exe"
- %bcdedit% /v >list.txt
- set "strID="
- for /f "tokens=1,2* delims=: " %%i in ('findstr /n /r "通用.*PE" list.txt') do (
- echo,当前发现符合条件描述在 : %%i 行
- set /a "desLine=%%i"
- echo,完整描述内容为 : %%k
- echo,&echo,
-
- echo,从描述行前推4行,作为more的传入参数,作单循环处理便可查询当前节点的标识符
- set /a "desLine-=4"
- if !desLine! LSS 0 set /a "desLine=0"
-
- for /f "tokens=1,*" %%a in ('more +!desLine! list.txt^|findstr /i /r "标识符"') do (
- echo,查询当前节点的标识符为 : %%b
- set "strID=%%b"
- goto :next
- )
- )
- :next
- echo,现在你已经得到标识符了,它存于变量strID里面,如果为空,则无符合条件
- echo,strID值 : !strID!
- pause
-
-
-
- if "!strID!" EQU "" goto :creatt
- %bcdedit% /enum
- pause
- %bcdedit% /delete !strID!
- %bcdedit% /enum
- pause
-
- :creatt
- %bcdedit% /enum
- pause
- exit
复制代码
作者: ygqiang 时间: 2015-1-20 13:48
本帖最后由 ygqiang 于 2015-1-20 21:38 编辑
- :通用PE工具箱5.0-win7-64
- setlocal enabledelayedexpansion
-
- set tim=3
- set descri="通用PE工具箱5.0"
- set "bcdedit=%SystemRoot%\System32\bcdedit.exe"
- set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
-
- if not exist c:\8888 "%rar%" x -y "通用PE工具箱5.0.rar" c:\
-
- echo %bcdedit%
- %bcdedit% /v >list.txt
- %bcdedit% /enum >list1.txt
-
- %bcdedit% /timeout %tim%
-
-
-
-
- echo,赋值初始行指针
- set /a "nLine=0"
- echo,&echo,
-
- echo,查找符合条件总共有多少个节点
- set /a "nCount=0"
- for /f "delims=" %%i in ('findstr /i /r "通用.*PE" list.txt') do set /a "nCount+=1"
- echo,总共有 !nCount! 个节点符合要求
- echo,&echo,
-
- echo,设置查找次数标记
- set /a "nIndex=0"
- echo,&echo,
-
- :_start
- set /a "nIndex+=1"
- set "strID!nIndex!="
- for /f "tokens=1,2* delims=: " %%i in ('^(more +!nLine! list.txt^) ^| findstr /n /r "通用.*PE"') do (
- set /a "desLine=nLine+%%i"
- echo,当前发现符合条件描述在 : !desLine! 行
- set /a "nLine=desLine"
- echo,查到目标,更新行指针为 : !nLine!
- echo,完整描述内容为 : %%k
- echo,&echo,
-
- echo,从描述行前推4行,作为more的传入参数,作单循环处理便可查询当前节点的标识符
- set /a "desLine-=4"
- if !desLine! LSS 0 set /a "desLine=0"
-
- for /f "tokens=1,*" %%a in ('^(more +!desLine! list.txt^)^|findstr /i /r "标识符"') do (
- echo,查询当前节点的标识符为 : %%b
- set "strID!nIndex!=%%b"
- goto :next
- )
- )
- :next
- if !nIndex! LEQ !nCount! (
- echo,现在你已经得到标识符了,它存于变量strID!nIndex!里面,如果为空,则无符合条件
- call echo,strID!nIndex!值 : %%strID!nIndex!%%
- echo,==========================================&echo,&echo,
-
- REM 做你要做的事情
- REM Code here...
- REM 要做的事情结束
- call %bcdedit% /delete %%strID!nIndex!%%
-
- set /a "nLine+=1"
- echo,现在将行指针下移一行,继续开始查找符合条件项
- echo,新的行指针为 : !nLine!
- )
-
- if !nIndex! LEQ !nCount! goto :_start
-
-
-
-
-
- %bcdedit% /v >list2.txt
-
-
- :creatt
-
- %bcdedit% /create {777778af-66c9-4ad4-a54e-d76256db09e1} /application bootsector /d %descri%
- %bcdedit% /set {777778af-66c9-4ad4-a54e-d76256db09e1} device partition=C:
- %bcdedit% /set {777778af-66c9-4ad4-a54e-d76256db09e1} path \8888\PELOAD
- %bcdedit% /displayorder {777778af-66c9-4ad4-a54e-d76256db09e1} /addlast
-
- %bcdedit% /v >list3.txt
-
- cls
- ping 127.0.0.1 -n 1 >nul 2>nul
- del /f /q list*.txt
-
- 1pause&goto :EOF
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |