Batch Loop usado para reguar uma lista de chaves a partir do arquivo txt e reutilizar o valor dos dados

1

Eu preciso de um loop em lote que deve extrair um valor de dados e usá-lo em seu próximo comando. Todas as chaves de registro que desejo consultar foram salvas em um arquivo * .txt.

Exemplo:

O comando a seguir retornará o valor da chave, tipo e dados conforme abaixo.

COMANDO:

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products690987922DC9549A63529D22383DDF\InstallProperties /V UninstallString

RESULTADO:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products690987922DC9549A63529D22383DDF\InstallProperties
    UninstallString    REG_EXPAND_SZ    MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD}

O que eu quero fazer é extrair apenas o valor de dados MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD} e executá-lo como meu próximo comando no loop for.

Tenho aproximadamente 20 chaves de registro que desejo consultar e, em seguida, executar o comando extraído. Eu também quero adicionar opções silenciosas ao comando msiexec.exe quando ele é executado.

Sou muito novo em loops em lote e acredito que preciso usar tokens / delims (?) ... não tenho certeza de como fazer isso funcionar.

    
por Heinza 23.03.2016 / 14:52

1 resposta

1

reg query uma lista de chaves de um arquivo txt e reutilizar valores de dados

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products690987922DC9549A63529D22383DDF\InstallProperties /V UninstallString

What I want to do is to extract only the data values MsiExec.exe and /X{78909610-D229-459C-A936-25D92283D3FD} and run it as my next command in the for loop.

O seguinte arquivo em lote deve começar:

@echo off
setlocal enableDelayedExpansion
rem get each key from keys.txt
for /f "usebackq tokens=*" %%i in ('type keys.txt') do (
  echo Processing key %%i
  rem skip the first line and grab tokens 3 and 4 from the second line
  for /f "usebackq skip=1 tokens=3,4" %%j in ('reg query %%i') do (
    echo %%j /quiet %%k
    )
  )

Notas:

  • keys.txt deve conter as chaves para consulta, uma por linha.
  • Você precisa de dois for loops, o primeiro a processar cada chave, o segundo (interno) para analisar a saída.
  • Ignoramos a primeira linha de saída, pois é o nome da chave.
  • Remova o echo de echo %%j /quiet %%k quando estiver satisfeito com o que o arquivo em lote está fazendo.
  • Presumo que /quiet é o switch que você precisa para "silencioso". Mude conforme necessário.

Leitura Adicional

por 23.03.2016 / 19:53