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

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

Ответить
Настройки темы
CMD/BAT - [решено] Проблема с переходом к определенному ключу реестра

Аватара для VoinLuny

Новый участник


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

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


Всем доброго времени суток в которое Вы читаете данный пост!
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. Помогите, пожалуйста!

Отправлено: 17:13, 25-05-2012

 

Ветеран


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

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


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

Последний раз редактировалось Iska, 25-05-2012 в 22:31. Причина: Исправлена тупая описка

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:26, 25-05-2012 | #2



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

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


Аватара для VoinLuny

Новый участник


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

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


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

Отправлено: 21:32, 25-05-2012 | #3


Ветеран


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

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


1. Исполняется команда:
Код: Выделить весь код
reg.exe query "%sPath%"
2. Вывод команды «reg.exe» передаётся по конвейеру («|») на вход команды:
Код: Выделить весь код
find.exe "{"
которая фильтрует полученный текст, оставляя только строки, в которых содержится указанный символ («{»).

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

* чтобы указать, что мы разбираем именно вывод команды, а не содержимое файла, внутри скобок мы используем апострофы («'…'»), внутри которых мы указываем саму команду (в данном случае — несколько команд, объединённых конвейером);
* чтобы символ конвейера был отнесён интерпретатором не к самой команде «for /f», а к указанным для исполнения командам, мы его экранируем символом «^»;
* дабы строки воспринимались цельной лексемой — мы указываем атрибутом «delims» отсутствие разделителей лексем [только сейчас увидел и поправил в предыдущем коде свою очередную тупую описку — двойной знак равенства при атрибуте «delims»].

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

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

Отправлено: 22:36, 25-05-2012 | #4


Аватара для VoinLuny

Новый участник


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

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


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

Отправлено: 00:37, 26-05-2012 | #5


Ветеран


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

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


Команда:
Код: Выделить весь код
reg.exe query "<путь>"
перечисляет содержимое первого уровня указанного раздела. В том числе и имя подраздела «…\0000», который там находится. Было бы несколько подразделов и параметров в разделе — команда вывела бы их все на экран.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:13, 26-05-2012 | #6


Аватара для VoinLuny

Новый участник


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

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


Всё понял, огромное спасибо!!!

Отправлено: 02:52, 26-05-2012 | #7


Ветеран


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

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


При выполнении скрипта появляется непонятный раздел (его нет в реестре) и соответственно, ошибка. Полтергейст какой-то. Поясните, что за раздел и как убрать сообщение об ошибке.
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
картинка

Последний раз редактировалось sov44, 28-05-2012 в 13:56.


Отправлено: 12:55, 28-05-2012 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
FreeBSD - Авторизация root по ключу tehnik_srs Общий по FreeBSD 0 10-12-2011 17:35
[решено] Проблема с переходом монитора в полноэкранный режим viktor112007 Непонятные проблемы с Железом 6 12-05-2010 00:28
Доступ - [решено] Ошибка при доступе к ключу реестра и RegDelNull.exe Artell Microsoft Windows 2000/XP 2 20-01-2010 13:05
Проблема с переходом на win2003 c win2000 (DHCP) SOFAT Microsoft Windows NT/2000/2003 2 31-10-2006 14:28
C переходом на летнее время ruslandh О сайте и форуме 9 07-04-2002 08:29




 
Переход