Показать полную графическую версию : [решено] Проблема с переходом к определенному ключу реестра
VoinLuny
25-05-2012, 17:13
Всем доброго времени суток в которое Вы читаете данный пост!
http://forum.oszone.net/thread-184844.html здесь я нашел код для записи значения из реестра в .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. Помогите, пожалуйста!
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
25-05-2012, 21:32
Iska, благодарю за решение, а можно попросить комментарии? Просто я не совсем понимаю принцип работы оператора FOR даже читая мануал по нему, хотелось бы человеческим языком, чтобы понять, что пишу. Заранее спасибо!
1. Исполняется команда:
reg.exe query "%sPath%"
2. Вывод команды «reg.exe» передаётся по конвейеру («|») на вход команды:
find.exe "{"
которая фильтрует полученный текст, оставляя только строки, в которых содержится указанный символ («{»).
3. Вывод команды «find.exe» передаётся на построчный разбор команде «for /f»:
* чтобы указать, что мы разбираем именно вывод команды, а не содержимое файла, внутри скобок мы используем апострофы («'…'»), внутри которых мы указываем саму команду (в данном случае — несколько команд, объединённых конвейером);
* чтобы символ конвейера был отнесён интерпретатором не к самой команде «for /f», а к указанным для исполнения командам, мы его экранируем символом «^»;
* дабы строки воспринимались цельной лексемой — мы указываем атрибутом «delims» отсутствие разделителей лексем [только сейчас увидел и поправил в предыдущем коде (http://forum.oszone.net/post-1922670.html#post1922670) свою очередную тупую описку — двойной знак равенства при атрибуте «delims»].
4. Результаты разбора будут доступны внутри цикла разбора «for /f» через указанную переменную «%%i».
5. После разбора первой же строки мы безусловно переходим на указанную метку «:Teminate», тем самым обрывая разбор.
VoinLuny
26-05-2012, 00:37
Iska, объяснил доступно, спасибо! :clapping:
Последний момент: Когда я выполнил код который ты скинул - реестр открылся в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0001\System\CurrentControlSet\Control\VIDEO\{1A3EB677-F210-43AE-85B9-C6964FF59BF6}\0000, но я не заметил в твоем коде упоминания последнего подраздела (0000). Как так?
Команда:
reg.exe query "<путь>"
перечисляет содержимое первого уровня указанного раздела. В том числе и имя подраздела «…\0000», который там находится. Было бы несколько подразделов и параметров в разделе — команда вывела бы их все на экран.
VoinLuny
26-05-2012, 02:52
Всё понял, огромное спасибо!!!
При выполнении скрипта появляется непонятный раздел (его нет в реестре) и соответственно, ошибка. Полтергейст какой-то. :) Поясните, что за раздел и как убрать сообщение об ошибке.
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
картинка (http://savepic.su/2088441.htm)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.