背景介绍 :
由于公司SLB有时候访问会出现端口异常,公司使用windows的同事需要正常访问到页面 。 现需要写一个bat脚本,实现检测是否异常,异常则替换掉/hosts的ip地址为正常的地址。实现批量替换。
分为3部分:(举例说明 )
1. 原windows电脑中是否存在 映射hosts的代码组 ;没有则添加后,在进行检测;
(存在多个域名 ;)
type !phn! |findstr "\<h.test.cn\>">nul
if %errorlevel%==1 goto new
::判断原来的hosts文件是否有映射
::编辑hosts文件
:new
(@echo.>>"C:\Windows\System32\drivers\etc\hosts"
@echo 192.168.1.1 h.test.cn >> C:\Windows\System32\drivers\etc\hosts
::............根据实际 有几个就写几个。
pause
2. 检测 IP 192.168.1.1 绑定的端口80 访问是否正常
pause和exit 用来进行整个脚本的判断调整 , 可自行测试。
::检测访问使用的ip是否有端口异常的情况,检测时浏览器上访问需要访问 192.168.1.1进行判断
netstat -ano | findstr 192.168.1.1 | findstr 80 | findstr ESTABLISHED > nul
if %errorlevel%==0 goto ok
if %errorlevel%==1 goto err
pause
exit
3. 异常则进行批量替换 。 把IP A 改成 IP B
ip A 替换为 ip B ;成功改变映射关系 ;
::批量替换ip地址为正常的ip
:err
(echo (CRITICAL: Port check failed)
type !phn! |findstr "\<192.168.1.1\>">nul
if %errorlevel%==0 set "addr1=192.168.1.1"&set "addr2=192.168.1.2"
type !phn! |findstr "\<192.168.1.2\>">nul
if %errorlevel%==0 set "addr1=192.168.1.2"&set "addr2=192.168.1.1"
if not defined addr1 (echo IP不对&pause&goto :eof) else echo 现IP地址为!addr1! 按任意键改为!addr2!&pause>nul
::循环进行替换
(for /f "delims=" %%a in ('type !phn!') do (
set aa=%%a & set aa=!aa:%addr1%=%addr2%!
echo !aa!
))>!ph!\hosts.tmp
del !phn!>nul&ren !ph!\hosts.tmp hosts>nul&pause)