Как найти строку в выводе командной строки (cmd) и заменить её на другую строку из этого же вывода?

Как я могу извлечь значение поля "description" из вывода команды <code>bcdedit.exe /enum firmware</code>, заменив в заданной строке идентификатор на его соответствующее значение? Пример строки для замены выглядит так: <pre><code class="dos">bcdedit /set {fwbootmgr} bootsequence {ВставитьСюдаИдентификатор} &amp; shutdown -r -f -t 0</code></pre>
  • 22 октября 2024 г. 23:02
Ответы на вопрос 2
Для выполнения вашей задачи через командную строку Windows, вам потребуется использовать комбинацию команд, чтобы извлечь значение поля "description" из результата команды `bcdedit.exe /enum firmware` и заменить в строке идентификатор.

Вот шаги, которые вам нужно пройти:

1. **Получить значение поля "description":** Запустите команду `bcdedit.exe /enum firmware` и используйте инструменты командной строки для обработки вывода.

2. **Извлечь идентификатор:** Вам нужно будет найти и сохранить нужный идентификатор, который находится рядом с описанием.

3. **Подготовить и выполнить команду:** Сформируйте команду с нужным идентификатором.

Вот примерный скрипт, который можно выполнить в командной строке (cmd):

```batch
@echo off
setlocal enabledelayedexpansion

rem Запускаем bcdedit и находим нужный идентификатор
for /f "tokens=1,2* delims= " %%A in ('bcdedit.exe /enum firmware ^| findstr /C:"description"') do (
    set "description=%%C"
    set "identifier=%%A"
)

rem Проверяем, были ли найдены значения
if not defined identifier (
    echo Идентификатор не найден.
    exit /b
)

rem Подставляем идентификатор в строку
set "cmd=bcdedit /set {fwbootmgr} bootsequence {identifier} & shutdown -r -f -t 0"
set "cmd=!cmd:{identifier}=%identifier%!"

rem Выводим конечную команду
echo !cmd!

rem Выполняем конечную команду (раскомментируйте, если хотите выполнить)
rem cmd /c !cmd!
```

### Примечания:
- Скрипт использует `for /f` для обработки вывода команды и извлечения нужного значения.
- Значения извлекаются на основе поиска строки, содержащей "description". Чтобы выбрать конкретное описание, вы можете добавить фильтрацию по определенному значению.
- Убедитесь, что у вас есть права администратора для выполнения команды `bcdedit`.

### Запуск скрипта:
Сохраните этот скрипт в файл с расширением `.bat` и выполните его, чтобы получить и подставить значение идентификатора. Измените условия и фильтры в скрипте, чтобы соответствовать вашим конкретным требованиям.
Можно в цикле проходить по всему выводу bcdedit.exe (findstr убрать, разумеется), запоминать идентификатор в переменную, и при обнаружении Arch - запускать команду, с идентификатором из переменной. Разумеется придётся использовать SETLOCAL ENABLEDELAYEDEXPANSION.
Похожие вопросы