批处理脚本一键修改本地Hosts

某特殊需求要给不同电脑配置对某域名的不同映射。此脚本也可用于开发环境等需求

使用方法:创建.bat文件,并粘贴如下内容保存,修改脚本内域名为自己需要映射的域名,并修改ifelse那段对应的ip映射。使用时右键管理员权限运行脚本即可
功能:将某域名对应映射清除并增加所选映射,刷新dns
如已有 1.1.1.1 cloudflare.com,会删除并变成如192.168.1.1 cloudflare.com这种形式
已知问题:
1.脚本内好像有某个菜单存在显示问题,但不影响功能
2.bat脚本命名有xxx(1).bat这种形式会出现管理员运行闪退,这种一般都是重复下载至统一目录windows自动增加的后缀,删除(1)这种就行

@echo off&title By-Lee
chcp 65001
setlocal EnableDelayedExpansion

set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
set "TEMP_FILE=%TEMP%\hosts.tmp"
set "DOMAIN1=域名全称"
set "DOMAIN2=域名全称,同上,但是个别中文顶域需要转换,如.中国转成.xn--fiqs8s"

:menu
cls
echo ================================================================
echo                           Hosts切换工具
echo ================================================================
echo 请选择要切换的环境:
echo [1] 环境1
echo [2] 环境2
echo [3] 环境3
echo [4] 环境4
echo [5] 本地
echo [6] 清理相关Hosts
echo [7] 退出
echo ================================================================
echo.

choice /c 123456 /n /m "请输入选项 (1-6): "

if "%errorlevel%"=="1" (
    set "IP=192.168.1.1"
    goto :switch
) else if "%errorlevel%"=="2" (
    set "IP=192.168.1.2"
    goto :switch
) else if "%errorlevel%"=="3" (
    set "IP=192.168.1.3"
    goto :switch
) else if "%errorlevel%"=="4" (
    set "IP=192.168.1.4"
    goto :switch
) else if "%errorlevel%"=="5" (
    set "IP=127.0.0.1"
    goto :switch
) else if "%errorlevel%"=="6" (
    goto :remove
) else if "%errorlevel%"=="7" (
    goto :end
)

:switch
:: 检查管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo 需要管理员权限!请右键选择"以管理员身份运行"
    pause
    exit /b 1
)

:: 创建临时文件
type nul > "%TEMP_FILE%"

:: 处理每一行,排除包含任一域名的行
for /f "usebackq tokens=*" %%a in ("%HOSTS_FILE%") do (
    set "line=%%a"
    set "skip=0"
    
    echo !line! | find "域名全称" >nul
    if not errorlevel 1 set "skip=1"
    
    echo !line! | find "转换后域名全称" >nul
    if not errorlevel 1 set "skip=1"
    
    if "!skip!"=="0" (
        echo %%a>> "%TEMP_FILE%"
    )
)

:: 添加新的映射
echo %IP%    %DOMAIN1%>> "%TEMP_FILE%"
echo %IP%    %DOMAIN2%>> "%TEMP_FILE%"

:: 替换原hosts文件
copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul

:: 刷新DNS缓存
ipconfig /flushdns >nul

echo.
echo √ Hosts已更新:
echo   %IP%    %DOMAIN1%
echo   %IP%    %DOMAIN2%
echo.
timeout /t 2 >nul
goto :menu

:remove
:: 检查管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo 需要管理员权限!请右键选择"以管理员身份运行"
    pause
    exit /b 1
)

:: 创建临时文件
type nul > "%TEMP_FILE%"

:: 处理每一行,排除包含任一域名的行
for /f "usebackq tokens=*" %%a in ("%HOSTS_FILE%") do (
    set "line=%%a"
    set "skip=0"
    
    echo !line! | find "域名全称" >nul
    if not errorlevel 1 set "skip=1"
    
    echo !line! | find "转换后域名全称" >nul
    if not errorlevel 1 set "skip=1"
    
    if "!skip!"=="0" (
        echo %%a>> "%TEMP_FILE%"
    )
)

:: 替换原hosts文件
copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
ipconfig /flushdns >nul

echo.
echo √ 已删除所有相关域名映射
echo.
timeout /t 2 >nul
goto :menu

:end
del "%TEMP_FILE%" 2>nul
exit /b 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值