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

1 ответ1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .