PDA

Показать полную графическую версию : [решено] Существуют ли разделы


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


::Установить раздел реестра
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
::********************************************

DJ Mogarych
06-10-2021, 13:17
Powershell:

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

VladoSer
06-10-2021, 13:24
Powershell: »
Здравствуйте, спасибо за скрипт, но я далек от PowerShell, к тому же эта проверка ключей происходит не в начале моего bat файла, а уже после некоторых действий, поэтому предпочтительно все сделать именно через bat.
Да о чем тут говорить, я даже powershell файл не умею вызывать через bat :)
Напишите, пожалуйста, как это сделать правильно, испытаю ваш скрипт.


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

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

megaloman
06-10-2021, 15:40
Как сделать проверку сразу этих 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
Красная строка - отладочная.

VladoSer
06-10-2021, 16:13
Либо так, но длиннее, зато можно анализировать каждый запрос по отдельности »
Использовал данный код, все работает как надо, помогаете уже не раз, спасибо :)

megaloman
06-10-2021, 16:41
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
Количество красных закрывающих скобок равно числу запросов. Не знаю только максимально возможный уровень вложенности такой конструкции.




© OSzone.net 2001-2012