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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Найти нужный guid загрузочной записи по ее имени в биос и установить первой в списке

Ответить
Настройки темы
CMD/BAT - Найти нужный guid загрузочной записи по ее имени в биос и установить первой в списке

Ветеран


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


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

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


Изменения
Автор: severagent007
Дата: 30-11-2017
Надумал так:
bcdedit /enum firmware>%userprofile%\desktop\efi.txt
выводит список записей в файл или может прямо в окно командной строки, интересует стандартная запись прошивки EFI Hard Drive, выдает такое в консоль или в файл efi.txt
Код: Выделить весь код
Firmware Boot Manager
---------------------
identifier         {fwbootmgr}
displayorder    {961d2ca6-ccca-11e7-ad4a-c153e375ded0}
                      {bootmgr}
                      {961d2ca7-ccca-11e7-ad4a-c153e375ded0}
timeout 2

Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume7
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit                                  {globalsettings}
default                                  {current}
resumeobject                        {961d2caa-ccca-11e7-ad4a-c153e375ded0}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30

Firmware Application (101fffff)
-------------------------------
identifier                  {961d2ca6-ccca-11e7-ad4a-c153e375ded0} -вот он, родимый
description               EFI Hard Drive

Firmware Application (101fffff)
-------------------------------
identifier {961d2ca7-ccca-11e7-ad4a-c153e375ded0}
description EFI Internal Shell
как автоматически подставить его гуид в следующую команду:

bcdedit /set {fwbootmgr} displayorder {сюдаGUID} /addfirst

Еще можно прочитать в реестре, вот командой:
regedit.exe -ea C:\environment.reg "HKEY_LOCAL_MACHINE\BCD00000000\Objects"
Есть такая строка:

[HKEY_LOCAL_MACHINE\BCD00000000\Objects\{dcb4cb63-cfc5-11e7-97d9-806e6f6e6963}\Elements\12000004]
"Element"="EFI Hard Drive"


Красиво было бы прочитать его без использовпния файла, но и с использованием тхт файла тоже красиво.
Спасибо!

Отправлено: 23:48, 23-11-2017

 

Ветеран


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

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


Код: Выделить весь код
bcdedit /enum firmware>enum.txt
set lgfl=enum.txt
set nwlg=outlog.txt
::указать кол-во вывода строк до искомой
set num1=3
::указать кол-во вывода строк после искомой
set num2=0

set word=EFI Hard Drive
cls
setlocal EnableDelayedExpansion
for /f "delims=: tokens=1" %%a in ('findstr /n /r  /c:"%words%" %lgfl%') do  (call :pars %%a)

SetLocal EnableExtensions
for /f "tokens=2-5" %%b in ('findstr /r "{.*}" %nwlg%') do set guid=%%b

echo guid EFI Hard Drive=%guid%
pause
:: после отладки и вывода верного guid, раскомментировать команду.
::bcdedit /set {fwbootmgr} displayorder %guid% /addfirst 
pause
exit /b
 
:pars
set /a isum=%num1%+%num2%+1
if %num1% lss %1 (
    set /a num=%1-%num1%-1
    set "skp=skip=!num! "
    ) else (
    set "skp="
    set /a isum=%num2%+%1
    )
for /f "%skp%tokens=*" %%a in (%lgfl%) do (
    set /a isum-=1
    echo %%a
    echo %%a>>%nwlg%
    if !isum! lss 1  exit /b)
exit /b
Вот так получилось. Скрипт находит и ставит EFI Hard Drive первым в списке загрузок в ефи биосе. В других пк имя стандартной бут записи может быть другое, например Hard Drive.
В моем случае изменения порядка загрузки в нврам постоянные, слышал, что bcdedit на некоторых пк далает это разово, видимо, не хочет/не может синхронизировать свой bcd c nvram.

Зачем это нужно? Для моей программки переключения виндовс/андроид в дуалбут на планшете, именно этот скрипт она запускает только один раз при первом запуске. А переключение происходит подменой/переименованием виндового или андроидыного загрузчика в правильное имя bootx64.efi на ефи разделе, пару проверок и ребут. А если будет в биосе по дефолту виндовс или андроид в загрузке, будет ошибка секур бута. Имя на всех планшетах этой модели одинаковое, а guid нужно получить, так как он разный в каждой Виндовс.

А перезаписывать каждый раз порядок записей в нврам далеко не лучший вариант, да и в моем случае это еще и не работает для переключения дуалбута, (особенность секур бут и автоматически переключаемых асрi профилей GMIN/Windows в биос). Две виндовс можно, вин/андр не получится переключить.
Цитата severagent007:
Спасибо! »
Всегда пожалуйста.
Нашел интересный ошибка в скрипте и исправил. Оказывается в русской виндовс вывод bcdedit весь на английском... кроме ключевого в поиске слова identifier - идентификатор! И в русском и, возможно и в других не англ. образах, этот скрипт не найдет гуид). Правильнее сразу искать по {...} и тогда не важен язык системы.

Последний раз редактировалось severagent007, 26-11-2017 в 00:34.


Отправлено: 19:08, 24-11-2017 | #2



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

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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Найти нужный guid загрузочной записи по ее имени в биос и установить первой в списке

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Создание папок из txt файла nineline Скриптовые языки администрирования Windows 41 22-01-2021 14:54
CMD/BAT - [решено] Переменная? Подстановка в команду данных из файла. Не получается.. NLOLegion Скриптовые языки администрирования Windows 4 04-11-2017 13:36
Скрипт вывода активных URL из файла XXXp Вебмастеру 4 03-05-2014 12:03
CMD/BAT - [решено] помогите дописать команду - чтение строк из файла jannaly Скриптовые языки администрирования Windows 4 02-06-2012 17:38
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58




 
Переход