Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как найти строку в блоке вывода bat, но вставить другую?

Ответить
Настройки темы
CMD/BAT - [решено] Как найти строку в блоке вывода bat, но вставить другую?

Аватара для Mancoffee

Старожил


Сообщения: 425
Благодарности: 10


Конфигурация

Профиль | Отправить PM | Цитировать


Есть вывод команды bcdedit

Код: Выделить весь код
Приложение микропрограммы (101fffff)
-------------------------------
идентификатор           {08466ee1-90f9-11ef-a538-806e6f6e6963}
device                  partition=\Device\HarddiskVolume13
path                    \EFI\UBUNTU\SHIMX64.EFI
description             ubuntu

Приложение микропрограммы (101fffff)
-------------------------------
идентификатор           {58ec2b43-90b8-11ef-a537-806e6f6e6963}
device                  partition=H:
path                    \EFI\BOOT\BOOTX64.EFI
description             UEFI OS

Приложение микропрограммы (101fffff)
-------------------------------
идентификатор           {58ec2b44-90b8-11ef-a537-806e6f6e6963}
device                  partition=I:
path                    \EFI\BOOT\BOOTX64.EFI
description             UEFI OS
нужно найти идентификатор требуемой ОС и вставить её во вторую команду, но ИД находится перед названием ОС.
Как это сделать?

Отправлено: 08:29, 23-10-2024

 

Аватара для NickM

Ветеран


Contributor


Сообщения: 4553
Благодарности: 1085

Профиль | Отправить PM | Цитировать


Понятно, что изначально хотелось выбирать идентификатор по описанию, но, какой смысл в этой всей чехарде, когда проще прописать идентификаторы напрямую и менять конфигурацию?

Отправлено: 17:26, 24-10-2024 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Mancoffee

Старожил


Сообщения: 425
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата NickM:
Вот, на примере Вашего вывода - сравниваемые переменные передаются в сценарий в виде параметров: »
Не, всё равно echo ничего не выводит.
Ладно, хрен с ним.
Спасибо, что старались помочь.

ПС. Спойлер не открывается. Ничего не показывает.

Цитата NickM:
когда проще прописать идентификаторы напрямую и менять конфигурацию? »
Это понятно, но хотелось бы так сказать идеальный вариант, при котором, если ИД поменяется, то не нужно скрипт переписывать.

Отправлено: 23:50, 24-10-2024 | #32


Аватара для NickM

Ветеран


Contributor


Сообщения: 4553
Благодарности: 1085

Профиль | Отправить PM | Цитировать


Цитата Mancoffee:
ПС. Спойлер не открывается. Ничего не показывает. »
Странно, под спойлером скрин, как работает сценарий;

Цитата Mancoffee:
Не, всё равно echo ничего не выводит. »
Последний сценарий Вам потребуется переделывать под Себя, т.к. он обрабатывает текстовый файл, а не вывод bcdedit.

Но, в любом случае, его нужно/ нужно будет чуть-чуть переделать и обрабатывать параметры в другом порядке, сначала decription, после device, и сделать второй параметр не обязательным.

Отправлено: 06:33, 25-10-2024 | #33


Аватара для NickM

Ветеран


Contributor


Сообщения: 4553
Благодарности: 1085

Профиль | Отправить PM | Цитировать


Цитата NickM:
о, в любом случае, его нужно/ нужно будет чуть-чуть переделать и обрабатывать параметры в другом порядке, сначала decription, после device, и сделать второй параметр не обязательным. »
Типа такого, не претендую на последнюю истину - сценарию передаём два параметра "description" и "device", первый обязательный, второй, если требуется уточнение для записи:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set "p1=%1"
set "p2=%2"
For /F "Tokens=1* Delims= " %%a In ('type "%~dp0bcdedit.out"') 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%"
   echo."bcdedit /set {fwbootmgr} bootsequence !ID!"
)
set "ID="
set "DEV="
set "PATH="
set "DESCR="
)
)
goto :EOF

:onepar
if "!DESCR!" EQU %1 (
echo."Изменяем загрузочную запись с описанием %1"
echo."bcdedit /set {fwbootmgr} bootsequence !ID!"
)
Скрытый текст

Отправлено: 07:37, 25-10-2024 | #34


Аватара для Mancoffee

Старожил


Сообщения: 425
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата NickM:
Странно, под спойлером скрин, как работает сценарий; »
В письме уведомления ссылка без спойлера на imgur, перешёл, там серверная ошибка 429 - слишком много запросов. Поэтому и пустой спойлер.
Цитата NickM:
Типа такого »
Пишет "Не удаётся найти указанный файл". Посмотрел в код, скопировал весь вывод из bat и вставил в созданный файл bcdedit.out, прописал значения в set dev и descr, выполняю, пусто, ничего не выдаёт.

ПС. Про кодировку помню.

Последний раз редактировалось Mancoffee, 25-10-2024 в 09:13.


Отправлено: 09:06, 25-10-2024 | #35


Аватара для NickM

Ветеран


Contributor


Сообщения: 4553
Благодарности: 1085

Профиль | Отправить PM | Цитировать


Цитата Mancoffee:
осмотрел в код, скопировал весь вывод из bat и вставил в созданный файл bcdedit.out, прописал значения в set dev и descr, выполняю, пусто, ничего не выдаёт. »
Похоже, что Вы не понимаете, что делать.

Вот, сценарий обрабатывающий вывод команды:
Код: Выделить весь код
bcdedit /enum
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set "p1=%1"
set "p2=%2"
For /F "Tokens=1* Delims= " %%a In ('bcdedit /enum') 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%"
   echo."bcdedit /set {fwbootmgr} bootsequence !ID!"
)
set "ID="
set "DEV="
set "PATH="
set "DESCR="
)
)
goto :EOF

:onepar
if "!DESCR!" EQU %1 (
echo."Изменяем загрузочную запись с описанием %1"
echo."bcdedit /set {fwbootmgr} bootsequence !ID!"
)
Поясняющий скрин прилагается:
Скрытый текст
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:52, 25-10-2024 | #36


Аватара для Mancoffee

Старожил


Сообщения: 425
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата NickM:
Поясняющий скрин прилагается: »
Странно, но не хочет работать.


С кавычками заработало. То бишь кавычки я так понимаю в любом случае нужны, даже если нет пробелов/спец. символов.
Но заработало тоже не до конца.
Код: Выделить весь код
"Изменяем загрузочную запись с описанием "Arch""
"bcdedit /set {fwbootmgr} bootsequence "

Отправлено: 11:30, 25-10-2024 | #37


Аватара для NickM

Ветеран


Contributor


Сообщения: 4553
Благодарности: 1085

Профиль | Отправить PM | Цитировать


Цитата Mancoffee:
То бишь кавычки я так понимаю в любом случае нужны, даже если нет пробелов/спец. символов. »
Да, оба параметра обрамляются кавычками, т.к. происходит сравнение строк в кавычках.

Всё, должно работать.

На вашем скрине запечатлён сценарий из предшествующего ответа:
Цитата NickM:
Последний сценарий Вам потребуется переделывать под Себя, т.к. он обрабатывает текстовый файл, а не вывод bcdedit. »
А, тестировать нужно этот:
Цитата NickM:
Вот, сценарий обрабатывающий вывод команды: »
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:47, 25-10-2024 | #38


Аватара для Mancoffee

Старожил


Сообщения: 425
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата NickM:
А, тестировать нужно этот: »
Да, вот так работает
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set "p1=%1"
set "p2=%2"
For /F "Tokens=1,2* 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%"
   echo."bcdedit /set {fwbootmgr} bootsequence !ID!"
)
set "ID="
set "DEV="
set "PATH="
set "DESCR="
)
)
goto :EOF

:onepar
if "!DESCR!" EQU %1 (
echo."Изменяем загрузочную запись с описанием %1"
echo."bcdedit /set {fwbootmgr} bootsequence !ID!"
)

А в так сказать параметрах к bat файлу операторы сравнения работать будут, точнее должны?
Например для поиска того же UEFI OS, если искать по второму параметру, то может быть как указана буква к диску, так и volume.

Отправлено: 12:09, 25-10-2024 | #39


Аватара для NickM

Ветеран


Contributor


Сообщения: 4553
Благодарности: 1085

Профиль | Отправить PM | Цитировать


Цитата Mancoffee:
Например для поиска того же UEFI OS, если искать по второму параметру, то может быть как указана буква к диску, так и volume. »
Строки сравниваются полностью, а не часть строк, поэтому и передавать следует полную строку в обоих параметрах.

Отправлено: 12:31, 25-10-2024 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как найти строку в блоке вывода bat, но вставить другую?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Принтер - Каким образом можно вставить, лоток вывода бумаги Сanon 2900 b1844133 Прочее железо 0 15-02-2020 11:16
CMD/BAT - [решено] заменить с помощью bat'ника одну строку на другую warkdimka Скриптовые языки администрирования Windows 2 18-02-2016 09:28
[решено] В системном блоке хлопок (звук) такой как будто петарда взорвалась. Но все работает, micro8 Непонятные проблемы с Железом 17 18-03-2011 23:01
банально но как (!ПРАВИЛЬНО!) сохранить флешку и вставить её Denis Shutka Вебмастеру 1 09-01-2005 23:37
Как прекодлировать строку из одной кодировки в другую Vlad Drakula Вебмастеру 11 05-07-2004 22:56




 
Переход