抑制批处理命令中的错误(如果注册)

抑制批处理命令中的错误(如果注册)

如果我运行以下命令:

@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命令用引号引起来,以防止值中出现结尾空格或特殊字符的问题。引号仅保护操作,而不包括在存储到变量中的值中。

相关内容