某特殊需求要给不同电脑配置对某域名的不同映射。此脚本也可用于开发环境等需求
使用方法:创建.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