windows修改hosts批处理脚本

windows中hosts文件位于C:\Windows\system32\drivers\etc下。

我们可以手动修改hosts文件,但是对于多台PC而言,每台手动修改过于麻烦,故而本文旨在便捷脚本修改hosts文件。

设计思路

  1. 管理员权限执行脚本,大多数电脑的hosts都是受保护的,普通权限无法修改,故而需要管理员权限执行。
  2. 备份原有的hosts,避免修改错了无法还原。
  3. 修改hosts的读写权限,不分电脑的hosts仅有只读权限,不允许修改,如果不修改权限的话,无法覆写成功。
  4. 追加IP 域名,如果当前ip 域名已经存在则跳过,仅添加未存在的内容,避免hosts大量重复内容。
  5. 更新DNS缓存,使新的内容能及时生效。

代码实现

新建modify-host.bat文件,内容如下:

modify-host.bat 复制代码
@echo off
setlocal enabledelayedexpansion

:: Admin check
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo [ERROR] Please run as administrator!
    pause
    exit /b 1
)

:: Configuration
set HOST_FILE=%windir%\system32\drivers\etc\hosts
set BACKUP_FILE="%HOST_FILE%.bak"

:: Delete existing backup if present
if exist %BACKUP_FILE% (
    echo [INFO] Removing existing backup...
    del %BACKUP_FILE% >nul 2>&1
    if %errorLevel% neq 0 (
        echo [ERROR] Failed to remove old backup
        exit /b 1
    )
    echo [OK] Old backup removed
)

:: Create new backup
echo [INFO] Creating new backup...
copy "%HOST_FILE%" %BACKUP_FILE% >nul 2>&1
if %errorLevel% neq 0 (
    echo [ERROR] Backup failed
    exit /b 1
)
echo [OK] Backup created: %BACKUP_FILE%

:: Permission handling
icacls "%HOST_FILE%" | find "Everyone" >nul
if %errorLevel% neq 0 (
    echo [INFO] Configuring write permissions...
    icacls "%HOST_FILE%" /grant Everyone:F >nul || (
        echo [ERROR] Permission configuration failed
        exit /b 1
    )
)

:: Entry management
set "ENTRIES=127.0.0.1 example.com 127.0.0.1 his.yx.com"

echo [INFO] Modifying hosts file...
set count=0
for %%i in (%ENTRIES%) do (
    set /a count+=1
    set /a mod=!count! %% 2
    if !mod! equ 1 (
        set ip=%%i
    ) else (
        find /i "!ip! %%i" "%HOST_FILE%" >nul && (
            echo [EXISTS] !ip! %%i
        ) || (
            >> "%HOST_FILE%" echo !ip! %%i
            echo [ADDED] !ip! %%i
        )
    )
)

:: Clear cache
ipconfig /flushdns >nul
echo [SUCCESS] Hosts modification complete!
pause

语法详解

系统指令

  • @echo off: 关闭命令回显,让脚本运行时不显示每条命令
  • setlocal enabledelayedexpansion: 启用延迟变量扩展,允许在循环中动态修改变量值
  • net session: 尝试列出网络会话,只有管理员才能执行
  • exit /b 1: 以错误码1退出脚本
  • %windir%: Windows系统环境变量,指向Windows目录
  • ipconfig /flushdns: 清空DNS解析缓存
  • pause: 暂停脚本,等待用户按键

变量扩展

  • %变量名%: 立即扩展,获取静态的变量值
  • !变量名!: 延迟扩展,获取实时的变量值(需要enabledelayedexpansion)

set HOST_FILE=%windir%\system32\drivers\etc\hosts

设置静态变量HOST_FILE,变量值为hosts物理地址

条件语句

复制代码
if 条件 (
    命令1
) else (
    命令2
)

循环语句

复制代码
for %%变量 in (列表) do (
    命令
)

错误处理

  • %errorLevel%: 获取上一条命令的返回码,0表示成功
  • >nul 2>&1: 重定向输出和错误到空设备,隐藏输出和错误信息

算术运算

  • set /a 变量=表达式

set /a:启用算术运算

  • set 变量=变量值:以%变量%的方式访问变量
  • neq: 不等于比较操作符
  • equ: 等于比较操作符
  • || 和 &&: 条件执行操作符

文件操作

  • if exist: 检查文件是否存在
  • del: 删除文件命令
  • copy: 复制文件命令
  • icacls: Windows文件权限管理工具
  • >>: 追加重定向,将内容添加到文件末尾
  • find /i: 不区分大小写搜索
  • find "Everyone": 在输出中查找"Everyone"字符串
  • /grant Everyone:F: 授予Everyone用户组完全控制权限
相关推荐
美酒没故事°20 小时前
Open WebUI安装指南。搭建自己的自托管 AI 平台
人工智能·windows·ai
一个欠登儿程序员1 天前
在国产服务器上通过 Docker 部署 Windows 虚拟机
服务器·windows·docker
爱宇阳1 天前
WSL2 隔离 Windows PATH 实战指南
windows·环境变量
ALex_zry1 天前
C++模板元编程实战技巧
网络·c++·windows
I疯子1 天前
2026-04-08 打卡第 5 天
开发语言·windows·python
一个人旅程~1 天前
旧笔记本电脑安装win10精简版LTSB&win10LTSC&linuxmint作为三系统的操作指导书(以DELL n4020为例)
linux·windows·经验分享·电脑
开开心心就好1 天前
支持自定义名单的实用随机抽签工具
windows·计算机视觉·计算机外设·excel·散列表·启发式算法·csdn开发云
dyj0951 天前
OpenClaw小龙虾本地部署【Windows系统 + 接入飞书】
windows·飞书
CresCent_Charles1 天前
(已解决)踩坑记录:Windows 11安装pointops编译时报错
windows
skywalk81631 天前
Windows下安装编译安装Whisper-CPP:一个语音实现框架集和高性能推理模型
人工智能·windows·whisper