我正在编写一个批处理脚本来检查注册表项值是否存在,但遇到了一些问题。当我直接指定要查找的项时,更新会%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
以下echo
是0
一些我无法理解的原因。
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
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。