Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 检查批处理文件中的多个注册表项_Batch File - Fatal编程技术网

Batch file 检查批处理文件中的多个注册表项

Batch file 检查批处理文件中的多个注册表项,batch-file,Batch File,在启动程序之前,我需要检查注册表中的多个键(它们不应该存在)。广泛使用的检查注册表项的解决方案只适用于一次检查,因为它将全局错误级别设置为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\S

在启动程序之前,我需要检查注册表中的多个键(它们不应该存在)。广泛使用的检查注册表项的解决方案只适用于一次检查,因为它将全局错误级别设置为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
    )
)

像这样使用errorlevel需要。您可以尝试使用


像这样使用errorlevel需要。您可以尝试使用


从以下示例中获得灵感:

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

从以下示例中获得灵感:

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

这不起作用,而且代码背后的逻辑也有错误。@Himmel-我删除了一个冗余的
eq
。errorlevel的值为1,无论设置为1,因此在您的情况下都会产生假阴性条件。@Himmel,但是在成功执行时,
reg
将errorlevel设置为1?这不起作用,而且代码背后的逻辑也有错误。@Himmel-我删除了一个冗余的
eq
。errorlevel的值将为1,无论它设置为1,因此在您的情况下都将产生假阴性条件。@Himmel,但是在成功执行时
reg
将errorlevel设置为1?