1

Что

Я пишу короткий сценарий, чтобы выложить новую строку для всех в файле хостов моих доменов в объекте групповой политики - не спрашивайте, почему мы не делаем это через DNS, причины это забавные и обширные :)

По большей части это просто, однако я сталкиваюсь с несколько упрямой проблемой сравнения строк в переменных, а именно, похоже, что она этого не делает. Строки, кажется, не совпадают, несмотря на то, что если я повторю строки, они идентичны. Если строки не совпадают, он просто добавляет строку в конец файла hosts до бесконечности.

Для справки, это процесс, которому я хочу следовать за сценарием:

Как

Установите значение сравнения -> Поиск файла хостов для существующих записей и сохраните вывод в переменную -> Сравнить переменные, если совпадают, ничего не делать, иначе

Код

@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

Если я изменю:

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

Для того, чтобы:

"sometext"=="sometext"

Работает нормально. Если я повторяю вывод% search% и% сравнить%, я получаю:

10.1.1.1 test.testing.com
10.1.1.1 test.testing.com

1 ответ1

2

Да уж,

Так что я в конце концов понял это, пробел был моей проблемой. Очень незначительное изменение в сценарии решило проблему.

@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=

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .