CMD/BAT - [решено] замена ИП адреса в файле hosts

Ответить
Аватара пользователя
shurc

CMD/BAT - [решено] замена ИП адреса в файле hosts

Сообщение shurc »

Всем доброй поры суток.

Нужен .bat файл, который был заменял одни ИП-адреса на другие в файле hosts.



У меня есть файл, который добавляет ИП в файл:



----

if exist %systemroot%\SysWOW64 (

set hosts=%systemroot%\SysWOW64\drivers\etc\hosts

) else (

set hosts=%systemroot%\System32\drivers\etc\hosts

)

cacls %hosts% /E /G All:F

cacls %hosts% /E /G 'б_:F

attrib -s -r -h %hosts%

(echo.

echo #

echo 95.125.144.25
www.site1.com


echo 96.111.113.44
www.site2.com




)>>%hosts%

cacls %hosts% /E /R All

cacls %hosts% /E /R 'б_

ipconfig /flushdns

----



а как мне теперь заменить эти ИПшники на другие?
Аватара пользователя
amel27

Re: CMD/BAT - [решено] замена ИП адреса в файле hosts

Сообщение amel27 »

shurc, как-то так (пример замены 95.125.144.25 -> 96.111.113.44):

Код: Выделить всё

@echo off
set "hosts=%systemroot%\System32\drivers\etc\hosts"
if exist %systemroot%\SysWOW64 set "hosts=%systemroot%\SysWOW64\drivers\etc\hosts"
Call :CHIP 95.125.144.25 96.111.113.44
EXIT
:CHIP
SetLocal EnableDelayedExpansion
(For /F "Tokens=1* Delims=]" %%a in ('^<"%hosts%" find /v /n ""') do (
  Set "$b=%%b"
  If Defined $b Set "$b=!$b:%~1=%~2!"
  Echo.!$b!
))>"%TEMP%\%~n0.tmp"
Copy /Y "%TEMP%\%~n0.tmp" "%hosts%" 2>nul&& DEL "%TEMP%\%~n0.tmp"
EndLocal& GoTo :EOF
Аватара пользователя
amel27

Re: CMD/BAT - [решено] замена ИП адреса в файле hosts

Сообщение amel27 »

у приведенного выше кода есть одна нехорошая особенность - например, кроме IP "95.125.144.25", он заменит также "195.125.144.25", "95.125.144.251"... это можно обойти, оставляя слева и справа от IP есть хотя бы один пробел, тогда строка запуска будет:



Код:

Код: Выделить всё

Call :CHIP " 95.125.144.25 " " 96.111.113.44 "

используя регулярные выражения можно учесть и эти случаи:



Код:

Код: Выделить всё

@echo off
set "hosts=%systemroot%\System32\drivers\etc\hosts"
if exist %systemroot%\SysWOW64 set "hosts=%systemroot%\SysWOW64\drivers\etc\hosts"
Call :CHIP 95.125.144.25 96.111.113.44
EXIT
:CHIP
SetLocal EnableDelayedExpansion
Set "$1=%~1"& Set "$2=%~2"
FindStr /VRC:"\" "%hosts%" >"%TEMP%\%~n0.tmp"
(For /F "Delims=" %%a in ('FindStr /RC:"\" "%hosts%"') do (
  Set "$a=%%a"
  Echo !$a:%~1=%~2!
))>>"%TEMP%\%~n0.tmp"
Copy /Y "%TEMP%\%~n0.tmp" "%hosts%" 2>nul&& DEL "%TEMP%\%~n0.tmp"
EndLocal& GoTo :EOF
Ответить

Вернуться в «Скриптовые языки администрирования Windows»