请求修改CMD脚本:从TXT批量添加Hosts条目(修复异常)
修复后的Windows Hosts批量添加CMD脚本
问题根源说明
原脚本出现的错误主要来自三个点:
- 路径未加引号:若TXT文件路径含空格,
FIND/FINDSTR会解析错误,触发"Parameter format not correct" - 错误使用覆盖符:用
>而非>>写入Hosts,导致每次循环都清空文件仅保留最后一条 - 权限/逻辑问题:未正确处理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确保循环内变量正常读取
使用说明
- 将
SOURCE_FILE的值替换为你的TXT文件绝对路径(TXT每行需遵循「IP地址 域名」格式) - 右键点击脚本,选择「以管理员身份运行」
- 脚本会自动跳过已存在的条目,避免重复添加
内容的提问来源于stack exchange,提问作者JinKazama
相关产品推荐
相关产品推荐

