Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Существуют ли разделы

Ответить
Настройки темы
CMD/BAT - [решено] Существуют ли разделы

Новый участник


Сообщения: 33
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: VladoSer
Дата: 06-10-2021
Здравствуйте, подскажите, пожалуйста в написании скрипта.
Делаю проверку на наличие раздела реестра таким образом, правильно ли?

Код: Выделить весь код
::Установить раздел реестра
set Compatibility="HKCR\exefile\shellex\ContextMenuHandlers\Compatibility"
::Проверить раздел реестра
reg query %Compatibility% >nul 2>&1
::Если раздел реестра существует, занести в переменную
if "%errorlevel%"=="0" (set "GiveAcces6=Присутствует.")
::Если раздел не существует
if "%errorlevel%"=="1" (set "GiveAcces6=Отсутствует.")


set ModernSharing="HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ModernSharing"
reg query %ModernSharing% >nul 2>&1
if "%errorlevel%"=="0" (set "GiveAcces5=Присутствует.")
if "%errorlevel%"=="1" (set "GiveAcces5=Отсутствует.")

echo Параметр: %GiveAcces6%
echo Параметр: %GiveAcces5%
Если все правильно, то движемся дальше.

Как сделать проверку сразу этих 2 разделов реестра?, и вывести сообщение вида
Код: Выделить весь код
Необходимость удаления: присутствует(если существует хоть 1 из этих разделов)/отсутсвует(если этих разделов нет)
нашел такой код, но разобраться в нем не могу:
Код: Выделить весь код
@echo off
cls & color 0A & echo.
Mode con cols=70 lines=5
Title Check Startup Registry Keys
Set TmpLogFile=TmpLogkey.txt
Set LogFile=Startup_key_Log.txt
If Exist %TmpLogFile% Del %TmpLogFile%
If Exist %LogFile% Del %LogFile%

Set mykey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"^
^ "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"^
^ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"^
^ "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"^
^ "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"^
^ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"

Echo.
ECHO                 **************************************
ECHO                        Please wait..........
ECHO                 **************************************

For %%K in (%mykey%) Do Call :Check_Key %%K %TmpLogFile%

Cmd /U /C Type %TmpLogFile% > %LogFile%
Start "" %LogFile%
Exit /b
::********************************************
:Check_Key
reg QUERY %1 >nul 2>&1
(
    if %errorlevel% equ 0 ( reg QUERY %1 /s
        ) else ( echo %1 ===^> Not found
    )
) >>%2 2>&1
::********************************************

Отправлено: 11:30, 06-10-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Powershell:
Код: Выделить весь код
if ((Test-Path Registry::HKCR\exefile\shellex\ContextMenuHandlers\Compatibility) -or
(Test-Path Registry::HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ModernSharing)) {
"существует хоть 1 из этих разделов"
}
else {
"этих разделов нет"
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:17, 06-10-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 33
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Powershell: »
Здравствуйте, спасибо за скрипт, но я далек от PowerShell, к тому же эта проверка ключей происходит не в начале моего bat файла, а уже после некоторых действий, поэтому предпочтительно все сделать именно через bat.
Да о чем тут говорить, я даже powershell файл не умею вызывать через bat
Напишите, пожалуйста, как это сделать правильно, испытаю ваш скрипт.


P.S правильно я делаю в проверку на существование раздела реестра? Хотелось бы все таки знать, чтобы не думать об этом.

И, пожалуйста, коллеги или Вы, напишите альтернативу на CMD.

Последний раз редактировалось VladoSer, 06-10-2021 в 13:31.


Отправлено: 13:24, 06-10-2021 | #3


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Цитата VladoSer:
Как сделать проверку сразу этих 2 разделов реестра?, и вывести сообщение вида ... если существует хоть 1 из этих разделов »
Да хоть сто штук, сколько запросов нарисуете:
Код: Выделить весь код
@Echo Off
cls
	Set "Present=Отсутствует."
	>nul 2>&1 reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ModernSharing" &&Set "Present=Присутствует." 
	>nul 2>&1 reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\Sharing" &&Set "Present=Присутствует." 

	Echo %Present%
Pause
Exit /B
Либо так, но длиннее, зато можно анализировать каждый запрос по отдельности
Код: Выделить весь код
@Echo Off
cls
	>nul 2>&1 reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ModernSharing" &&Set /A @q1=1 || Set /A @q1=0 
	>nul 2>&1 reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\Sharing" &&Set /A @q2=1 || Set /A @q2=0 
	Set "@q"
	Set "Present=Присутствует."
	If %@q1%==0 If %@q2%==0 Set "Present=Отсутствует."
	Echo %Present%
Pause
Exit /B
Красная строка - отладочная.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:40, 06-10-2021 | #4


Новый участник


Сообщения: 33
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Либо так, но длиннее, зато можно анализировать каждый запрос по отдельности »
Использовал данный код, все работает как надо, помогаете уже не раз, спасибо

Отправлено: 16:13, 06-10-2021 | #5


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


VladoSer, Еще вариант:
Код: Выделить весь код
@Echo Off
cls
	Set "Present=Присутствует."
	>nul 2>&1 (
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ModernSharing" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\7-Zip1" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\Sharing1" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ANotepad++1" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ModernSharing2" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\7-Zip2" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\Sharing2" ||(^
	reg query "HKLM\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ANotepad++" ||(^
	Set "Present=Отсутствует."))))))))
	) 
	Echo %Present%
Pause
Exit /B
Количество красных закрывающих скобок равно числу запросов. Не знаю только максимально возможный уровень вложенности такой конструкции.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 06-10-2021 в 16:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:41, 06-10-2021 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Существуют ли разделы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Существуют ли телефоны с разъёмом для микрофона. мона ли в разъём для наушников втыка TheNiceTroy Хочу все знать 1 05-05-2012 18:33
Существуют ли планшеты? rsod Хочу все знать 2 06-12-2010 19:48
Монитор - Существуют ли 32-битные мониторы? Третий Прочее железо 2 23-04-2010 10:13
существуют ли переходники? hassisin Видеокарты 9 29-05-2009 14:42
Существуют ли? muslim Хочу все знать 2 30-05-2007 08:25




 
Переход