无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2697|回复: 7
打印 上一主题 下一主题

问题已解决

[复制链接]
跳转到指定楼层
1#
发表于 2017-10-28 17:03:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 moran 于 2017-10-31 17:02 编辑

例如在BCD里添加了一个PE启动项,菜单名是固定的名称。

BCD里有几个启动项不固定,需要删除的启动项排在第几也是不固定的。
需要通过批处理删除那个启动项,请问如何静默获取那个启动项的GUID?以供批处理使用。
谢谢大家。
2#
发表于 2017-10-28 21:50:51 | 只看该作者
  1. @echo off

  2. rem 获取本机启动项的GUID,即displayorder列表

  3. set n=1
  4. setlocal enabledelayedexpansion
  5. bcdedit /enum {bootmgr} /v >%temp%\bootlist.txt
  6. rem 获取displayorder所在的行号
  7. for /f "tokens=1 delims=:" %%a in ('type "%temp%\bootlist.txt" ^| findstr /n "^displayorder"') do set /a skip=%%a-1
  8. rem 忽略displayorder之前的行从而节省时间
  9. for /f "skip=%skip% tokens=1,2" %%a in ('type "%temp%\bootlist.txt"') do (
  10.         if /i "%%a"=="displayorder" set boot-1=%%b
  11.         echo %%a | findstr "{.*}" >nul 2>nul && (
  12.                 set /a n+=1
  13.                 set boot-!n!=%%a
  14.         )
  15. )
  16. del /f /q "%temp%\bootlist.txt"
  17. for /l %%a in (1,1,!n!) do echo !boot-%%a!
  18. pause
复制代码

点评

这个貌似不行,你这个会取出所有启动项的GUID,直接通过批处理怎么判断需要删除的是哪个呢?  详情 回复 发表于 2017-10-29 00:18

评分

参与人数 2无忧币 +10 收起 理由
moran + 5 谢谢回复。
zmac2007 + 5

查看全部评分

回复

使用道具 举报

3#
 楼主| 发表于 2017-10-29 00:18:41 | 只看该作者

这个貌似不行,你这个会取出所有启动项的GUID,直接通过批处理怎么判断需要删除的是哪个呢?

点评

呃,这个,当然是继续判断了,你要删除的启动项里面总有一些参数是不变的吧? 比如device、description什么的,再使用上面的for、if接着判断不就出来了,上面就使用了这个方法。 我的思路 提取启动项列表>>分  详情 回复 发表于 2017-10-29 00:32
回复

使用道具 举报

4#
发表于 2017-10-29 00:32:46 | 只看该作者
moran 发表于 2017-10-29 00:18
这个貌似不行,你这个会取出所有启动项的GUID,直接通过批处理怎么判断需要删除的是哪个呢?

呃,这个,当然是继续判断了,你要删除的启动项里面总有一些参数是不变的吧?

比如device、description什么的,再使用上面的for、if接着判断不就出来了,上面就使用了这个方法。

我的思路
提取启动项列表>>分析各个启动项,提取符合条件的启动项>>删除!

但是,要是真的所有参数都变了,那我想,除了备份恢复之外,一时还难以想到什么好办法

点评

你的思路我懂了,研究了一下,由于我对for命令非常不熟,还是没成功。 麻烦你能不能也写一个示例,非常感谢。  详情 回复 发表于 2017-10-29 15:26
回复

使用道具 举报

5#
发表于 2017-10-29 11:43:54 | 只看该作者
批处理还是比shell弱了很多。
回复

使用道具 举报

6#
 楼主| 发表于 2017-10-29 15:26:46 | 只看该作者
nttwqz 发表于 2017-10-29 00:32
呃,这个,当然是继续判断了,你要删除的启动项里面总有一些参数是不变的吧?

比如device、descriptio ...

你的思路我懂了,研究了一下,由于我对for命令非常不熟,还是没成功。
麻烦你能不能也写一个示例,非常感谢。

点评

好吧,这个是简单的实现办法  详情 回复 发表于 2017-10-29 18:11
回复

使用道具 举报

7#
发表于 2017-10-29 18:11:32 | 只看该作者
moran 发表于 2017-10-29 15:26
你的思路我懂了,研究了一下,由于我对for命令非常不熟,还是没成功。
麻烦你能不能也写一个示例,非常 ...

好吧,这个是简单的实现办法

  1. @echo off

  2. rem 获取本机启动项的GUID,即displayorder列表

  3. set n=1
  4. setlocal enabledelayedexpansion
  5. bcdedit /enum {bootmgr} /v >%temp%\bootlist.txt
  6. rem 获取displayorder所在的行号
  7. for /f "tokens=1 delims=:" %%a in ('type "%temp%\bootlist.txt" ^| findstr /n "^displayorder"') do set /a skip=%%a-1
  8. rem 忽略displayorder之前的行从而节省时间
  9. for /f "skip=%skip% tokens=1,2" %%a in ('type "%temp%\bootlist.txt"') do (
  10.         if /i "%%a"=="default" set "default=%%b"
  11.         if /i "%%a"=="displayorder" set boot-1=%%b
  12.         echo %%a | findstr "{.*}" >nul 2>nul && (
  13.                 set /a n+=1
  14.                 set boot-!n!=%%a
  15.         )
  16. )
  17. del /f /q "%temp%\bootlist.txt"
  18. :menu
  19. for /l %%a in (1,1,!n!) do (
  20.         echo; [%%a]        *****************************************************************
  21.         echo;
  22.         bcdedit /enum !boot-%%a! /v | findstr /r "!boot-%%a! device osdevice description"
  23.         echo;
  24. )
  25. echo;
  26. set /p input=请选择您要删除的启动项:
  27. cls & bcdedit /enum !boot-%input%! /v & echo;
  28. echo;你确定要删除上面的启动项吗? Y 继续
  29. set /p ok=
  30. if /i not ok==y goto menu
  31. bcdedit /delete !boot-%input%! /cleanup /f

  32. pause
复制代码

点评

好的,谢谢了。 我看看能不能改成自动选择的。  详情 回复 发表于 2017-10-29 23:05
回复

使用道具 举报

8#
 楼主| 发表于 2017-10-29 23:05:57 | 只看该作者
nttwqz 发表于 2017-10-29 18:11
好吧,这个是简单的实现办法

好的,谢谢了。
我看看能不能改成自动选择的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 08:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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