-->

domingo, 6 de julho de 2008

Backup de chaves específicas do Registro, em batch.

Eu não sei se isso resolve o problema que Silvinho disse ter no meu post anterior sobre o Registro, mas pode ser útil para outras pessoas.

Desde o Windows 3.1 regedit.exe aceita alguns parâmetros por linha de comando, mas isso só passou a ser realmente útil a partir do Windows 95. Eu falei sobre os parâmetros em 1999 (putz, faz tempo...) e até a última versão do Win9x você ainda conseguia manipular o registro pelo DOS puro.

O que vou explicar aqui só funciona no Windows XP, mas também pode ser feito no Windows 9x mudando-se algumas coisas.

O regedit.exe do Windows XP ainda aceita os parâmetros, mas fica parecendo que não, porque ele não aceita mais o parâmetro "/?" para exibir as opções disponíveis. Eu imagino que isso seja para manter compatibilidade com aplicações antigas mas não incentivar seu uso, porque no Windows XP o jeito oficial de manipular o Registro pela linha de comando é pelo programa REG.EXE.

Se você precisa gravar por script uma determinada chave do Registro em arquivo, basta usar o seguinte comando:

REG EXPORT [nome do arquivo] [caminho da chave]

Nota: REG.EXE suporta os "apelidos" padrão para as chaves do registro, que vou usar aqui para encurtar as linhas, mas você pode usar o caminho expandido.

Digamos que você queira ter um backup dessas duas chaves:

HKEY_CLASSES_ROOT\*\shellex
HKEY_LOCAL_MACHINE\System\Altiris


Basta um arquivo .bat assim:
del *.reg
REG EXPORT "HKCR\*\shellex" shellex.reg
REG EXPORT "HKLM\System\Altiris" altiris.reg
no exemplo acima, os arquivos serão criados na pasta corrente, mas você pode forçar a criação numa pasta específica:
del c:\backup\*.reg
REG EXPORT "HKCR\*\shellex" c:\backup\shellex.reg
REG EXPORT "HKLM\System\Altiris" c:\backup\altiris.reg

Lembre-se: Se houver espaços nos caminhos o uso de aspas é imprescindível

No fim do batch você pode concatenar todos os backups em um único arquivo backup.reg:

copy shellex.reg+altiris.reg backup.reg


Exemplo completo de backup (backup.bat):

del *.reg
REG EXPORT "HKCR\*\shellex" shellex.reg
REG EXPORT "HKLM\System\Altiris" altiris.reg
copy shellex.reg+altiris.reg backup.reg


Como restaurar

Restaurar a partir dos backups é simples na maioria dos casos, mas nem sempre. Se sua intenção é copiar os dados de um computador para outro, ou se precisa restaurar valores que podem ter sido modificados, basta clicar duas vezes no arquivo backup.reg.

Ou por script: regedit backup.reg

Mas existem problemas:

1) Dependendo da chave, você pode se deparar com uma mensagem do tipo:
Não é possível importar c:\backup.reg: nem todos os dados foram gravados com êxito no Registro. Algumas chaves estão abertas pelo sistema ou outros processos.
Para gravar nessas chaves, o jeito mais simples e garantido é fazê-lo pelo Modo de Segurança. Mas se mesmo assim não conseguir, seu problema pode ser de permissões.

2)Por default a importação feita só adiciona ou modifica conteúdo. Nada é excluído. Isso é bom na maioria dos casos, mas se por exemplo você quiser se livrar de entradas maliciosas na chave RUN, uma importação simples não vai mudar nada

Para se certificar que valores alienígenas sejam excluídos, você deve apagar a chave inteira antes da importação.
REG DELETE "HKCR\*\shellex" /f

O "/f" (de "force") força a exclusão sem fazer perguntas. Óbviamente é bom ter certeza de estar fazendo isso na chave certa


E para importar:
REG IMPORT backup.reg

Exemplo completo (restore.bat):
REG DELETE "HKCR\*\shellex" /f
REG DELETE "HKLM\System\Altiris" /f
REG IMPORT backup.reg

Manipulando erros

Você está se metendo com o Registro e não vai querer que erros passem despercebidos. É aconselhável que você pelo menos termine cada batch com um comando pause para examinar se tudo correu bem. Mas como REG.EXE suporta errorlevel, você pode criar uma manipulação de erros mais elaborada, se achar que vale o trabalho.

4 comentários:

  1. Realmente serve para o que quero!

    Nunca pensei que desse para usar um BAT para isso. :(

    Por mais que já tenha pesquisado, acho que não foi o suficiente...

    Valeu.

    ResponderExcluir
  2. Parabéns, muito esperto, boa dica me ajudou bastante, obrigado!

    ResponderExcluir
  3. Realmente funcionou.

    Essa bat funciona localmente, como faço uma para Exportar as chaves de outros computadores sem ter que entrar neles?

    ResponderExcluir
  4. Excelente, simples e objetivo.
    Parabéns.

    ResponderExcluir

Siga as regras do blog ou seu comentário será ignorado.