Проверка существования значения ключа реестра для цикла цикла

4

Я пишу пакетный скрипт, чтобы проверить, существует ли значение ключа реестра, и у меня возникли некоторые проблемы. Когда я непосредственно указываю ключ для поиска, %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
Alex Eshoo
источник
Вы пытались использовать Setlocal EnableDelayedExpansion вместе с ECHO !ERRORLEVEL!?
DavidPostill
Только что попробовал это, уровень ошибки все еще возвращается как 0 несмотря на то, что значение ключа не существует.
Alex Eshoo
РЕДАКТИРОВАТЬ Извините, я забыл изменить мои "%" на "!". Это работает после этого.
Alex Eshoo
Да, только что подтверждено тестированием. Пишу ответ.
DavidPostill

Ответы:

1

Следующие 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

Дальнейшее чтение

DavidPostill
источник
Какова роль EnableDelayedExpansion? Я не могу понять из ss64, вы можете объяснить это?
Biswapriyo
@Biswa В цикле вы должны использовать отложенное раскрытие для оценки значения переменных при каждом выполнении цикла. Без отложенного расширения он оценивается только один раз, когда пакетный файл анализируется (что происходит, когда он читается).
DavidPostill