Board logo

标题: [系统相关] [已解决]bcdedit修改bcd启动文件的批处理 [打印本页]

作者: freesoft00    时间: 2014-3-16 21:05     标题: [已解决]bcdedit修改bcd启动文件的批处理

  1. @echo off
  2. cls
  3. setlocal ENABLEDELAYEDEXPANSION
  4. if %1*==bcd* goto bcd
  5. :top
  6. cls
  7. echo.
  8. echo 删除 BOOTMGR BCD 启动项目
  9. echo.
  10. call :bcd
  11. echo.
  12. echo 请选择要删除的项目编号并回车确认(1.2.3.4...)_______
  13. echo Ctrl+C 可以中断脚本
  14. echo.
  15. set /p p=
  16. if %p% LSS 1 GOTO ERROR1
  17. if %p% GTR %n% goto error1
  18. set /a p=%p%*3-2
  19. for /f "skip=%p% tokens=1,2" %%c in ('call %0 bcd') do (
  20. bcdedit /delete %%d
  21. echo 项目删除指令运行完毕!
  22. goto end1
  23. )
  24. :error1
  25. echo 输入错误,按任意键重来! && pause >nul
  26. goto top
  27. :bcd
  28. set n=0
  29. for /f "tokens=1,2*" %%c in ('bcdedit /v') do (
  30. if %%c*==标识符* (
  31.   set /a n=!n!+1
  32.   echo ---!n!------------------------------------------------   
  33.   echo   ID: %%d %%e
  34.   )
  35. if %%c*==description* echo 说明: %%d %%e
  36. )
  37.   echo ---End--------------------------------------------------
  38. :end1
复制代码
dos菜鸟网友的代码,我需要在列表中同时显示出设备,然后选择哪个项可以删除。
还需要修改说明,选择第几项后,输入新的说明后就更改。
代码应该如何写呢。
作者: DAIC    时间: 2014-3-16 22:24

我需要在列表中同时显示出设备

29到36行改成这样:
  1. for /f "tokens=1*" %%c in ('bcdedit /v') do (
  2.     if %%c*==标识符* (
  3.         set /a n=!n!+1
  4.         echo ---!n!------------------------------------------------
  5.         echo   ID: %%d
  6.     ) else if %%c*==description* (
  7.         echo 说明: %%d
  8.     ) else if %%c*==device* (
  9.         echo 设备: %%d
  10.     )
  11. )
复制代码

作者: freesoft00    时间: 2014-3-16 23:26

谢谢,有设备显示了,但是删除的时候无法删除。
我在代码最后加了一个pause暂停显示上面的信息。可是运行中需要按两次次任意键才可以到输入数字项的地方。
这个代码是否再改进一下,或者从写一些。
另外,修改说明的部分如何写。
bcdedit修改锁门的命令好像是
bcdedit /set {id} description "新的说明"

批处理给用户一个选,按1是删除,按2是修改,然后进行下面的具体操作。如果可以,增加一个3添加也可以.
作者: apang    时间: 2014-3-17 09:29

没做测试
  1. @echo off & setlocal enabledelayedexpansion
  2. :top
  3. cls & echo,1.删除 BOOTMGR BCD 启动项目
  4. echo,2.修改 description
  5. set /p choice=选择[1-2]:
  6. echo,%choice%|findstr "^[1-2]$" || goto :top
  7. :st
  8. cls & set "n="
  9. for /f "tokens=1*" %%a in ('bcdedit /v') do (
  10.     if "%%a"=="标识符" (
  11.         set /a n+=1
  12.         echo,---!n!------------------------------------------------
  13.         set "ID!n!=%%b" & echo,  ID: %%b
  14.     )
  15.     if /i "%%a"=="description" echo,说明: %%b
  16.     if /i "%%a"=="device" echo,设备: %%b
  17. )
  18. echo,---End----------------------------------------------
  19. echo,&echo,选择一个项目编号并回车确认[1-%n%]:
  20. set /p p=
  21. if not defined ID%p% goto :st
  22. if "%choice%"=="1" (
  23.     bcdedit /delete !ID%p%!
  24. ) else (
  25.     set /p p1=输入修改后的 description :
  26.     bcdedit /set !ID%p%! description "!p1!"
  27. )
  28. pause
复制代码

作者: DAIC    时间: 2014-3-17 10:41

可是运行中需要按两次次任意键才可以到输入数字项的地方。

echo ---End--------------------------------------------------
在这句上面加一句:
  1. goto :eof
复制代码

作者: DAIC    时间: 2014-3-17 10:48

有设备显示了,但是删除的时候无法删除。

set /a p=%p%*3-2
改成:
set /a p=%p%*3-1
作者: freesoft00    时间: 2014-3-18 14:38

感谢提点,谢谢了




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2