script em lote comparando strings dentro de variáveis

1

O que

Estou escrevendo um pequeno script para enviar uma nova linha para todos os hosts do meu arquivo de domínios em um GPO - não pergunte por que não estamos fazendo isso via DNS, as razões são divertidas e extensas :)

Na maior parte, isso é simples, mas estou chegando a um problema um tanto obstinado com a comparação de cadeias de caracteres em variáveis, ou seja, não parece fazê-lo. As cordas não parecem combinar, apesar do fato de que se eu ecoar as cordas elas são idênticas. Com as strings não correspondendo, ele apenas adiciona uma linha ao final do arquivo de hosts ad infinitum.

Para referência, este é o processo que quero que o script siga:

Como

Definir valor de comparação - > Pesquisar arquivo hosts para entradas existentes e salvar a saída para variável - > Compare variáveis se corresponder, não faça nada, mais

O código

@echo off
SET compare=10.1.1.1 test.testing.com
FOR /F "usebackq delims=='" %%A IN ('findstr /c:"10.1.1.1 test.testing.com"  %SystemRoot%\system32\drivers\etc\hosts') do SET search=%%A
if NOT "%search%"=="%compare%" echo Do Something >> output.txt

Se eu mudar:

"%search%"=="%compare%"

Para:

"sometext"=="sometext"

Funciona bem. Se eu fizer eco da saída de% search% e% compare%, obtenho:

10.1.1.1 test.testing.com
10.1.1.1 test.testing.com
    
por suitedupgeek 04.04.2011 / 16:02

1 resposta

2

Sim,

Então eu finalmente percebi isso, o espaço em branco era o meu problema. Uma pequena alteração no script resolveu o problema.

@echo off
SET compare=10.1.1.1 blah.blah.com
FOR /F "usebackq delims=='" %%A IN ('findstr /c:"blah.blah.com" %SystemRoot%\system32\drivers\etc\hosts') do SET compared=%%A
if NOT "%compare%"=="%compared%" echo 10.1.1.1 blah.blah.com>> %SystemRoot%\system32\drivers\etc\hosts
set compare=
set compared=
    
por 04.04.2011 / 16:58