You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改CMD脚本:从TXT批量添加Hosts条目(修复异常)

修复后的Windows Hosts批量添加CMD脚本

问题根源说明

原脚本出现的错误主要来自三个点:

  1. 路径未加引号:若TXT文件路径含空格,FIND/FINDSTR会解析错误,触发"Parameter format not correct"
  2. 错误使用覆盖符:用>而非>>写入Hosts,导致每次循环都清空文件仅保留最后一条
  3. 权限/逻辑问题:未正确处理Hosts文件的只读属性与管理员权限,引发"FINDSTR: Write error with Pipes"

修改后的完整脚本

@echo off
setlocal enabledelayedexpansion

:: 定义路径:请替换为你的TXT文件路径
set "SOURCE_FILE=C:\path\to\your\hosts_entries.txt"
set "HOSTS_FILE=C:\Windows\System32\drivers\etc\hosts"

:: 检查是否以管理员身份运行
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo 请以管理员身份运行此脚本!
    pause
    exit /b 1
)

:: 检查源文件是否存在
if not exist "%SOURCE_FILE%" (
    echo 源文件 %SOURCE_FILE% 不存在!
    pause
    exit /b 1
)

:: 逐行读取TXT文件内容,跳过注释和空行
for /f "tokens=* delims=" %%a in ('type "%SOURCE_FILE%" ^| findstr /v "^#" ^| findstr /v "^$"') do (
    set "LINE=%%a"
    :: 提取IP和域名(需保证TXT每行格式为「IP 域名」)
    for /f "tokens=1,2" %%b in ("!LINE!") do (
        set "IP=%%b"
        set "DOMAIN=%%c"
        :: 检查Hosts中是否已存在该条目
        findstr /i /c:"!IP! !DOMAIN!" "%HOSTS_FILE%" >nul 2>&1
        if !errorLevel! equ 1 (
            :: 条目不存在则追加到Hosts
            echo !IP! !DOMAIN! >> "%HOSTS_FILE%"
            echo 已添加条目:!IP! !DOMAIN!
        ) else (
            echo 条目已存在,跳过:!IP! !DOMAIN!
        )
    )
)

echo 批量添加完成!
pause
exit /b 0

关键修复点说明

  • 路径加双引号:所有文件路径用"%PATH%"包裹,避免空格导致的参数解析错误
  • 使用追加符>>:写入Hosts时用>>替代>,确保不会清空原有内容
  • 管理员权限检查:脚本开头强制校验权限,避免因权限不足无法修改Hosts
  • 过滤无效行:通过findstr跳过注释行(以#开头)和空行,只处理有效条目
  • 延迟变量扩展:启用enabledelayedexpansion确保循环内变量正常读取

使用说明

  1. 将SOURCE_FILE的值替换为你的TXT文件绝对路径(TXT每行需遵循「IP地址 域名」格式)
  2. 右键点击脚本,选择「以管理员身份运行」
  3. 脚本会自动跳过已存在的条目,避免重复添加

内容的提问来源于stack exchange,提问作者JinKazama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:32:44