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用户组完全控制权限
相关推荐
Lxinccode13 小时前
python(55) : python程序设置为Windows快捷方式
windows·python固定到开始·快速调用开始
纳于大麓15 小时前
Kotlin基础语法
linux·windows·kotlin
呉師傅19 小时前
关于联想ThinkCentre M950t-N000 M大师电脑恢复预装系统镜像遇到的一点问题
运维·网络·windows·电脑
网安INF21 小时前
Python核心数据结构与函数编程
数据结构·windows·python·网络安全
知识分享小能手1 天前
uni-app 入门学习教程,从入门到精通,uni-app 基础知识详解 (2)
前端·javascript·windows·学习·微信小程序·小程序·uni-app
waving-black1 天前
windows系统下安装测试kafka
windows·分布式·kafka
傻啦嘿哟1 天前
Python 高效清理 Excel 空白行列:从原理到实战
windows
晋人在秦 老K1 天前
鼠标连点效率低?MouseClickTool 2.0三步配置,自动化操作提速80% 重复点击太耗时?Windows鼠标连点器实操教程,开发测试效率翻倍
windows·自动化·计算机外设·鼠标连点器·gui模拟点击·自动化点击解决方案
shykevin1 天前
uni-app x商城,商品列表组件封装以及使用
windows·uni-app