Показать полную графическую версию : Проверка ключ реестра bat
Здравствуйте! Помогите пожалуйста! Хочу сделать такое, но не знаю как, чтобы bat бат файл проверял ветку в реестра и сравнивал параметр. Например: есть число 8888, bat проверяет параметр в реестре если там тоже 8888, то запускается start.exe, если параметр не 8888, то запускаеться error.exe
Petya V4sechkin
27-01-2011, 16:53
hutnet2, воспользуйтесь фильтрами (http://tools.oszone.net/Vadikan/faq.html#filters) по названию темы по реестр.
http://oszone.net/user_img/050214130343/filters.png
Результат (http://forum.oszone.net/forumdisplay.php?f=102&filter_string=реестр&filter_by=title&solved_only=on)
Не нашел там ничего подходящего
hutnet2, если желаете получить конкретный ответ - задавайте конкретный вопрос: имя ветки, имя параметра, тип параметра, все возможные условия: (параметр отсутствует, параметр <> 8888, параметр = 8888 ) и что в каждом из этих 3-х случаев делать/запускать
в ветке HKLM\MountedDevices\, строковый параметр red должен иметь значение 8888, если его нет или значение не равно 8888, то запускается error.exe, если равно 8888, то запускаеться start.exe
как-то так, хотя в HKLM и нельзя создать ветку MountedDevices:
@echo off
set "$red="& for /f "tokens=2*" %%a in (
'REG QUERY "HKLM\SYSTEM\MountedDevices" /v red^|Find "REG_SZ"'
) do set "$red=%%b"
if "%$red%"=="8888" ("start.exe") else error.exe
@echo off
set "$red="& for /f "tokens=2*" %%a in (
'REG QUERY "HKLM\SYSTEM\MountedDevices" /v red^|Find "REG_SZ"'
) do set "$red=%%b"
if "%$red%"=="8888" (start.exe) else error.exe
»
Не помогло, при запуски bat-файла, ни какой реакции, ничего не запускаеться...
ни какой реакции »а такой батник?start.exe
echo on
set "$red="& for /f "tokens=2*" %%a in (
'REG QUERY "HKLM\SYSTEM\MountedDevices" /v red^|Find "REG_SZ"'
) do set "$red=%%b"
if "%$red%"=="8888" (start.exe) else error.exe
Pause
Дописал в конец батника pause, в начале echo on, и теперь видно ответ: Попытка записи в несуществующий канал
SendMessage
27-01-2011, 20:09
hutnet2, попробуйте явно прописать путь к REG - %systeroot%\system32\reg
hutnet2, попробуйте явно прописать путь к REG - %systeroot%\system32\reg » Это как?
SendMessage
28-01-2011, 05:36
Это как? »
'%systemroot%\system32\REG QUERY "HKLM\SYSTEM\MountedDevices" /v red^|Find "REG_SZ"'
SendMessage, все спасибо, заработало!
SendMessage, если полное имя — тогда тогда уж:
"%systemroot%\system32\reg.exe"
SendMessage
28-01-2011, 11:42
А еще правильней было бы не называть батник reg.bat :)
Тогда бы и не нужно было б подставлять пути.
А еще правильней было бы не называть батник reg.bat »
Нет. Надо и путь указывать, и расширение. Я ещё могу понять, когда не указывают путь, полагаясь на PATH.
SendMessage
28-01-2011, 13:59
Я ещё могу понять, когда не указывают путь, полагаясь на PATH. »
Давайте не будем становиться в позу учителя. Совершенно ведь ясно, что человек не смог получить доступ к командам reg.exe поскольку создал одноименный батник. И конкретная задача стояла отцепить от батника. И если даже он бросил свой батник в папку system32 - файл с расширением exe имеет приоритет. Так что Ваши замечания - суть просто придирки.
Это без обид - просто по теме дискуссии. :)
Так кто из нас становится в позу ;), а?
А по существу — Вы говорите об одном, частном случае, а я же говорю, как нужно делать сие правильно, чтобы избегать в будущем подобных нелепых ошибок. При чём тут придирки?!
А подскажите пожалуйста, как сделать тоже самое, но только если параметр в reg_dword. Конкретнее нужно получить значение[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] в REG_DWORD-параметре InstallDate и сравнить его с условием = или не=
SendMessage
28-01-2011, 18:24
Все то же самое, как сделал amel27:
for /f "tokens=3" %%i in (
'REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallDate ^| find "REG_DWORD"'
) do (set /a val=%%i)
if %val%==12345 ("start.exe") else error.exe
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.