[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理(.bat) 添加多个新的域名到hosts需先检测

对于 批处理(.bat) 添加多个新的域名到hosts,

先检测是否已存在,如果已存在的域名就不添加

其他尚未存在的域名,则直接添加

google搜寻是有找到代码  如下:
  1. set stHosts= X.X.X.X www.domainname.com
  2. FOR /F "eol=# tokens=1 delims=" %%i in (%systemroot%\system32\drivers\etc\hosts) do if "%stHosts%"=="%%i" exit
  3. echo %stHosts%>> %systemroot%\system32\drivers\etc\hosts
复制代码
不过此代码只能检测一行域名

如果要添加以下各种不同域址,如何改写代码才能检测多个的域名?

127.0.0.1 mcfg.sandai.net
127.0.0.1 211.94.190.80
127.0.0.1 advstat.xunlei.com
123.87.86.5 biz5.sandai.net
527.66.13.125 cknum.sandai.net
110.45.215.113 cl.kankan.xunlei.com
127.0.0.1 float.sandai.net
127.0.0.1 mcfg.sandai.net
180.70.134.154 mtips.xunlei.com
127.0.0.1 pubstat.sandai.net
216.58.221.74 recommend.xunlei.com
127.0.0.1 wy.xunlei.com
110.45.229.148 buy.safe.xunlei.com

本帖最后由 WHY 于 2015-9-19 21:13 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. set "file=%systemroot%\system32\drivers\etc\hosts"
  3. for /f "tokens=2" %%i in ('more +11 "%~0"') do set #%%i=1
  4. for /f "delims=" %%i in ('findstr /n .* %file%') do (
  5.     set "s=%%i"
  6.     set "s=!s:*:=!"
  7.     for /f "tokens=1,2" %%j in ("#!s!") do if not defined #%%k echo;!s!
  8. )
  9. more +11 "%~0"
  10. pause & exit
  11. 127.0.0.1 mcfg.sandai.net
  12. 127.0.0.1 211.94.190.80
  13. 127.0.0.1 advstat.xunlei.com
  14. 123.87.86.5 biz5.sandai.net
  15. 527.66.13.125 cknum.sandai.net
  16. 110.45.215.113 cl.kankan.xunlei.com
  17. 127.0.0.1 float.sandai.net
  18. 127.0.0.1 mcfg.sandai.net
  19. 180.70.134.154 mtips.xunlei.com
  20. 127.0.0.1 pubstat.sandai.net
  21. 216.58.221.74 recommend.xunlei.com
  22. 127.0.0.1 wy.xunlei.com
  23. 110.45.229.148 buy.safe.xunlei.com
复制代码

TOP

WHY 发表于 2015-9-19 20:56

运行后发现只要有一个域名已经存在于hosts之内,就全部无法添加

其他尚未存在于hosts之内的域名,则直接添加   此动作并未成功

TOP

本帖最后由 flyinnet9 于 2015-9-20 02:13 编辑

假设各种域址写在名为list.txt的文件中,一行一个
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /v /g:"%systemroot%\system32\drivers\etc\hosts" list.txt') do echo %%a>> %systemroot%\system32\drivers\etc\hosts
复制代码

TOP

假设各种域址写在名为list.txt的文件中,一行一个
flyinnet9 发表于 2015-9-20 02:08


测试后发现如果hosts之内有一空白行带有空格 就会失败


其他各种状况下测试都成功,就差这一步了

TOP

本帖最后由 flyinnet9 于 2015-9-22 09:49 编辑

回复 5# a000001
  1. @echo off
  2. if exist %temp%\$ del /q %temp%\$
  3. for /f "delims=" %%i in (%systemroot%\system32\drivers\etc\hosts) do echo %%i>>%temp%\$
  4. for /f "delims=" %%a in ('findstr /e /v /g:"%temp%\$" list.txt') do echo %%a>> %systemroot%\system32\drivers\etc\hosts
复制代码

TOP

回复  a000001
flyinnet9 发表于 2015-9-21 10:04


已经有的域名,还是重复添加

先检测是否已存在,如果已存在的域名就不添加  此步骤未成功

TOP

回复 7# a000001


    多了个空格,已改

TOP

回复  a000001


    多了个空格,已改
flyinnet9 发表于 2015-9-21 12:39


hosts之内,如果只留有跟添加域名有关的ip   

就会造成该项域名,全部无法添加.

例如:
hosts之内,只留有127.0.0.1

就会造成以下跟该项有关的域名,全部无法添加.

127.0.0.1 mcfg.sandai.net
127.0.0.1 211.94.190.80
127.0.0.1 advstat.xunlei.com
127.0.0.1 float.sandai.net
127.0.0.1 pubstat.sandai.net
127.0.0.1 wy.xunlei.com

这有方法可以解决吗?

TOP

回复 9# a000001


    已改

TOP

回复  a000001


    已改
flyinnet9 发表于 2015-9-22 09:49



必须在list.txt之内全部域名的最下方多添加一个空白行

list.txt之内全部域名最上方完全不可有空白行

保持此格式 才能成功

否则最后一行已经有的域名,还是重复添加造成失败



是否有办法快速且方便将域名整合入批处理中?

我目前用 echo 域名 >>list.txt 的方式,编写整合入批处理中

不过还有573个域名要写入批处理中,我写到头昏都还未编写完

是否其他编写方式快速且方便将域名整合入批处理中?

TOP

回复  a000001


    已改
flyinnet9 发表于 2015-9-22 09:49



目前我将全部域名整合到批处理之中 ,代码如下
  1. for /f "skip=8 delims=" %%i in ('type %0') do echo %%i>>list.txt
  2. if exist %temp%\$ del /q %temp%\$
  3. for /f "delims=" %%i in (%systemroot%\system32\drivers\etc\hosts) do echo %%i>>%temp%\$
  4. for /f "delims=" %%a in ('findstr /e /v /g:"%temp%\$" list.txt') do echo %%a>> %systemroot%\system32\drivers\etc\hosts
  5. del /q list.txt
  6. del /q %temp%\$
  7. 127.0.0.1 211.94.190.80
  8. 127.0.0.1 advstat.xunlei.com
  9. 123.87.86.5 biz5.sandai.net
  10. 527.66.13.125 cknum.sandai.net
  11. 110.45.215.113 cl.kankan.xunlei.com
  12. 127.0.0.1 float.sandai.net
  13. 127.0.0.1 mcfg.sandai.net
  14. 180.70.134.154 mtips.xunlei.com
  15. 127.0.0.1 pubstat.sandai.net
  16. 216.58.221.74 recommend.xunlei.com
  17. 127.0.0.1 wy.xunlei.com
  18. 110.45.229.148 buy.safe.xunlei.com
复制代码
测试未完 不知结果会如何
先来回覆进度一下给大家

TOP

回复 12# a000001


    第八行加:exit /b

TOP

回复  a000001


    第八行加:exit /b
flyinnet9 发表于 2015-9-23 11:25


hosts之内,如果只留有跟添加域名有关的部分域名  

就会造成该项域名,全部无法添加.

例如:
hosts之内,只留有xunlei

就会造成以下跟该项有关的域名,全部无法添加.

127.0.0.1 advstat.xunlei.com
110.45.215.113 cl.kankan.xunlei.com
180.70.134.154 mtips.xunlei.com
216.58.221.74 recommend.xunlei.com
127.0.0.1 wy.xunlei.com
110.45.229.148 buy.safe.xunlei.com

这有方法可以解决吗?

TOP

回复 14# a000001


    我也帮你测一下

   hosts里只留下com会造成所有.com网站没法添加
  hosts里只留下net会造成所有.net网站没法添加

TOP

返回列表