[Batch] reg queryで取得した値を変数に格納する際にエラー出力しないようにする方法


はじめに

batファイルでレジストリ操作をする際に、reg queryを利用して値を取得し、その結果を変数に格納する処理をすることは多いかと思います。

しかし、reg queryで値を取得できなかった場合(レジストリが存在しないなど)はエラーが出力されます。

ここでは、reg queryを利用してレジストリを取得する際に変数に格納する処理時にエラー出力をNULにする方法の備忘録です。

エラー出力を無視する

まずは、下記レジストリが存在しない場合の状態で実行してみます。

レジストリ 内容
レジストリキー HKLM\Software\Policies\Microsoft\Windows\BITS
名前 EnableBITSMaxBandwidth
種類 REG_DWORD
0

SET TESTVAL=
FOR /F "tokens=1,2*" %%i IN (
  `REG QUERY "HKLM\Software\Policies\Microsoft\Windows\BITS" /v EnableBITSMaxBandwidth`
) DO ( 
  if "%%I"=="EnableBITSMaxBandwidth" (
    SET TESTVAL=%%k
  )
)
Echo %TESTVAL%

上記の結果は下記の通りです。

エラー: 指定されたレジストリ キーまたは値が見つかりませんでした。

では、このエラーを出力しないようにしたいと思います。

出力しないようにする場合は 「2^>NUL」を REG QUERYの後につけます。

SET TESTVAL=
FOR /F "tokens=1,2*" %%i IN (
  `REG QUERY "HKLM\Software\Policies\Microsoft\Windows\BITS" /v EnableBITSMaxBandwidth 2^>NUL`
) DO ( 
  if "%%I"=="EnableBITSMaxBandwidth" (
    SET TESTVAL=%%k
  )
)
Echo %TESTVAL%

上記を実行すると、何も出力されなくなりました。

最後に

もし、エラーのみを出力する場合は「2^>error.log」などを入れてあげると良いかと思います。

bat処理の小技ですので参考までに。