Поиск строки в значени ключа реестра.
Подскажите пожалуйста, как проверить, содержится ли в значении ключа реестра искомая строка (с использованием маски *text*) и если содержится, присвоить определённой переменной определённое значение.
Как прочитать реестр, я знаю: Код:
For /F "Tokens=2*" %%I In ('Reg Query HKCU\temp /V temp') Do ... %%J Заранее благодарен. |
user_123, можете попробовать на основе такого:
Код:
@echo off |
Iska, Спасибо.
Однако, не работает... Не зависимо от того, имеется ли искомая строка, или нет, всё время присваивается 2-ое значение переменной. Ошибок в синтаксисе CMD не находит... И предложенный Вами метод чтения ключа реестра тоже на работает (переменная вообще не получает значение), я написал это немного по-другому... А если ключа реестра нет, то нет и значения у переменной тоже нет... А, в целом, у меня так написано: Код:
For /F "Tokens=2*" %%I In ('reg query "<RegDir>" /v "<Key>"') do ( |
Цитата:
Сие может зависеть отчасти от версии 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 ( Код:
for /f "skip=3 tokens=3* delims= " %%i in ('reg.exe query "HKCU\Console" /v "FaceName"') do ( Цитата:
Код:
for /f "tokens=2*" %i in ('reg.exe query "HKCU\Console" /v "FaceName"') do echo %i Цитата:
Цитата:
|
Iska, добавление
Код:
^|find.exe /i "FaceName" Дело действительно было в i / j. Поставил "j". Сначала не чего не изменилось... Как позже выяснилось проблема была в регистре "i". т.е. надо было не так писать: Код:
For /F "Tokens=2*" %%I In ( Код:
For /F "Tokens=2*" %%i In ( |
user_123, да, это так:
Цитата:
|
Цитата:
Хотя папка help есть... Подскажите пожалуйста ещё кое-что... Я не могу до конца разобраться в синтаксисе команды "findstr". В значении ключа реестра, в котором ищется строка содержится путь к ехе-файлу (может быть в кавычках) и дополнительные ключи (параметры). Мне надо определить, содержит ли значение ключа следующее: Код:
*путь_к_файлу*парамтры_запуска* Смотрел findstr /? Там сказано что для поиска нескольких строк надо писать через пробел... Но в данном случае условие определяется по принципу дизъюнкции (или), а мне надо, чтобы по принципу конъюкции (и). |
Цитата:
Код:
FindStr /IRC:".*путь_к_файлу.*парамтры_запуска" 1. REG.EXE почти всегда возвращает значение в ANSI-кодировке (WIN), а для батника родной является OEM-кодировка (DOS), т.е. даже одинаковые строки в разных кодировках не совпадут; 2. Использование "CHCP 1251" не исправит ситуацию, т.к. FINDSTR неправильно перекодирует часть русских букв (в частности, "ь"). есть два варианта: - набирать батник сразу в WIN кодировке, что нежелательно, т.к. может нарушить работу других команд; - осуществлять перекодировку средствами самого батника, пример для "Test.TXT" в WIN-кодировке: Код:
@Echo Off |
Цитата:
Цитата:
|
Iska, AFAIK ввод/вывод всегда ведется в текущей (CHCP) кодировке... но только если он выполняется штатными CMD-командами, при вызове внешних EXE результат целиком зависит них, по идее они должны перед вводом/выводом проверять текущую кодировку и приводить поток к ней, на деле можно ждать всё что угодно - "метод тыка" рулит
Цитата:
Код:
reg query hkcu /v test|find /v "" |
amel27, спасибо, ясно. Интересное поведение. Вы случайно не в курсе, здесь является ключевым именно «Win2003» или же «ENU/RUS»?
|
Iska, проверил - на W2003 RUS работает правильно (OEM), XP ENU под рукой нет
|
amel27, ещё раз спасибо. Стало быть, будем считать, что в данном случае именно конкретная версия ОС/файла reg.exe влияет на учёт текущей кодовой страницы консоли при перенаправлении вывода.
|
Поправьте пожалуйста код.
1. Ищем в реестре параметр 2. Если параметр существует, выполнить его содержимое (а это путь к setup файлу) с ключами --uninstall --force-uninstall 3. Если параметр не существует, вывести Echo - Test is not installed Код:
Echo Off |
Код:
@(for /f "tokens=2*" %%I in ('reg query "HKCU\Software\TEST" /v "UninstallString"') do @start "" "%%J" --uninstall --force-uninstall)|| (echo TEST isn't installed.&>nul timeout /t 2) |
Время: 20:15. |
Время: 20:15.
© OSzone.net 2001-