Board logo

标题: [网络连接] [代码征集]网站屏蔽批处理 [打印本页]

作者: youxi01    时间: 2007-11-24 16:27     标题: [代码征集]网站屏蔽批处理

大家都知道,利用hosts文件,可以达到屏蔽一些不受欢迎的网站.

代码要求:
1、能够添加需屏蔽的网站;
2、能够解除相应屏蔽的网站(最好可以显示已屏蔽的网站);

代码尽量简洁且配有解说;大家见仁见智,集思广益...
作者: novaa    时间: 2007-11-25 18:56

可能部分人不知道原理,
我先简单的说下
大家可以打开hosts文件看看(在C:\WINDOWS\system32\drivers\etc里面),如下
  1. # Copyright (c) 1993-1999 Microsoft Corp.
  2. #
  3. # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
  4. #
  5. # This file contains the mappings of IP addresses to host names. Each
  6. # entry should be kept on an individual line. The IP address should
  7. # be placed in the first column followed by the corresponding host name.
  8. # The IP address and the host name should be separated by at least one
  9. # space.
  10. #
  11. # Additionally, comments (such as these) may be inserted on individual
  12. # lines or following the machine name denoted by a '#' symbol.
  13. #
  14. # For example:
  15. #
  16. # 102.54.94.97 rhino.acme.com # source server
  17. # 38.25.63.10 x.acme.com # x client host
  18. 127.0.0.1 localhost
复制代码
只要在最后一行后面加上
127.0.0.1       你想屏蔽的网址    (注意:有7个空格)      
就打不开了(对原理感兴趣的自己BAIDU下)
下面是我写的
  1. @echo off&setlocal enabledelayedexpansion
  2. :kaishi
  3. echo.
  4. echo.
  5. echo.
  6. echo.
  7. echo 添加网址过滤请输入1;解除网址屏蔽请输入2;退出请按0;
  8. set /p scanf=
  9. if !scanf!==1 goto :pb else (
  10. if !scanf!==2 goto:jc else
  11. goto :end)
  12. :pb
  13. set /p str=请输入你想屏蔽的网址:
  14. echo 127.0.0.1 !str!>>C:\WINDOWS\system32\drivers\etc\hosts
  15. echo 网址!str!已经成功屏蔽!
  16. pause & cls & goto :kaishi
  17. :jc
  18. set /p str=请输入你想解除屏蔽的网址:
  19. for /f "delims=" %%a in (C:\WINDOWS\system32\drivers\etc\hosts) do echo %%a | findstr /v "!str!">>C:\WINDOWS\system32\drivers\etc\hosts1
  20. del C:\WINDOWS\system32\drivers\etc\hosts /q
  21. ren C:\WINDOWS\system32\drivers\etc\hosts1 hosts
  22. pause & cls & goto :kaishi
  23. :end
  24. exit
复制代码

[ 本帖最后由 novaa 于 2007-11-25 18:58 编辑 ]
作者: novaa    时间: 2007-11-25 19:02

哈哈
发现我写的好马虎
格式排版的也不好
本来想用CHOICE选择的,但是别人告诉,XP没有命令,。。。
作者: 随风    时间: 2007-11-25 23:22

::知道这个原理就好办了。
::    但又要人性化,又要简洁,只怕有点难度。。。。
::         哈哈…… 代码 N 长…………

  1. @echo off&color 0f&title 网址 屏蔽/解除屏蔽
  2. :: by 小楼一夜听春雨 2007-11-25
  3. set wjm=C:\WINDOWS\system32\drivers\etc
  4. set "str=127.0.0.1       "&set "kg=                   "
  5. set "tisi=echo\&echo %kg%注: 此操作需要经过杀毒软件的同意。"
  6. set "tisi2=echo %kg%=================================="
  7. set "yip=以下是已经被屏蔽的网址&echo ======================&echo\"
  8. set "npb=目前没有被屏蔽的网址。&echo ======================&echo\&echo\&echo\"
  9. set "tisi=%tisi%&%tisi2%&echo\&echo\"
  10. :loop
  11. setlocal EnableDelayedExpansion
  12. call :xiansi
  13. echo\&echo 请选择 { 1 屏蔽网址 } { 2 解除屏蔽 } { 3 全部解除屏蔽 }&echo\
  14. set /p xuan=请选择 [ 1,2,3 ]
  15. if "%xuan%"=="" (set xuan=a) else set xuan=%xuan:"=%
  16. if "%xuan%"=="1" goto jia
  17. if "%xuan%"=="2" goto _jiecu
  18. if "%xuan%"=="3" set pinbi3=y&goto _jiecu
  19. call :cuowu
  20. endlocal
  21. goto loop
  22. :_jiecu
  23. cls&call :xiansi
  24. if defined pinbi3 (
  25.    for /l %%a in (1 1 %num%) do set wz=!wz! %%a
  26.    goto jiecu
  27. )
  28. echo\&echo 输入已经屏蔽的网址前面的序号,解除屏蔽相应的网址。
  29. echo\&echo 解除屏蔽,可一次输入多个序号,用空格分开。
  30. echo\&echo 如:1 2 5 10 (即:解除1、2、5、10)
  31. echo\&echo 按“回车键”或“点关闭按钮”退出。。。&echo\
  32. set /p wz=请输入序号:
  33. if "!wz!"=="" exit
  34. set pand=!wz: =!
  35. echo !pand!|findstr "^[0-9].*$"&&goto jiecu
  36. call :cuowu
  37. endlocal
  38. goto loop
  39. :jiecu
  40. attrib -r %wjm%\hosts
  41. color 1f
  42. for /f "delims=" %%a in (%wjm%\hosts) do (
  43.    set pin=
  44.    for %%i in (%wz%) do if "%%a"=="!str!!%%i!" set pin=a
  45.    if not defined pin echo %%a>>%wjm%\hosts1
  46. )
  47. set wz=&set "pinbi3="
  48. del/q %wjm%\hosts
  49. ren %wjm%\hosts1 hosts
  50. del/q %wjm%\hosts1
  51. attrib +r %wjm%\hosts
  52. cls&echo\&echo 解除屏蔽成功。。。
  53. endlocal
  54. goto loop
  55. :jia
  56. cls&%tisi%
  57. echo\&echo 请输入需要“屏蔽”的“单个”网址。
  58. echo\&echo 或 先在“某文档”里输入所有要屏蔽的网址,一行一个。
  59. echo\&echo 再在这里输入 “文档名” (含全路径和后缀名)
  60. echo\&echo 或将此文档拖放到此,可批量添加。
  61. echo\&echo 按“回车键”或“点关闭按钮”退出。。。&echo\
  62. set /p wdm=请输入文档名或网址:
  63. set wdm=%wdm:"=%
  64. if "%wdm%"=="" exit
  65. set wdm="%wdm%"
  66. if exist %wdm% (set "wdm=type %wdm%") else (set "wdm=echo %wdm%")
  67. attrib -r %wjm%\hosts
  68. for /f "delims=" %%a in ('%wdm%') do (
  69.    color cf&echo !str!%%a>>%wjm%\hosts
  70. )
  71. attrib +r %wjm%\hosts
  72. cls&echo\&echo 屏蔽成功。。。
  73. endlocal
  74. goto loop
  75. :xiansi
  76. set you=&set xs=&set num=
  77. for /f "tokens=1* delims= " %%a in (%wjm%\hosts) do (
  78.    if "%%a"=="127.0.0.1" set /a xs+=1
  79.    if !xs! geq 2 (
  80.      if !xs! equ 2  %tisi%&echo %yip%&set you=a
  81.      set /a num+=1
  82.      set !num!=%%b&echo ^(!num!^) %%b
  83. ))
  84. echo\
  85. if not defined you %tisi%&echo %npb%
  86. goto :eof
  87. :cuowu
  88. cls&echo\&echo  你的输入错误,请重新输入。。。&echo\
  89. goto :eof
复制代码

[ 本帖最后由 随风 于 2007-11-29 07:19 编辑 ]
作者: novaa    时间: 2007-11-26 07:44

N长,哈哈
不过人性化,
功能足
很不错的啊
向版主学习!
作者: youxi01    时间: 2007-11-26 07:56

原帖由 随风 于 2007-11-25 23:22 发表
::知道这个原理就好办了。
::    但又要人性化,又要简洁,只怕有点难度。。。。
::         哈哈…… 代码 N 长…………
::@echo off&color 0f&title 网址 屏蔽/解除屏蔽
:: by 小楼一夜听春雨 2007-11-25
:lo ...


不错啊,加分鼓励.不过提点建议,标签或者封装的"函数"取名的时候最好是用英文好些,用中文的话,因为大多人采取的是拼音的方式,而且是简写的,所以到时可能会忘记标签原来的意义...
作者: 随风    时间: 2007-11-26 15:06     标题: 回复 6# 的帖子

你是说的 这个 “title 网址 屏蔽/解除屏蔽”  吗?
作者: youxi01    时间: 2007-11-26 18:04

原帖由 随风 于 2007-11-26 15:06 发表
你是说的 这个 “title 网址 屏蔽/解除屏蔽”  吗?

里面的标签,如:jiec,:quan啊
作者: 随风    时间: 2007-11-27 10:18

哈哈 。。
那我就没办法了,除了26个字母,其它的我统统不认识。哈哈哈哈。。。。。
作者: youxi01    时间: 2007-11-28 23:05

代码似乎还有点点问题,我解除屏蔽的时候,似乎解除不了啊

还有个问题,代码看起来似乎有点乱,排版不是很好看(呵呵,鸡蛋里挑骨头了,因为既然是代码征集,就是拿的出手的精品中的精品)
作者: 随风    时间: 2007-11-29 07:20

已经更新,这已经是最大努力了,
稍微作了些优化,和出错判断。
作者: somebody    时间: 2007-11-29 13:51

哈哈~~~
我来揭示一下你们又犯了什么错误~~~
1. 加到hosts 里的网站,是不是所谓的病毒、木马网站,色情、垃圾网站先
      是的话,就一点机会都不要给,也就是说,不需要提供解除了

2. 哦,你们以为人家加个屏蔽网站就要这么辛苦吖,加一个就要用那个批处理吖
      想想整个网络有多少个网站先,加这些东西自然是到各安全论坛里去要
      几千上万个屏蔽网站自然是别人帮你收集,你拿来用,靠你一个人,傻!
3.
  1. @echo off
  2. attrib -r %windir%\system32\drivers\etc\hosts && notepad.exe %windir%\system32\drivers\etc\hosts
  3. echo 编辑好hosts后保存,保存好后就在CMD窗口按回车即可
  4. pause>nul
  5. attrib +r %windir%\system32\drivers\etc\hosts
复制代码
4. 其实若中毒的话,人家要搞你的hosts,一样可以把你的hosts 删掉,只读又如何,人家改不了你的hosts就删掉,然后自己建一个hosts,并且这个hosts是你很难删掉的,牛吧
作者: 随风    时间: 2007-11-29 15:54

原帖由 somebody 于 2007-11-29 13:51 发表
哈哈~~~
我来揭示一下你们又犯了什么错误~~~
1. 加到hosts 里的网站,是不是所谓的病毒、木马网站,色情、垃圾网站先
      是的话,就一点机会都不要给,也就是说,不需要提供解除了

2. 哦,你们以为人家加个 ...


真是一山还有一山高,在下真是甘拜下风。。。。

按楼上的说法,最好不要上网,因为没有任何东西能彻底的预防病毒,
    就好象一个人,怕噎死而不敢喝水一样,又好像认为吃过了早饭就不用吃晚饭了一样,因为反正还是会饿的!

[ 本帖最后由 随风 于 2007-11-29 16:01 编辑 ]
作者: youxi01    时间: 2007-11-29 16:19     标题: 回复 13# 的帖子

有同感,站在巨人的面前
我们就是那一 弱智
作者: novaa    时间: 2007-11-29 18:20

晕啊
somebody应该知道,批处理作用是有限的!发挥了他的作用就足够了,何必还要说他不能怎么怎么的呢?
利用host是“一种“方法
利用批处理就能简化我们利用这种方法的
这就达到了批处理的目的了,
作者: somebody    时间: 2007-11-30 15:27

不上网?
那你做东西是不是要考虑周全先?是不是先?
我还没说你呢普通人
你以为每个人的系统都装在C盘啊,你要不要改好点啊,这些小错误我不想说出来,本应该能自己注意到的
作者: garyng    时间: 2011-11-5 21:10

好老的贴啊~
我自己写的:
http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html

代码:
  1. ::61
  2. @echo off&Setlocal enabledelayedexpansion
  3. title Hosts文件修改器&color 0A
  4. mode con: cols=70 lines=30
  5. chcp 936
  6. :Win_Version
  7. for /f "usebackq tokens=1,2,*" %%x in (`"reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" 2>nul"^|findstr /i ProductName`) do (
  8.     set winversion=%%z
  9. )
  10. for /f "usebackq tokens=3*" %%a in (`"reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows" 2>nul"^|findstr /i CSDVersion`) do (
  11.     set SP=%%a
  12. )
  13. :Welcome_Screen
  14. title 主页&echo/&echo/
  15. echo                 ┌────────┐                             
  16. echo                 │Hosts文件修改器 │                             
  17. echo                 │    GaryNg      │
  18. echo                 └────────┘
  19. echo/&echo         系统版本:!winversion!
  20. echo                     Service Pack !SP:~2,1!
  21. ping /n 4 127.1>nul 2>nul
  22. :Permission_Test
  23. title 权限确认&cls
  24. echo/&echo/&echo/
  25. echo                正在测试用户权限
  26. echo                  ...请稍后...
  27. mkdir %Windir%\test3141582653 >nul 2>nul
  28. if not exist %Windir%\test3141582653 (
  29.     cls
  30.     echo/&echo/&echo/
  31.     echo                请以管理员权限运行
  32.     echo 或者退出后右键点击我,选"Run As Administrator"
  33.     echo                  按任意键退出
  34.     pause>nul
  35.     exit
  36. ) else (
  37. rd /q %Windir%\test3141582653 >nul 2>nul
  38. )
  39. cls
  40. :Write_Hosts_If_Not_Exist
  41. if not exist %Windir%\System32\drivers\etc\hosts (
  42. echo #Hosts文件修改器Rewrote This File >%Windir%\System32\drivers\etc\hosts
  43. echo 127.0.0.1    localhost >>%Windir%\System32\drivers\etc\hosts
  44. )
  45. type %Windir%\System32\drivers\etc\hosts|find /i "localhost"||(
  46. echo #Hosts文件修改器Rewrote This File >%Windir%\System32\drivers\etc\hosts
  47. echo 127.0.0.1    localhost >>%Windir%\System32\drivers\etc\hosts
  48. )
  49. :Auto_Update
  50. goto Update_Hosts
  51. :Menu
  52. title 功能列表&cls&echo/&echo/&echo/
  53. echo                          功能列表
  54. echo                 ┌─────────────┐
  55. echo                 │   A.显示hosts文件        │
  56. echo                 │   B.添加新屏蔽网址       │
  57. echo                 │   C.去掉某个已屏蔽的网址 │
  58. echo                 │   D.Hosts文件介绍        │
  59. echo                 │   E.检查更新             │         
  60. echo                 │   F.备份Hosts文件        │
  61. echo                 │   G.还原Hosts文件        │
  62. echo                 │   H.报告虫虫(Bug)      │
  63. echo                 │   Q.退出                 │
  64. echo                 └─────────────┘
  65. set choice=
  66. set /p choice=[请输入选择...]
  67. if /i "%choice%"=="a" goto List_Hosts
  68. if /i "%choice%"=="b" goto Add_Hosts
  69. if /i "%choice%"=="c" goto Del_Hosts
  70. if /i "%choice%"=="d" goto Info_Hosts
  71. if /i "%choice%"=="e" goto Update_Hosts
  72. if /i "%choice%"=="f" goto Backup_Hosts
  73. if /i "%choice%"=="g" goto Restore_Hosts
  74. if /i "%choice%"=="h" goto Report_Hosts_Bug
  75. if /i "%choice%"=="q" goto Exit
  76. if /i "%choice%"=="" (
  77.     echo                       无效的选项,请重新输入
  78.     ping /n 3 127.1>nul 2>nul
  79.     cls&goto Menu
  80. )
  81. echo                       无效的选项,请重新输入
  82. ping /n 3 127.1>nul 2>nul
  83. cls&goto Menu
  84. :List_Hosts
  85. set block=0
  86. set jump=0
  87. set localhost=0
  88. title 显示hosts文件&cls&echo/&echo/&echo/
  89. echo/&echo    IP          Hosts
  90. for /f "tokens=1,2 eol=#" %%a in ('type %Windir%\System32\drivers\etc\hosts') do (
  91. if /i %%b==localhost (
  92. echo %%a   %%b     这是localhost,不能删除!
  93. set /a localhost+=1
  94. )
  95. if /i "%%b" NEQ "localhost" if %%a==127.0.0.1 (
  96. echo %%a   %%b     此网站已被屏蔽
  97. set /a block+=1
  98. ) else (
  99. echo %%a   %%b     此网站将跳转到%%a
  100. set /a jump+=1
  101. )
  102. )
  103. set /a linksum=!localhost!+!block!+!jump!
  104. echo/&echo 共有!linksum!条地址在Hosts文件中
  105. echo/&echo !block!个被屏蔽
  106. echo/&echo !jump!个将跳转到其他地址
  107. echo 按任意键返回主页&pause>nul&cls&goto Menu
  108. :Add_Hosts
  109. title 添加新网址-功能列表&cls&echo/&echo/&echo/
  110. echo                        功能列表
  111. echo                 ┌───────────┐
  112. echo                 │   E.屏蔽某个网址     │
  113. echo                 │   Q.返回             │
  114. echo                 └───────────┘
  115. set choice=
  116. set /p choice=[请输入选择...]
  117. if /i "%choice%"=="e" goto Add_Block_Hosts
  118. if /i "%choice%"=="q" goto Menu
  119. if /i "%choice%"=="" (
  120.     echo                       无效的选项,请重新输入
  121.     ping /n 3 127.1>nul 2>nul
  122.     cls&goto Add_Hosts
  123. )
  124. echo                       无效的选项,请重新输入
  125. ping /n 2 127.1>nul 2>nul
  126. cls&goto Add_Hosts
  127. :Add_Block_Hosts
  128. title 屏蔽某个网址&cls&echo/&echo/&echo/
  129. echo 请输入要屏蔽的网址(不带http://)
  130. echo 例如:
  131. echo www.google.com
  132. echo www.baidu.com
  133. set /p blocklink=[请输入网址...]
  134. type %Windir%\System32\drivers\etc\hosts|find /i "%blocklink%" && (echo 该地址已经存在!& ping /n 3 127.1>nul 2>nul&cls&goto Add_Block_Hosts)
  135. echo/&echo 正在添加...
  136. echo 127.0.0.1    %blocklink% >>%Windir%\System32\drivers\etc\hosts
  137. echo/&echo 完成!
  138. echo/&echo 按Y键继续添加屏蔽网址,其他键返回主页
  139. set choice=
  140. set /p choice=[请输入...]
  141. if /i "%choice%"=="y" goto Add_Block_Hosts
  142. cls&goto Menu
  143. :Del_Hosts
  144. setlocal
  145. title 去掉某个网址&cls&echo/&echo/
  146. set localhost=0
  147. set hostnum=1
  148. echo Hosts文件列表:
  149. echo    IP             Hosts
  150. for /f "eol=# tokens=1,2" %%c in ('type %windir%\System32\drivers\etc\hosts') do (
  151. if /i "%%d" neq "localhost" (
  152. echo !hostnum!^) %%c   %%d
  153. set /a hostnum+=1
  154. )
  155. )
  156. set /a hostnum-=1
  157. if "!hostnum!" == "0" (
  158. echo 你的Hosts文件没有地址啊!添加屏蔽网址吗?
  159. set /p choice=[要=y,不要!=n]
  160. if /i "!choice!"=="y" (
  161. ping /n 3 127.1>nul 2>nul&cls
  162. goto Add_Hosts
  163. ) else (
  164. ping /n 3 127.1>nul 2>nul&cls
  165. goto Menu
  166. )
  167. )
  168. echo 请问要删除那一行?
  169. set /p delline=[请输入,上限为%hostnum%...]
  170. if /i "%delline%!" gtr "%hostnum%" (
  171. echo 没有此行!请重新输入~
  172. ping /n 3 127.1>nul 2>nul&cls
  173. endlocal&goto Del_Hosts
  174. )
  175. if /i "%delline%"=="0" (
  176. echo 没有此行!请重新输入~
  177. ping /n 3 127.1>nul 2>nul&cls
  178. endlocal&goto Del_Hosts
  179. )
  180. if /i "%delline%"=="" (
  181. echo 没有此行!请重新输入~
  182. ping /n 3 127.1>nul 2>nul&cls
  183. endlocal&goto Del_Hosts
  184. )
  185. for /f "delims=" %%e in ('find /c /v ""^<%windir%\System32\drivers\etc\hosts') do (
  186. set totalline=%%e
  187. )
  188. set /a delline=!totalline!-!hostnum!+!delline!
  189. (for /F "tokens=1* delims=:" %%f In ('findstr /n .* %windir%\System32\drivers\etc\hosts') do if !delline! NEQ %%f Echo %%g)>Temp
  190. move Temp %windir%\System32\drivers\etc\hosts >nul 2>nul
  191. echo/&echo                   操作成功!
  192. echo/&echo      按Y键继续添加删除网址,其他键返回主页
  193. set /p choice=[请输入...]
  194. if /i "%choice%"=="y" goto Del_Hosts
  195. goto Menu
  196. :Info_Hosts
  197. title Hosts文件介绍&cls&echo/&echo/
  198. set infostr1=Hosts 文 件 中 存 放 的 是 一 些 网 站 主 机 的 域 名 和 其 对 应 的 IP 。 当 我 们 在 使 用 浏 览 器 浏 览 一 个 网 站 时 ,系 统 会 先 检 查 本 地 的 Hosts 表 文 件 , 其 中 是 否 已 经 有 相 应 的 域 名 与 IP 地 址 对 应 关 系 , 如 果 有 就 会 直 接 采 用 , 因 而 会 节 约 大 量 的 时 间 。
  199. set infostr2=假 如 Hosts 表 文 件 的 某 个 域 名 与 IP 地 址 产 生 了 错 误 的 对 应 , 但 你 在 浏 览 器 中 输 入 这 个 域 名 试 图 打 开 其 对 应 的 网 页 时 , 就 会 出 现 打 不 开 的 情 况 。 根 据 此 原 理 , 我 们 可 以 通 过 修 改 Hosts 文 件 来 解 决 某 些 网 站 打 不 开 的 情 况 。 同 时 , 一 些 烦 人 的 网 站 ( 例 如 那 烦 人 的 广 告 ) 我 们 可 以 利 用 这 个 特 性 将 其 ‘ 屏 蔽 ’ 掉 , 只 要 添 加 这 个 网 站 并 将 其 对 应 的 IP 写 为 127 . 0 . 0 . 1 即 可 ~
  200. set infostr3=本 程 序 运 用 了 Hosts 文 件 的 特 性 , 让 用 户 能 自 由 添 加 要 屏 蔽 的 网 站 , 备 份 Hosts 文 件 , 等 等 一 些 实 用 的 功 能 ~
  201. echo/&set /p=       <nul
  202. for %%h in (%infostr1%) do (
  203. set /p=%%h<nul
  204. ping /n 1 127.0.0.1>nul 2>nul
  205. )
  206. echo/&set /p=       <nul
  207. for %%h in (%infostr2%) do (
  208. set /p=%%h<nul
  209. ping /n 1 127.0.0.1>nul 2>nul
  210. )
  211. echo/&set /p=       <nul
  212. for %%h in (%infostr3%) do (
  213. set /p=%%h<nul
  214. ping /n 1 127.0.0.1>nul 2>nul
  215. )
  216. echo/&echo 按任意键回到主页&pause>nul&goto Menu
  217. :Update_Hosts
  218. title 检查更新&cls&echo/&echo/
  219. :Del_Temp
  220. if exist %temp%\Hosts_Update.vbs del /q %temp%\Hosts_Update.vbs
  221. if exist %temp%\Hosts_Download.vbs del /q %temp%\Hosts_Download.vbs
  222. if exist %temp%\版本标记.txt del /q %temp%\版本标记.txt
  223. :Check_Ext
  224. for /f %%z in ("%0") do (
  225. if /i "%%~xz" == ".bat" (
  226. set downloadlink=http://dl.dropbox.com/u/43619472/%%%%E6%%%%89%%%%B9%%%%E5%%%%A4%%%%84%%%%E7%%%%90%%%%86/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8.bat
  227. ) else (
  228. set downloadlink=http://dl.dropbox.com/u/43619472/%%%%E6%%%%89%%%%B9%%%%E5%%%%A4%%%%84%%%%E7%%%%90%%%%86/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8.exe
  229. )
  230. )
  231. set newver=no
  232. echo                            ...请稍等...
  233. call :Download_VBS_Code Hosts_Update.vbs http://dl.dropbox.com/u/43619472/%%%%E6%%%%89%%%%B9%%%%E5%%%%A4%%%%84%%%%E7%%%%90%%%%86/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8/Ver.txt 版本标记.txt
  234. cscript //NoLogo /e:vbscript %temp%\Hosts_Update.vbs
  235. set newver=未知
  236. for /f %%i in (%temp%\版本标记.txt) do set newver=%%i
  237. if "%newver%"=="未知" (
  238. echo                              更新不成功
  239. ping /n 3 127.0.0.1>nul 2>nul
  240. cls
  241. goto Menu
  242. )
  243. set /p nowver=<"%~0"
  244. set "nowver=%nowver:~2%"
  245. if "!newver!" gtr "!nowver!" (
  246. goto Do_Update
  247. ) else (
  248. echo                      版本最新,不需要更新
  249. ping /n 3 127.0.0.1>nul 2>nul
  250. cls&goto Menu
  251. )
  252. call :Download_VBS_Code Website_Visit.vbs http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html _~TeMp__Temp.T.e.M.p.Tmp
  253. cscript //NoLogo /e:vbscript %temp%\Website_Visit.vbs
  254. del /q %temp%\_~TeMp__Temp.T.e.M.p.Tmp
  255. :Do_Update
  256. title 发现新版本&cls&echo/&echo/
  257. echo/&echo         当前版本:  %nowver%
  258. echo/&echo         最新版本:  %newver%
  259. echo/&echo           发现新版本,是否更新?
  260. echo/&echo         y 开始更新  其他键返回主页
  261. set /p update=[请输入...]
  262. if /i "%update%"=="y" (
  263. title 下载更新&cls&echo/&echo/
  264. echo                    正在下载更新
  265. echo                    ...请稍后...
  266. call :Download_VBS_Code Hosts_Download.vbs %downloadlink% hosts文件修改器_new.bat
  267. cscript //NoLogo /e:vbscript %temp%\Hosts_Download.vbs
  268. (for /l %%a in (1 1 1) do set /p test=)<%temp%\hosts文件修改器_new.bat
  269. set "test=%test:~2%"
  270. if /i "%test%" neq "" (
  271. echo                  更新不成功
  272. ping /n 3 127.0.0.1>nul 2>nul
  273. cls
  274. goto Menu
  275. )
  276. echo @echo off>Hosts_Temp.bat
  277. echo mode con: cols=70 lines=30 >>Hosts_Temp.bat
  278. echo title 下载更新^&cls^&echo/^&echo/ >>Hosts_Temp.bat
  279. echo echo             ...正在更新... >>Hosts_Temp.bat
  280. echo ping /n 3 127.0.0.1^>nul 2^>nul >>Hosts_Temp.bat
  281. echo copy /y %temp%\hosts文件修改器_new.bat Hosts文件修改器.bat ^>nul 2^>nul >>Hosts_Temp.bat
  282. echo if "%%errorlevel%%" neq "0"  echo 更新不成功 >>Hosts_Temp.bat
  283. echo pause >>Hosts_Temp.bat
  284. echo del /q %%0 >>Hosts_Temp.bat
  285. echo exit >>Hosts_Temp.bat
  286. cls
  287. echo     程序即将退出,并开启另一个窗口,以更新文件!
  288. ping /n 3 127.0.0.1>nul 2>nul
  289. Hosts_Temp.bat
  290. exit
  291. ) else (
  292. ping /n 3 127.0.0.1>nul 2>nul
  293. cls&goto Menu
  294. )
  295. :Backup_Hosts
  296. if not exist %windir%\System32\drivers\etc\Hosts_备份 (
  297. md %windir%\System32\drivers\etc\Hosts_备份
  298. )
  299. for /f "tokens=1" %%i in ('echo %date%') do (
  300. set da=%%i
  301. set da=!da:/=-!
  302. echo !da!
  303. )
  304. title 备份Hosts文件&cls&echo/&echo/
  305. echo                      正在备份
  306. echo                    ...请稍后...
  307. copy /y %windir%\System32\drivers\etc\hosts %windir%\System32\drivers\etc\Hosts_备份\!da!_Hosts备份.txt
  308. cls&echo/&echo/
  309. echo                   ...备份完毕...
  310. ping /n 3 127.0.0.1>nul 2>nul&cls&goto Menu
  311. echo 按任意键返回主页&pause>nul&cls&goto Menu
  312. :Restore_Hosts
  313. title 还原Hosts文件&cls&echo/&echo/
  314. set backupnum=0
  315. if exist %temp%\restore_list_temp.txt (
  316. del /q %temp%\restore_list_temp.txt
  317. )
  318. if exist %windir%\System32\drivers\etc\Hosts_备份 (
  319. dir /b %windir%\System32\drivers\etc\Hosts_备份 >>%temp%\restore_list_temp.txt
  320. for /f "delims=: tokens=1,2" %%i in ('findstr /n .* %temp%\restore_list_temp.txt') do (
  321. set /a backupnum+=1
  322. echo %%i^) %%j
  323. )
  324. )
  325. echo 有!backupnum!个备份历史
  326. echo 请问需要备份那个?
  327. set /p backup=[请输入,下限为1,上限为!backupnum!]
  328. if "!backup!" gtr "!backupnum!" (
  329. echo 号码过大!请重新输入...
  330. ping /n 3 127.0.0.1>nul 2>nul
  331. goto Restore_Hosts
  332. )
  333. if "!backup!" lss "1" (
  334. echo 号码不能小于1!请重新输入...
  335. ping /n 3 127.0.0.1>nul 2>nul
  336. goto Restore_Hosts
  337. )
  338. if "!backup!"=="" (
  339. echo 请重新输入...
  340. ping /n 3 127.0.0.1>nul 2>nul
  341. goto Restore_Hosts
  342. )
  343. cls
  344. echo/&echo/
  345. echo                      正在还原
  346. echo                    ...请稍后...
  347. for /f "delims=: tokens=1,2" %%k in ('findstr /n .* %temp%\restore_list_temp.txt') do (
  348. if /i "!backup!"=="%%k" (
  349. copy /y "%windir%\System32\drivers\etc\Hosts_备份\%%l" %windir%\System32\drivers\etc\hosts >nul 2>nul
  350. )
  351. )
  352. cls
  353. echo/&echo/
  354. echo                   ...成功还原...
  355. echo/&echo 按任意键回到主页&pause>nul&goto Menu
  356. :Report_Hosts_Bug
  357. title 报告虫虫(Bug)&cls&echo/
  358. echo/&echo              找到虫虫了(Bug)?快点,去报告吧!
  359. echo/&echo            请记得写下你的操作系统Service Pack是多少
  360. echo/&echo                    操作系统:!winversion!
  361. echo/&echo                       Service Pack !SP:~2,1!
  362. echo/&echo           打开网页后,滚到最底,点击"Add a comment",
  363. echo/&echo          描述虫虫(Bug),写下操作系统和Service Pack号,
  364. echo/&echo                      按下“发布评论”即可!
  365. echo/&echo                    按任意键打开网页报告虫虫
  366. pause>nul
  367. start http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html
  368. cls&goto Menu
  369. :Exit
  370. title 退出&cls&echo/&echo/
  371. set /p =程序将在             <nul
  372. for /l %%a in (3 -1 1) do (
  373. set /p =%%a秒内退出... <nul&ping -n 2 127.1 >nul
  374. )
  375. exit
  376. :Download_VBS_Code
  377. set sfilename=%1
  378. set downloadlink1=%2
  379. set tempfilename=%3
  380. echo on error resume next>%temp%\%1
  381. echo iLocal=LCase^("%temp%\%3"^) >>%temp%\%1
  382. echo iRemote=LCase^("%2"^) >>%temp%\%1
  383. echo Set xPost=createObject^("Microsoft.XMLHTTP"^) 'Set Post = CreateObject^("Msxml2.XMLHTTP"^) >>%temp%\%1
  384. echo xPost.Open "GET",iRemote,0 >>%temp%\%1
  385. echo xPost.Send^(^) >>%temp%\%1
  386. echo set sGet=createObject^("ADODB.Stream"^) >>%temp%\%1
  387. echo sGet.Mode=3 >>%temp%\%1
  388. echo sGet.Type=1 >>%temp%\%1
  389. echo sGet.Open^(^) >>%temp%\%1
  390. echo sGet.Write xPost.ResponseBody >>%temp%\%1
  391. echo sGet.SaveToFile iLocal,2 >>%temp%\%1
  392. goto :eof
复制代码

作者: CrLf    时间: 2011-11-7 07:16

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p 屏蔽=要屏蔽的网址:
  3. set /p 解除=要解除的屏蔽:
  4. echo 127.0.0.1 !屏蔽!>"%Windir%\System32\drivers\etc\hosts"
  5. if defined 解除 findstr /vxrc:"\<[0-9.]*\>\<!解除!\>" "%Windir%\System32\drivers\etc\hosts">host.tmp
  6. move /y host.tmp "%Windir%\System32\drivers\etc\hosts"
复制代码

作者: garyng    时间: 2011-11-9 19:15

版主好厉害哦!
学习学习~

学多了点Findstr的正则表达式~




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