Обновить файл Hosts файлом .bat - PullRequest
       3

Обновить файл Hosts файлом .bat

1 голос
/ 17 февраля 2020

Мне нужно обновить мой файл hosts на наших сайтах с двумя правилами.

  1. IP-адрес должен быть изменен с текущего ip, который мы сохранили в файле hosts: 111.111.111.111 -> 111.111.111.222
  2. Если нет IP-адреса, который соответствует 111.111.111.222, добавьте его в конец строки;

1-я часть работает нормально, но я не могу завернуть свой обойдите 2-е правило ...

на данный момент то, что у меня есть.

@echo off

set newip=111.111.111.222

setlocal enabledelayedexpansion

for /f "delims=" %%A in (C:\Windows\System32\drivers\etc\hosts) do (

set line0=%%A

set line1=!line0:111.111.111.111=%newip%!

echo=!line1!>>C:\Windows\System32\drivers\hosts

)

endlocal


move /y C:\Windows\System32\hosts C:\Windows\System32\drivers\etc

pause

Как мне подойти к нему?

1 Ответ

0 голосов
/ 17 февраля 2020
@echo off
setlocal

set "oldip=111.111.111.111"
set "newip=111.111.111.222"

pushd "%systemroot%\System32\drivers\etc" || (
    >&2 echo Failed to change directory.
    exit /b 1
)

if not exist "hosts" (
    >&2 echo Failed to find file named hosts.
    exit /b 1
)

(
    set "updated_entry="

    for /f "tokens=1*" %%A in (hosts) do @(
        if "%%~A" == "%oldip%" (
            echo %newip% %%B
            set "updated_entry=defined"
        ) else (
            if "%%~A" == "%newip%" set "updated_entry=defined"
            echo %%A %%B
        )
    )

    if not defined updated_entry echo %newip% ?domain?
) > "hosts.tmp"

move /y "hosts.tmp" "hosts"
if exist "hosts.tmp" del "hosts.tmp"

Перейдите в каталог %systemroot%\System32\drivers\etc, чтобы каталог с файлом hosts был текущим каталогом. Проверьте, существует ли файл hosts для продолжения.

Параметры for для tokens=1* сохранят IP-адрес в %%A, а остаток текущей строки в %%B. Сравнение нового IP-адреса с прочитанным IP-адресом выполняется с помощью "%%~A" == "%oldip%".

Если обновление IP-адреса не выполнено, так как переменная с именем updated_entry определена, если она есть, тогда она будет напишите это в конце файла. Не уверен, какой домен вставить, поэтому просто наберите ?domain?.

Новый файл с изменениями - hosts.tmp, который переименован в hosts. hosts.tmp будет удалено в случае сбоя, просто для очистки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...