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

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

dassen 04-04-2021 11:43 2954741

Выполнение команды в зависимости от записи в реестре
 
Например, запустить notepad только при наличии такой записи в реестре:
Код:

[HKEY_CURRENT_USER\1]
@="one"

(только cmd/bat)

Iska 04-04-2021 12:31 2954747

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

(reg.exe query "HKEY_CURRENT_USER\1" /ve | find.exe /i "REG_SZ    one") && start "" "notepad.exe"

endlocal
exit /b 0


dassen 04-04-2021 13:08 2954753

Блокнот не запустился...
(проверял на свежеустановленной "чистой" WinXP SP3 с упомянутой записью в реестре)

Iska 04-04-2021 14:19 2954762

dassen, формат вывода утилиты reg.exe может отличаться от версии к версии. Откройте cmd.exe. Выполните в нём:
Код:

reg.exe query "HKEY_CURRENT_USER\1" /ve
Посмотрите на вывод утилиты. Затем выполните там же:
Код:

>"Out.txt" reg.exe query "HKEY_CURRENT_USER\1" /ve
Откройте файл Out.txt из текущего каталога. Скопируйте потребную часть вывода утилиты из файла Out.txt в пакетный файл вместо «REG_SZ one». Сохраните пакетный файл и проверьте.

alpap 04-04-2021 15:48 2954768

dassen, давайте точнее задачу и объемнее
просто намекая на возможный ход развития, но столкнувшись с ним в боевых условиях вы опять сюда придете.

dassen 04-04-2021 16:06 2954770

Iska, спасибо!
Установил, что между REG_SZ и one должен быть знак табуляции:
Код:

(reg query "HKEY_CURRENT_USER\1" /ve | find /i "REG_SZ        one") && start "" notepad
Если представленный код скопировать в батник, то все работает (версию reg.exe не менял).
А при копировании кода из Вашего первого сообщения между REG_SZ и one получил четыре пробела...
Скрытый текст
Использую AkelPad:
Настройки \ Параметры \ Редактор 1 \ Размер табуляции \ Пробелы (птичка снята).
Кодировка текста батника: 866 (OEM Russian)


alpap, Iska,
да, в принципе, задача уже решена.
О "боевых условиях":
нужно бы уточнить, что @="one", а не @="one1", @="oneday" и т.д (т.е. сейчас в реестре после one может быть любой текст, и notepad запустится).

Iska 05-04-2021 00:29 2954804

Цитата:

Цитата dassen
Установил, что между REG_SZ и one должен быть знак табуляции: »

Угу:
Цитата:

Цитата Iska
dassen, формат вывода утилиты reg.exe может отличаться от версии к версии. »

Цитата:

Цитата dassen
А при копировании кода из Вашего первого сообщения между REG_SZ и one получил четыре пробела... »

И это тоже правильно — в моей версии reg.exe там именно пробелы.

Цитата:

Цитата dassen
О "боевых условиях":
нужно бы уточнить, что @="one", а не @="one1", @="oneday" и т.д (сейчас в реестре после one может быть любой текст, и notepad запустится). »

Это сильно существенно?
Код:

… | findstr.exe /i /r /e /c:".*REG_SZ        one" …
(не проверялось).

dassen 05-04-2021 01:17 2954807

Iska, понятно, спасибо!
Именно то, что я и хотел получить:
Код:

(reg query "HKCU\1" /ve | findstr /i /r /e /c:".*REG_SZ        one") && start "" notepad


Время: 03:02.

Время: 03:02.
© OSzone.net 2001-