@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
будет удалено в случае сбоя, просто для очистки.