Verificação da existência do valor da chave do registro em lote de loop

4

Estou escrevendo um script em lote para verificar se existe um valor de chave do Registro e estou tendo alguns problemas. Quando especifico diretamente uma chave para procurar, o %ERRORLEVEL% é atualizado apropriadamente. O exemplo abaixo ecoa o valor 1 como esperado.

REG QUERY HKLM /v NONEXISTENT_KEY
ECHO %ERRORLEVEL%

No entanto, estou verificando a existência de um monte de chaves em um arquivo, então estou fazendo um loop com FOR . Os seguintes ecos 0 por alguma razão que eu não entendo.

FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO (
    REG QUERY "%%A" /v "%%B"
    ECHO %ERRORLEVEL%

Nota: a estrutura do arquivo que estou passando é demonstrada no seguinte exemplo:

HKEY_LOCAL_MACHINE\PATH\TO\KEY,SOME VALUE
    
por Alex Eshoo 09.08.2017 / 16:43

1 resposta

1

As seguintes echo s 0 por algum motivo que eu não entendo.

FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO (
    REG QUERY "%%A" /v "%%B"
    ECHO %ERRORLEVEL%

Você precisa EnableDelayedExpansion juntos e usar ECHO !ERRORLEVEL! .

Arquivo em lote corrigido:

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=1-2 delims=," %%A IN (myFile.txt) DO (
    REG QUERY "%%A" /v "%%B"
    ECHO !ERRORLEVEL!
  )
endlocal

Saída:

> 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

Leitura Adicional

por 09.08.2017 / 17:43