【批处理脚本】更改Windows系统中的 hosts 解析文件

发布于:2024-12-09 ⋅ 阅读:(164) ⋅ 点赞:(0)

概述

  • 作用
  • 修改 Windows 系统中的 hosts 文件,可以实现 插入 或 删除 条目。该脚本允许用户以管理员权限执行,将特定的域名解析到指定的 IP 地址
  • 应用场景

非常适用于需要频繁或批量修改 hosts 文件的场景:

  • 屏蔽网站、域名重定向、DNS 污染防护
  • 广告屏蔽、临时封锁/解除封锁网站
  • 多台计算机批量配置 hosts 文件
  • 开发环境中需要灵活配置域名解析时
  • 注意事项
  • hostList.txt 文件为要操作的host条目集;每一行应该是要添加或删除的条目
  • 修改host.bat 修改批处理,根据输入的操作指引,把hostList文件里面的条目,依次【添加/删除】到 系统hosts文件中
  • !!! 文件需要管理员权限运行 !!!(因为 hosts 文件位于系统的受保护区域)
  • !!! 运行之前,最好先备份hosts文件,避免突发情况 !!!
  • hosts 路径: C:\Windows\System32\drivers\etc\hosts

应用

  1. 新建 “hostList.txt” 文件

存储要操作的host条目集,一行一条目;如下:

 # 测试环境host 【# 为注释】
127.0.0.1    www.test.com
  1. 新建 “更改host解析.txt”,并更新为 bat 后缀文件
@echo off
setlocal enabledelayedexpansion

title 更改host解析

::判断管理员权限并获取
net.exe session 1>NUL 2>NUL && (
    goto as
) || (
   goto noas
)


:as
goto start

:noas
echo 【您还不是管理员权限,请授权执行】
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
goto start


:start

::定义 【列表文件、hosts文件、临时文件】 的路径
set "entriesFile=hostList.txt"
set "hostsFile=C:\Windows\System32\drivers\etc\hosts"
set "tempFile=%temp%\hosts_temp.txt"

::模拟环境
::set "hostsFile=hosts"


cd /d %~dp0

:: 检查条目文件是否存在
if not exist "%entriesFile%" (
    echo 【host条目文件 %entriesFile% 不存在,请检查文件路径】
    goto end
)



:: 提示用户选择操作
echo =============== 请选择操作:    ===============
echo ===============  1: 插入hosts  ===============
echo ===============  2: 删除hosts  =============== 

echo.
echo.
echo 请输入您的选择[12]: 
choice /c 12 /m "请输入您的选择:" >> nul
:: 根据用户选择执行操作
if errorlevel 2 goto delete_entries & echo 2
if errorlevel 1 goto insert_entries & echo 1




:insert_entries
echo 正在插入条目...

::在插入条目时,先添加一个空白行,以便与现有条目分隔
echo.>> "%hostsFile%"

:: 逐行读取条目并插入
for /f "usebackq tokens=*" %%a in ("%entriesFile%") do (
    findstr /c:"%%a" "%hostsFile%" >nul
    if errorlevel 1 (
        echo %%a >> "%hostsFile%"
        echo 添加: %%a
    ) else (
        echo 已存在: %%a
    )
)

::结束任务
goto end


:delete_entries
echo 正在删除条目...


:: 逐行读取条目并删除
for /f "usebackq tokens=*" %%a in ("%entriesFile%") do (
    echo 清除: %%a
    findstr /v /c:"%%a" "%hostsFile%" > "%tempFile%" 
    copy /y "%tempFile%" "%hostsFile%" >nul
)

:: 清理临时文件
if exist "%tempFile%" del "%tempFile%"


:end
pause
  1. 若有需要,先备份本地的 “hosts” 文件

路径:C:\Windows\System32\drivers\etc\hosts

  1. 双击运行 bat 文件即可,可在 “hosts” 文件预览如下:
    在这里插入图片描述
  2. 浏览器访问链接(假设端口号为 8888)

http://www.test.com:8888