2016-05-09 2 views
1

Ich muss die Registrierung für mehrere Schlüssel überprüfen, bevor ich mein Programm starte (sie sollten nicht existieren). Die weit verbreitete Lösung zum Überprüfen von Registrierungsschlüsseln funktioniert nur für eine Prüfung, da sie global ErrorLevel auf 1 setzt. Das folgende Beispiel wird nicht korrekt funktionieren.Überprüfen Sie für mehrere Registrierungsschlüssel in Batch-Datei

@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 
    ) 
) 

Antwort

0

Mit wie dieses Errorlevel wird delayed expansion benötigen .Sie können versuchen, mit 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

Das wird nicht funktionieren und es hat auch eine falsche Logik hinter dem Code. – Himmel

+0

@Himmel - Ich habe eine redundante 'eq' gelöscht. – npocmaka

+0

Errorlevel wird einen Wert von 1 haben, egal was es einmal auf 1 gesetzt hat, so dass es in Ihrem Fall zu einem falsch negativen Zustand kommen wird. – Himmel

0

durch dieses Beispiel Lassen Sie sich inspirieren:

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