2016-05-09 1 views
1

Перед началом работы программы мне необходимо проверить реестр на несколько ключей (они не должны существовать). Широко распространенное решение для проверки ключей реестра работает только для одной проверки, так как устанавливает глобальное значение ErrorLevel равным 1. Пример ниже будет работать неправильно.Проверить наличие нескольких ключей реестра в пакетном файле

@echo off 

reg query HKEY_LOCAL_MACHINE\SOFTWARE\mykey >nul 
if %errorlevel% equ 0 (
    echo "mykey exists - do nothing" 
) else (
    reg query HKEY_LOCAL_MACHINE\SOFTWARE\mykey2 >nul 
    if %errorlevel% equ 0 (
     echo "mykey2 exists - do nothing" 
    ) else (
     run my program 
    ) 
) 

ответ

0

Использование Равен, как это потребует delayed expansion .Вы можете попробовать с IF ERRORLEVEL

@echo off 

reg query HKEY_LOCAL_MACHINE\SOFTWARE\mykey >nul 
if %errorlevel% equ 0 (
    echo "mykey exists - do nothing" 
) else (
    reg query HKEY_LOCAL_MACHINE\SOFTWARE\mykey2 >nul 
    if errorlevel 1 (
     run my program 
    ) else (
     echo "mykey2 exists - do nothing" 
    ) 
) 
+0

Это не будет работать, и это также имеет неправильно логики кода. – Himmel

+0

@Himmel - я удалил один избыточный 'equ'. – npocmaka

+0

errorlevel будет иметь значение 1, независимо от того, как только он будет установлен в 1, так что это приведет к ложному отрицательному состоянию результата в вашем случае. – Himmel

0

Получить вдохновленные этим примером:

@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 
::********************************************