CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Ответить
Аватара пользователя
VoinLuny

CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение VoinLuny »

Всем доброго времени суток в которое Вы читаете данный пост!

CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.?
здесь я нашел код для записи значения из реестра в .txt файл.



Код:

Код: Выделить всё

For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Binary Fortress Software\DisplayFusion\Wallpaper"^|Find /I "Wallpaper_0_FileName"`) Do Echo %%J>text.txt

Всё бы хорошо, но путь к моему ключу выглядит так:



Код:

Код: Выделить всё

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0001\System\CurrentControlSet\Control\VIDEO\{1A3EB677-F210-43AE-85B9-C6964FF59BF6}\0000

Моя проблема:

Мне нужно, чтобы вместо {1A3EB677-F210-43AE-85B9-C6964FF59BF6} батник просто проходил в первый подраздел раздела VIDEO, поскольку на разных компьютерах эти идентификаторы будут разные, а мне нужно, чтобы файл работал на всех компах с Win7. Помогите, пожалуйста!
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение Iska »

VoinLuny, например, так:



Код:

Код: Выделить всё

@echo off
setlocal enableextensions enabledelayedexpansion
set sPath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0001\System\CurrentControlSet\Control\VIDEO
for /f "delims=" %%i in ('reg.exe query "%sPath%" ^| find.exe "{"') do (
	reg.exe query "%%i"
	goto :Teminate
)
:Teminate
endlocal
exit /b 0
Аватара пользователя
VoinLuny

Re: CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение VoinLuny »

Iska, благодарю за решение, а можно попросить комментарии? Просто я не совсем понимаю принцип работы оператора FOR даже читая мануал по нему, хотелось бы человеческим языком, чтобы понять, что пишу. Заранее спасибо!
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение Iska »

1. Исполняется команда:



Код:

Код: Выделить всё

reg.exe query "%sPath%"

2. Вывод команды «reg.exe» передаётся по конвейеру («|») на вход команды:



Код:

Код: Выделить всё

find.exe "{"

которая фильтрует полученный текст, оставляя только строки, в которых содержится указанный символ («{»).



3. Вывод команды «find.exe» передаётся на построчный разбор команде «for /f»:



* чтобы указать, что мы разбираем именно вывод команды, а не содержимое файла, внутри скобок мы используем апострофы («'…'»), внутри которых мы указываем саму команду (в данном случае — несколько команд, объединённых конвейером);

* чтобы символ конвейера был отнесён интерпретатором не к самой команде «for /f», а к указанным для исполнения командам, мы его экранируем[/i] символом «^»;

* дабы строки воспринимались цельной лексемой — мы указываем атрибутом «delims» отсутствие разделителей лексем [только сейчас увидел и поправил в
CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра
свою очередную тупую описку — двойной знак равенства при атрибуте «delims»]
.



4. Результаты разбора будут доступны внутри цикла разбора «for /f» через указанную переменную «%%i».



5. После разбора первой же строки мы безусловно переходим на указанную метку «:Teminate», тем самым обрывая разбор.
Аватара пользователя
VoinLuny

Re: CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение VoinLuny »

Iska, объяснил доступно, спасибо! Изображение

Последний момент: Когда я выполнил код который ты скинул - реестр открылся в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0001\System\CurrentControlSet\Control\VIDEO\{1A3EB677-F210-43AE-85B9-C6964FF59BF6}\0000, но я не заметил в твоем коде упоминания последнего подраздела (0000). Как так?
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение Iska »

Команда:



Код:

Код: Выделить всё

reg.exe query ""

перечисляет содержимое первого уровня указанного раздела. В том числе и имя подраздела «…\0000», который там находится. Было бы несколько подразделов и параметров в разделе — команда вывела бы их все на экран.
Аватара пользователя
sov44

Re: CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Сообщение sov44 »

При выполнении скрипта появляется непонятный раздел (его нет в реестре) и соответственно, ошибка. Полтергейст какой-то. Изображение Поясните, что за раздел и как убрать сообщение об ошибке.

Windows XP SP3 , Office 2003



Код:

Код: Выделить всё

@ECHO OFF
setlocal enableextensions enabledelayedexpansion
SET UNISTALL=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\9140110900063D11C8EF10054038389C\Patches
FOR /f "tokens=12 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
FOR /f "tokens=1,2,3" %%b IN ('reg query "%UNISTALL%\%%a" ^| FIND /I "MoreInfoURL"') DO (
FOR /f "tokens=4 delims=/" %%c IN ("%%d") DO (
set "Upd=%%c"
ECHO KB!Upd!
)))
pause
exit

картинка
Ответить

Вернуться в «Скриптовые языки администрирования Windows»