Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверка ключ реестра bat (http://forum.oszone.net/showthread.php?t=197807)

hutnet2 27-01-2011 16:16 1598468

Проверка ключ реестра bat
 
Здравствуйте! Помогите пожалуйста! Хочу сделать такое, но не знаю как, чтобы bat бат файл проверял ветку в реестра и сравнивал параметр. Например: есть число 8888, bat проверяет параметр в реестре если там тоже 8888, то запускается start.exe, если параметр не 8888, то запускаеться error.exe

Petya V4sechkin 27-01-2011 16:53 1598505

hutnet2, воспользуйтесь фильтрами по названию темы по реестр.



Результат

hutnet2 27-01-2011 16:59 1598515

Не нашел там ничего подходящего

amel27 27-01-2011 17:09 1598522

hutnet2, если желаете получить конкретный ответ - задавайте конкретный вопрос: имя ветки, имя параметра, тип параметра, все возможные условия: (параметр отсутствует, параметр <> 8888, параметр = 8888 ) и что в каждом из этих 3-х случаев делать/запускать

hutnet2 27-01-2011 17:20 1598536

в ветке HKLM\MountedDevices\, строковый параметр red должен иметь значение 8888, если его нет или значение не равно 8888, то запускается error.exe, если равно 8888, то запускаеться start.exe

amel27 27-01-2011 18:06 1598569

как-то так, хотя в 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


hutnet2 27-01-2011 18:40 1598585

Цитата:

Цитата amel27
@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-файла, ни какой реакции, ничего не запускаеться...

amel27 27-01-2011 18:57 1598598

Цитата:

Цитата hutnet2
ни какой реакции »

а такой батник?
Код:

start.exe

hutnet2 27-01-2011 19:10 1598605

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 1598648

hutnet2, попробуйте явно прописать путь к REG - %systeroot%\system32\reg

hutnet2 28-01-2011 04:58 1598868

Цитата:

Цитата SendMessage
hutnet2, попробуйте явно прописать путь к REG - %systeroot%\system32\reg »

Это как?

SendMessage 28-01-2011 05:36 1598874

Цитата:

Цитата hutnet2
Это как? »

Код:

'%systemroot%\system32\REG QUERY "HKLM\SYSTEM\MountedDevices" /v red^|Find "REG_SZ"'

hutnet2 28-01-2011 11:13 1599029

SendMessage, все спасибо, заработало!

Iska 28-01-2011 11:24 1599040

SendMessage, если полное имя — тогда тогда уж:
Код:

"%systemroot%\system32\reg.exe"

SendMessage 28-01-2011 11:42 1599053

А еще правильней было бы не называть батник reg.bat :)
Тогда бы и не нужно было б подставлять пути.

Iska 28-01-2011 13:19 1599120

Цитата:

Цитата SendMessage
А еще правильней было бы не называть батник reg.bat »

Нет. Надо и путь указывать, и расширение. Я ещё могу понять, когда не указывают путь, полагаясь на PATH.

SendMessage 28-01-2011 13:59 1599149

Цитата:

Цитата Iska
Я ещё могу понять, когда не указывают путь, полагаясь на PATH. »

Давайте не будем становиться в позу учителя. Совершенно ведь ясно, что человек не смог получить доступ к командам reg.exe поскольку создал одноименный батник. И конкретная задача стояла отцепить от батника. И если даже он бросил свой батник в папку system32 - файл с расширением exe имеет приоритет. Так что Ваши замечания - суть просто придирки.
Это без обид - просто по теме дискуссии. :)

Iska 28-01-2011 15:34 1599249

Так кто из нас становится в позу ;), а?

А по существу — Вы говорите об одном, частном случае, а я же говорю, как нужно делать сие правильно, чтобы избегать в будущем подобных нелепых ошибок. При чём тут придирки?!

hutnet2 28-01-2011 18:00 1599331

А подскажите пожалуйста, как сделать тоже самое, но только если параметр в reg_dword. Конкретнее нужно получить значение[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] в REG_DWORD-параметре InstallDate и сравнить его с условием = или не=

SendMessage 28-01-2011 18:24 1599342

Все то же самое, как сделал 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


Mr.Merak 29-04-2016 11:25 2630593

SendMessage, попробовал повторить тоже для REG_SZ, но val возвращает 0

Komoliddin_Fuzaylitdinov@fb 27-11-2018 09:06 2842809

SendMessage, Работает но если нет такой пут батник закрывается. можно сделать если нет такой ключ типа echo error ??


Время: 18:28.

Время: 18:28.
© OSzone.net 2001-