Board logo

标题: [文本处理] [已解决]批处理怎样将屏蔽网站批量写入hosts? [打印本页]

作者: a87750530    时间: 2011-6-26 12:11     标题: [已解决]批处理怎样将屏蔽网站批量写入hosts?

本帖最后由 a87750530 于 2011-6-26 21:04 编辑

从恶意网站实验室下载的hosts,里面的内容如下
  1. 115.47.219.95 www.aiqianming.cn
  2. 115.47.219.95 www.77112.com
  3. 115.47.219.95 www.6d6d.net
  4. .....
复制代码
想批量写入hosts文件找到这样的方法:
  1. :hostspb
  2. mode con COLS=80 lines=40
  3. color 0a
  4. echo 115.47.219.95 www.aiqianming.cn >>C:\Windows\System32\Drivers\etc\hosts
  5. echo 115.47.219.95 www.77112.com >>C:\Windows\System32\Drivers\etc\hosts
  6. echo 115.47.219.95 www.6d6d.net >>C:\Windows\System32\Drivers\etc\hosts
  7. type C:\WINDOWS\system32\drivers\etc\hosts
  8. start notepad C:\WINDOWS\system32\drivers\etc\hosts
  9. echo    hosts屏蔽完成...任意键返回
  10. pause >nul  
  11. end
复制代码
上面的方法很是麻烦,每个网站都要在前面加echo  ,后面要加>>C:\Windows\System32\Drivers\etc\hosts
能不能把网址如上面的列出来后,用批处理自动添加前后代码然后写入hosts
请大家帮忙一下!谢谢!
作者: batman    时间: 2011-6-26 12:32

  1. @echo off
  2. (for /f "skip=4 delims=" %%a in (%~fs0) do echo %%a)>%systemroot%\dirvers\etc\hosts
  3. goto :eof
  4. 下面写你要屏蔽的网站(一行一个)
复制代码

作者: batman    时间: 2011-6-26 12:44

或者:
  1. @echo off
  2. more +4 %~fs0>%systemroot%\dirvers\etc\hosts
  3. goto :eof
  4. 下面写你要屏蔽的网站(一行一个)
复制代码

作者: a87750530    时间: 2011-6-26 13:53

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.    set str=%%a
  4.    setlocal enabledelayedexpansion
  5.    echo;!str:115.=echo 115.!
  6.    endlocal
  7. ))>tem
  8. move tem a.txt
  9. goto 2
  10. :2
  11. for /f "delims=" %%a in (a.txt) do (
  12. echo %%a>>C:\Windows\System32\Drivers\etc\hosts>>b.txt
  13. )
  14. start b.txt
  15. pause
  16. end
复制代码
我写了这样的代码,前面的能替换,结果到这里
  1. :2
  2. for /f "delims=" %%a in (a.txt) do (
  3. echo %%a>>C:\Windows\System32\Drivers\etc\hosts>>b.txt
  4. )
复制代码


就卡住了,能不能想想办法?把这个写入“>>C:\Windows\System32\Drivers\etc\hosts”加入在每行的最后一列
作者: tmplinshi    时间: 2011-6-26 13:56

4# a87750530


把什么内容加到最后一列?
作者: a87750530    时间: 2011-6-26 14:06

本帖最后由 a87750530 于 2011-6-26 14:09 编辑

5# tmplinshi
把这个内容“>>C:\Windows\System32\Drivers\etc\hosts”加在每一行的末尾
  1. 如:115.47.219.95 anten3.zoomshare.com
  2. 变成
  3. echo 115.47.219.95 anten3.zoomshare.com >>C:\Windows\System32\Drivers\etc\hosts
复制代码
前面的echo我倒是会了,会面的执行就卡壳了!

超级版主,你写的代码结果测试貌似没有效果!很是深奥!
作者: tmplinshi    时间: 2011-6-26 14:08

  1. echo %%a^>^>C:\Windows\System32\Drivers\etc\hosts>>b.txt
复制代码

作者: a87750530    时间: 2011-6-26 14:16

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.    set str=%%a
  4.    setlocal enabledelayedexpansion
  5.    echo;!str:115.=echo 115.!
  6.    endlocal
  7. ))>tem
  8. move tem b.txt
  9. goto 2
  10. :2
  11. for /f "delims=" %%a in (b.txt) do (
  12. echo %%a^>^>C:\Windows\System32\Drivers\etc\hosts>>c.txt
  13. )
  14. start c.txt
  15. end
复制代码
搞定了,谢谢版主!
作者: batman    时间: 2011-6-26 14:52

不得不说楼主写的代码比我的要高深多了,本来可以一步实现的,楼主非要分成n步来完成。。。
作者: Hello123World    时间: 2011-6-26 15:33

  1. 115.47.219.95 www.aiqianming.cn
  2. 115.47.219.95 www.77112.com
  3. 115.47.219.95 www.6d6d.net
  4. .....
复制代码
假设以上内容保存在c:\hello.txt中,将批处理放在txt同一个目录。
  1. for /f  "delims=" %%i in (hello.txt) do @echo %%i>>C:\Windows\System32\Drivers\etc\hosts
  2. @echo    hosts屏蔽完成...任意键返回
  3. pause >nul  
复制代码

作者: a87750530    时间: 2011-6-26 20:43

实在是佩服各位版主的代码,其实是想做个批处理的小工具,结果发现自己水平实在是太低了,只好走点低级的分部完成了。谢谢各位了!
回复batman,你给的代码难道是这样用吗?实在深奥!
  1. @echo off
  2. (for /f "skip=4 delims=" %%a in (%~fs0) do echo %%a)>%systemroot%\dirvers\etc\hosts
  3. goto :eof
  4. 115.47.219.95 www.aiqianming.cn
  5. 115.47.219.95 www.77112.com
  6. 115.47.219.95 www.6d6d.net
  7. ..........省略N个网址!
复制代码

作者: mxxcgzxxx    时间: 2011-6-29 09:57

11# a87750530
  1. for /f "skip=4 delims=" %%a in (%~fs0) do echo %%a
复制代码
从自身文本的第四行开始读取的意思.
%~fs0 代表自己
作者: HAT    时间: 2011-6-29 11:11

11# a87750530


more命令的基本用法之一,半点都不深奥。
  1. @echo off
  2. more +3 %~fs0 >%systemroot%\dirvers\etc\hosts
  3. goto :eof
  4. 115.47.219.95 www.aiqianming.cn
  5. 115.47.219.95 www.77112.com
复制代码

作者: ygqiang    时间: 2011-6-30 14:17

你们都是用哪个方法解决的?

我只能用10楼的方法,才能成功。

其他各个楼层的方法,都不成功啊?
有什么方法可以放在1个bat文件里,就能解决问题?谢谢
作者: tmplinshi    时间: 2011-6-30 14:35

11# a87750530


more命令的基本用法之一,半点都不深奥。@echo off
more +3 %~fs0 >%systemroot%\dirvers\etc\hosts
goto :eof
115.47.219.95 www.aiqianming.cn
115.47.219.95 www.77112.com
HAT 发表于 2011-6-29 11:11


如果批处理是 c:\a&b.bat,%~fs0 的结果还是 c:\a&b.bat,导致出错。
作者: tmplinshi    时间: 2011-6-30 14:37

你们都是用哪个方法解决的?

我只能用10楼的方法,才能成功。

其他各个楼层的方法,都不成功啊?
有什么方法可以放在1个bat文件里,就能解决问题?谢谢
ygqiang 发表于 2011-6-30 14:17

13 楼的代码不能用吗?
作者: ygqiang    时间: 2011-7-1 08:19

13 楼的代码不能用吗?
tmplinshi 发表于 2011-6-30 14:37


对,使用了,没有效果!
作者: ygqiang    时间: 2011-7-1 08:24

本帖最后由 ygqiang 于 2011-7-1 08:36 编辑

晕。

13楼路径有错误。
  1. @echo off
  2. more +3 %~fs0 >%systemroot%\system32\drivers\etc\hosts
  3. goto :eof
  4. 174.36.30.67 dropbox.com
  5. 174.36.30.71 www.dropbox.com
  6. 75.101.129.115 dl.dropbox.com
  7. 75.101.159.151 dl-web.dropbox.com
  8. 174.36.30.67 forums.dropbox.com
  9. 174.36.30.71   www.dropbox.com
  10. ....
复制代码
解决了system32,版主没有加这个路径。
drivers这个拼写错误。
作者: ygqiang    时间: 2011-7-1 08:43

但18楼的方法,有个缺陷:

会将原来hosts文件的内容全部擦除,而不是添加到hosts文件里面。
以下方法,可以解决。
  1. %windir%\system32\NOTEPAD.EXE %windir%\system32\drivers\etc\hosts
  2. pause
  3. @echo off
  4. more +5 %~fs0 >>%systemroot%\system32\drivers\etc\hosts
  5. goto :eof
  6. 1
  7. 174.36.30.67 dropbox.com
  8. 174.36.30.71 www.dropbox.com
  9. 75.101.129.115 dl.dropbox.com
  10. 75.101.159.151 dl-web.dropbox.com
  11. 174.36.30.67 forums.dropbox.com
  12. 174.36.30.71   www.dropbox.com
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2