レジストリキーの値が存在するかどうかを確認するバッチスクリプトを作成していますが、いくつか問題があります。探すキーを直接指定すると、%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
echo
s 0
何らかの理由で私にはわかりません。FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO ( REG QUERY "%%A" /v "%%B" ECHO %ERRORLEVEL%
EnableDelayedExpansion を一緒に使用し、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