Компьютерный форум 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=349752)

VladoSer 06-10-2021 11:30 2968219

Существуют ли разделы
 
Здравствуйте, подскажите, пожалуйста в написании скрипта.
Делаю проверку на наличие раздела реестра таким образом, правильно ли?

Код:

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

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 2968226

Цитата:

Цитата DJ Mogarych
Powershell: »

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


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

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

megaloman 06-10-2021 15:40 2968233

Цитата:

Цитата 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

Красная строка - отладочная.

VladoSer 06-10-2021 16:13 2968234

Цитата:

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

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

megaloman 06-10-2021 16:41 2968235

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

Количество красных закрывающих скобок равно числу запросов. Не знаю только максимально возможный уровень вложенности такой конструкции.


Время: 16:33.

Время: 16:33.
© OSzone.net 2001-