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


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

Вы пытались использовать 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

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


Какова роль EnableDelayedExpansion? Я не могу понять из ss64, вы можете объяснить это?
Biswapriyo

@Biswa В цикле вы должны использовать отложенное раскрытие для оценки значения переменных при каждом выполнении цикла. Без отложенного расширения он оценивается только один раз, когда пакетный файл анализируется (что происходит, когда он читается).
DavidPostill
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.