Как найти строку в блоке вывода cmd, но вставить другую из блока?

Есть вывод из команды bcdedit.exe /enum firmware
-------------------------------
идентификатор           {cd433883-b798-11ed-9f7d-806e6f6e6963}
description             Hard Drive

Приложение микропрограммы (101fffff)
-------------------------------
идентификатор           {ea6a5a16-d6bf-11ee-a255-806e6f6e6963}
device                  unknown
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             USB HDD

Приложение микропрограммы (101fffff)
-------------------------------
идентификатор           {fce77d1c-542f-11ef-a47d-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\UBUNTU\SHIMX64.EFI
description             Kubuntu

Нужно найти значение description, но вставить в нужное место идентификатор.
Вот так нахожу
for /f "tokens=*" %%i IN ('^" c:\Windows\System32\bcdedit.exe /enum firmware ^| findstr /C:"Arch" ^"') DO echo %%i

Вставить нужно в такую строку
bcdedit /set {fwbootmgr} bootsequence {ВставитьСюдаИдентификатор} & shutdown -r -f -t 0
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
BlagoYar
@BlagoYar Автор вопроса
Решение
@echo off
setlocal enableextensions enabledelayedexpansion
set "p1=%1"
set "p2=%2"
For /F "Tokens=1* Delims= " %%a In ('bcdedit /enum firmware') Do (
if %%a EQU идентификатор set "ID=%%b"
if %%a EQU device set "DEV=%%b"
if %%a EQU path set "PATH=%%b"
if %%a EQU description (
set "DESCR=%%b"
if not defined p2 call :onepar %p1% else
  if "!DESCR!":"!DEV!" EQU %1:%2 (
   echo."Изменяем загрузочную запись с описанием %p1% и устройством %p2%"
   C:\Windows\System32\bcdedit.exe /set {fwbootmgr} bootsequence !ID! & C:\Windows\System32\shutdown.exe /r /f /t 0
)
set "ID="
set "DEV="
set "PATH="
set "DESCR="
)
)
goto :EOF

:onepar
if "!DESCR!" EQU %1 (
echo."Изменяем загрузочную запись с описанием %1"
C:\Windows\System32\bcdedit.exe /set {fwbootmgr} bootsequence !ID! & C:\Windows\System32\shutdown.exe /r /f /t 0
)

Написал NickM с форума OSZone, за что ему большое спасибо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Можно в цикле проходить по всему выводу bcdedit.exe (findstr убрать, разумеется), запоминать идентификатор в переменную, и при обнаружении Arch - запускать команду, с идентификатором из переменной. Разумеется придётся использовать SETLOCAL ENABLEDELAYEDEXPANSION.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы