|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск строки в значени ключа реестра. |
|
|
CMD/BAT - [решено] Поиск строки в значени ключа реестра.
|
Новый участник Сообщения: 41 |
Профиль | Отправить PM | Цитировать Подскажите пожалуйста, как проверить, содержится ли в значении ключа реестра искомая строка (с использованием маски *text*) и если содержится, присвоить определённой переменной определённое значение.
Как прочитать реестр, я знаю: Пробовал сам сделать, не чего не получилось... Заранее благодарен. |
|
Отправлено: 20:31, 26-09-2009 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать user_123, можете попробовать на основе такого:
@echo off setlocal enableextensions enabledelayedexpansion rem If HKCU\Console\FaceName like "Lucida Console" or "Consolas"? --> Set SomeVar to SomeValue1 else SomeValue2 for /f "skip=3 tokens=3* delims= " %%i in ('reg.exe query "HKCU\Console" /v "FaceName"') do ( (echo %%i|findstr.exe /r /i /c:".*consol.*">nul) && set SomeVar=SomeValue1|| set SomeVar=SomeValue2 ) echo Result: SomeVar=[%SomeVar%] endlocal exit /b 0 |
Отправлено: 21:14, 26-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Iska, Спасибо.
Однако, не работает... Не зависимо от того, имеется ли искомая строка, или нет, всё время присваивается 2-ое значение переменной. Ошибок в синтаксисе CMD не находит... И предложенный Вами метод чтения ключа реестра тоже на работает (переменная вообще не получает значение), я написал это немного по-другому... А если ключа реестра нет, то нет и значения у переменной тоже нет... А, в целом, у меня так написано: |
Последний раз редактировалось user_123, 27-09-2009 в 00:56. Отправлено: 00:27, 27-09-2009 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата user_123:
Сие может зависеть отчасти от версии reg.exe; Вы можете попробовать, как указывал amel27, не использовать «skip», а фильтровать выходной поток команды «reg.exe», только используя в качестве фильтра имя параметра: for /f "tokens=3* delims= " %%i in ('reg.exe query "HKCU\Console" /v "FaceName"^|find.exe /i "FaceName"') do ( Цитата user_123:
выдаёт ожидаемое: Цитата:
Цитата user_123:
|
||||
Отправлено: 02:43, 27-09-2009 | #4 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Iska, добавление
приводит к тому, что не присваивается ни 1, ни 2 переменная.
Дело действительно было в i / j. Поставил "j". Сначала не чего не изменилось... Как позже выяснилось проблема была в регистре "i". т.е. надо было не так писать: а так: Спасибо большое за помошь. |
|
Отправлено: 10:30, 27-09-2009 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать user_123, да, это так:
Цитата %systemroot%\help\ntcmds.chm:
|
|
Отправлено: 10:58, 27-09-2009 | #6 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Хотя папка help есть... Подскажите пожалуйста ещё кое-что... Я не могу до конца разобраться в синтаксисе команды "findstr". В значении ключа реестра, в котором ищется строка содержится путь к ехе-файлу (может быть в кавычках) и дополнительные ключи (параметры). Мне надо определить, содержит ли значение ключа следующее: и если всё соответствует (и путь, и параметры запуска) присвоить значение для переменной. Смотрел findstr /? Там сказано что для поиска нескольких строк надо писать через пробел... Но в данном случае условие определяется по принципу дизъюнкции (или), а мне надо, чтобы по принципу конъюкции (и). |
|
Последний раз редактировалось user_123, 27-09-2009 в 14:33. Отправлено: 12:59, 27-09-2009 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата user_123:
1. REG.EXE почти всегда возвращает значение в ANSI-кодировке (WIN), а для батника родной является OEM-кодировка (DOS), т.е. даже одинаковые строки в разных кодировках не совпадут; 2. Использование "CHCP 1251" не исправит ситуацию, т.к. FINDSTR неправильно перекодирует часть русских букв (в частности, "ь"). есть два варианта: - набирать батник сразу в WIN кодировке, что нежелательно, т.к. может нарушить работу других команд; - осуществлять перекодировку средствами самого батника, пример для "Test.TXT" в WIN-кодировке: |
|
Отправлено: 05:20, 28-09-2009 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата user_123:
Цитата amel27:
|
||
Отправлено: 16:58, 28-09-2009 | #9 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Iska, AFAIK ввод/вывод всегда ведется в текущей (CHCP) кодировке... но только если он выполняется штатными CMD-командами, при вызове внешних EXE результат целиком зависит них, по идее они должны перед вводом/выводом проверять текущую кодировку и приводить поток к ней, на деле можно ждать всё что угодно - "метод тыка" рулит
Цитата Iska:
З.Ы. кроме того, никто не мешает сохранить в реестре OEM-текст, как ANSI - попадались и такие случаи |
|
Отправлено: 04:26, 29-09-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Система - поиск программы по сравнению реестра | seman | Программное обеспечение Windows | 7 | 30-06-2009 20:38 | |
HDD - Hitachi HDP725050GLA360 непонятные некоторые значени SMART | Das_Monster | Накопители (SSD, HDD, USB Flash) | 9 | 08-06-2009 14:10 | |
CMD/BAT - [решено] удаление ключа реестра через определенное время | drgr | Скриптовые языки администрирования Windows | 4 | 03-03-2009 08:30 | |
как бы добавить в переменные имя ключа реестра и его значение ? | mitiya | Программирование и базы данных | 21 | 23-04-2008 11:54 | |
Доступ - Авто экспорт значения ключа из реестра | Billy Bones | Microsoft Windows 2000/XP | 3 | 26-07-2007 11:50 |
|