Detectando uma chave de registro com um espaço no caminho da CLI (ou arquivo .bat)?

3

Encontrei um problema no qual minha experiência (e o Google-fu) me decepcionaram.

Basicamente, preciso enviar KB968730 para algumas centenas de clientes. Naturalmente, gostaria de verificar a instalação do hotfix antes de iniciar a instalação. Infelizmente, preciso fazer isso com um script e um GPO, em vez de um sistema adequado como o SCCM. Normalmente não é algo que me daria problemas, mas, parece haver um problema.

O truque é que o caminho para a chave de registro que esse hotfix instala tem um espaço sangrento. Especificamente, ele é instalado em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730 .

Não é surpresa, então, que o comando padrão do arquivo batch / CMD reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730 lance um erro de sintaxe e atrapalhe a parte de verificação de instalação do meu arquivo batch - ele está vendo a segunda parte do caminho como um segundo argumento. Então, claro, tentei encapsular o caminho entre aspas duplas, sem alegria. Citações simples, sem alegria. Ameaçar meu sistema operacional e / ou a Microsoft também não produziu resultados.

Depois de alguns googling e palavrões, descobri o que parece ser uma solução para isso, mas não consigo fazê-lo funcionar, por alguma razão eu não consigo descobrir. (Indubitavelmente, porque minhas habilidades de codificação são fracas hoje em dia e a tokenização de strings me deu um loop no melhor dos momentos.)

Parece que o que eu quero usar é algo como:

for /f "Tokens=2,*" %%a in (‘reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path’) do (set xpath=%%a) e, em seguida, trabalhe com %xpath% , mas isso não está funcionando. Ter tokens definidos como 1 me dá um caminho antes do espaço, o set para 2 me fornece o caminho após o espaço e não consigo descobrir como acrescentar um valor ao outro. Particularmente frustrante desde todas as respostas que eu vi disse "obrigado, funcionou !!!" ou similar. * (Com a ressalva de que você remove um % ao executar diretamente na linha de comando).

Alguém sabe o que estou bagunçando aqui?

Como alternativa, se alguém ainda usa o VBS e sabe como fazê-lo com isso, eu ficaria feliz em aceitar essa opção. (No PowerShell, no entanto, por conta do nosso cliente XP não ter instalado).

PS, se isso for mais adequado para o StackOverflow, não tenho problemas com a migração, mas meu pensamento inicial foi que "nós" não gostamos que desenvolvedores entrem aqui e nos perguntem questões triviais sobre configuração suas máquinas dev, então eu pensei que eles provavelmente sentiam o mesmo sobre a minha pergunta.

    
por HopelessN00b 19.07.2012 / 23:17

1 resposta

5

As aspas duplas parecem funcionar bem para caminhos do registro que contêm espaços. Acabei de testar no Windows XP SP3 aqui. O seguinte retorna as chaves / valores esperados:

REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"

Se você quiser usar tokens, você precisará usar a opção delims para especificar não para usar espaço / tabulação como um delimitador. De FOR /? :

   delims=xxx      - specifies a delimiter set.  This replaces the
                     default delimiter set of space and tab.

Exemplo de lote simples usando ; como delimitador.

FOR /F "usebackq delims=;" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path') DO (
    SET XPATH=%%A
)

Além disso, você pode achar útil o utilitário wmic . Ele vem com o XP e usa o WMI para fazer isso. Você pode fazer uma verificação rápida para sua KB com algo como:

wmic qfe list brief | FIND /I "KB968730"
    
por 19.07.2012 / 23:49