检查循环批处理中注册表项值是否存在

检查循环批处理中注册表项值是否存在

我正在编写一个批处理脚本来检查注册表项值是否存在,但遇到了一些问题。当我直接指定要查找的项时,更新会%ERRORLEVEL%相应进行。下面的示例按预期回显值 1。

REG QUERY HKLM /v NONEXISTENT_KEY
ECHO %ERRORLEVEL%

但是,我正在检查文件中是否存在一组键,因此我使用 对其进行循环FOR。由于某些我不明白的原因,以下回显为 0。

FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO (
    REG QUERY "%%A" /v "%%B"
    ECHO %ERRORLEVEL%

注意:我循环的文件的结构如以下示例所示:

HKEY_LOCAL_MACHINE\PATH\TO\KEY,SOME VALUE

答案1

以下echo0一些我无法理解的原因。

FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO (
    REG QUERY "%%A" /v "%%B"
    ECHO %ERRORLEVEL%

你需要启用延迟扩展一起使用ECHO !ERRORLEVEL!

更正的批处理文件:

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO (
    REG QUERY "%%A" /v "%%B"
    ECHO !ERRORLEVEL!
  )
endlocal

输出:

> type myFile.txt
HKEY_LOCAL_MACHINE\PATH\TO\KEY,SOME VALUE

> test
ERROR: The system was unable to find the specified registry key or value.
1

进一步阅读

相关内容