如果我运行以下命令:
@ECHO OFF
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\SomeApp\Server" /v ServerName') DO SET ServerName=%%B
ECHO Server: %ServerName%
并且注册表不存在,它会给出以下错误
ERROR: The system was unable to find the specified registry key or value.
我知道这个错误是预料之中的,但如何才能抑制这个错误呢?
不太担心 ECHO 部分只显示“SERVER:”而没有任何价值,这对我来说很好。
答案1
之所以会出现该消息,是因为REG
命令正在写入标准输出流或标准错误流。如果你真的不关心这些消息,你可以重定向输出使其不被显示。
将您的命令更改为:
REG QUERY "HKLM\SOFTWARE\SomeApp\Server" /v ServerName > nul 2> nul
答案2
FOR /F "tokens=2*" %%A IN ('
REG QUERY "HKLM\SOFTWARE\SomeApp\Server" /v ServerName 2^> nul
') DO SET "ServerName=%%B"
ECHO Server: %ServerName%
您的代码发生了变化:
- (不需要)
delims
已删除。制表符和空格是默认分隔符,无需包含它们 - (需要)
stderr
流(流编号 2)重定向到 nul 设备以隐藏错误输出。重定向运算符>
在命令中包含时需要转义for /f
,从这里开始^>
- (推荐)
set
命令用引号引起来,以防止值中出现结尾空格或特殊字符的问题。引号仅保护操作,而不包括在存储到变量中的值中。