![Board logo](images/default/logo.gif)
标题: [文件管理] 【原创】Hosts文件修改器 [打印本页]
作者: garyng 时间: 2012-7-23 21:58 标题: 【原创】Hosts文件修改器
这东西1、2年前还在新手入门中时写的,代码有点乱,请见谅。Hosts文件,应该每个人都懂吧
但是,照顾一下新手哈哈:
Hosts文件中存放的是一些网站主机的域名和其对应的IP。当我们在使用浏览器浏览一个网站时,系统会先检查本地的Hosts表文件,其中是否已经有相应的域名与IP地址对应关系,如果有就会直接采用,因而会节约大量的时间。假如Hosts表文件的某个域名与IP地址产生了错误的对应,但你在浏览器中输入这个域名试图打开其对应的网页时,就会出现打不开的情况。根据此原理,我们可以通过修改Hosts文件来解决某些网站打不开的情况。
同时,一些烦人的网站(例如那烦人的广告)我们可以利用这个特性将其‘屏蔽’掉,只要添加这个网站并将其对应的IP写为127.0.0.1即可~本程序运用了Hosts文件的特性,让用户能自由添加要屏蔽的网站,备份Hosts文件,等等一些实用的功能~
13岁时写的,界面难免有点幼稚,代码难免有点凌乱,请见谅啊。。
好了废话不多说吧。。
——————————————————————————分割线啊分割线——————————————————————————
一些些的功能:- 主要功能:
- 1、屏蔽网站
- 2、解除已屏蔽的网站
-
- 其他功能:
- 1、显示Hosts文件
- 2、统计Hosts文件内的链接数量
- 3、Hosts文件介绍
- 4、修复Hosts文件
- 5、备份Hosts文件
- 6、还原Hosts文件
- 7、检查更新
- 8、报虫(BUG)
复制代码
附上代码:- ::65
- @echo off&Setlocal enabledelayedexpansion
- title Hosts文件修改器&color 0A
- mode con: cols=70 lines=30
- :Win_Version
- for /f "usebackq tokens=1,2,*" %%x in (`"reg query
-
- "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
-
- NT\CurrentVersion" 2>nul"^|findstr /i ProductName`) do (
- set winversion=%%z
- )
- :Welcome_Screen
- title 主页&echo/&echo/
- echo ┌────────┐
-
-
- echo │Hosts文件修改器 │
-
-
- echo │ GaryNg │
- echo └────────┘
- echo/&echo 系统版本:!winversion!
- ping /n 4 127.1>nul 2>nul
- :Permission_Test
- title 权限确认&cls
- echo/&echo/&echo/
- echo 正在测试用户权限
- echo ...请稍后...
- mkdir %Windir%\test3141582653 >nul 2>nul
- if not exist %Windir%\test3141582653 (
- cls
- echo/&echo/&echo/
- echo 请以管理员权限运行
- echo 或者退出后右键点击我,选"Run As Administrator"
- echo 按任意键退出
- pause>nul
- exit
- ) else (
- rd /q %Windir%\test3141582653 >nul 2>nul
- )
- cls
- :Write_Hosts_If_Not_Exist
- if not exist %Windir%\System32\drivers\etc\hosts (
- echo #Hosts文件修改器Rewrote This File >%Windir%
-
- \System32\drivers\etc\hosts
- echo 127.0.0.1 localhost >>%Windir%\System32
-
- \drivers\etc\hosts
- )
- type %Windir%\System32\drivers\etc\hosts|find /i
-
- "localhost" >nul 2>nul||(
- echo #Hosts文件修改器Rewrote This File >%Windir%
-
- \System32\drivers\etc\hosts
- echo 127.0.0.1 localhost >>%Windir%\System32
-
- \drivers\etc\hosts
- )
- :Auto_Update
- ::goto Update_Hosts
- :Menu
- title 功能列表&cls&echo/&echo/&echo/
- echo 功能列表
- echo ┌─────────────┐
- echo │ A.显示hosts文件 │
- echo │ B.添加新屏蔽网址 │
- echo │ C.去掉某个已屏蔽的网址 │
- echo │ D.Hosts文件介绍 │
- echo │ E.检查更新 │
-
-
- echo │ F.备份Hosts文件 │
- echo │ G.还原Hosts文件 │
- echo │ H.报告虫虫(Bug) │
- echo │ Q.退出 │
- echo └─────────────┘
- set choice=
- set /p choice=[请输入选择...]
- if /i "%choice%"=="a" goto List_Hosts
- if /i "%choice%"=="b" goto Add_Hosts
- if /i "%choice%"=="c" goto Del_Hosts
- if /i "%choice%"=="d" goto Info_Hosts
- if /i "%choice%"=="e" goto Update_Hosts
- if /i "%choice%"=="f" goto Backup_Hosts
- if /i "%choice%"=="g" goto Restore_Hosts
- if /i "%choice%"=="h" goto Report_Hosts_Bug
- if /i "%choice%"=="q" goto Exit
- if /i "%choice%"=="" (
- echo 无效的选项,请重新输入
- ping /n 3 127.1>nul 2>nul
- cls&goto Menu
- )
- echo 无效的选项,请重新输入
- ping /n 3 127.1>nul 2>nul
- cls&goto Menu
- :List_Hosts
- set block=0
- set jump=0
- set localhost=0
- title 显示hosts文件&cls&echo/&echo/&echo/
- echo/&echo IP Hosts
- for /f "tokens=1,2 eol=#" %%a in ('type %Windir%
-
- \System32\drivers\etc\hosts') do (
- if /i %%b==localhost (
- echo %%a %%b 这是localhost,不能删除!
- set /a localhost+=1
- )
- if /i "%%b" NEQ "localhost" if %%a==127.0.0.1 (
- echo %%a %%b 此网站已被屏蔽
- set /a block+=1
- ) else (
- echo %%a %%b 此网站将跳转到%%a
- set /a jump+=1
- )
-
- )
- set /a linksum=!localhost!+!block!+!jump!
- echo/&echo 共有!linksum!条地址在Hosts文件中
- echo/&echo !block!个被屏蔽
- echo/&echo !jump!个将跳转到其他地址
- echo 按任意键返回主页&pause>nul&cls&goto Menu
- :Add_Hosts
- title 添加新网址-功能列表&cls&echo/&echo/&echo/
- echo 功能列表
- echo ┌───────────┐
- echo │ E.屏蔽某个网址 │
- echo │ Q.返回 │
- echo └───────────┘
- set choice=
- set /p choice=[请输入选择...]
- if /i "%choice%"=="e" goto Add_Block_Hosts
- if /i "%choice%"=="q" goto Menu
- if /i "%choice%"=="" (
- echo 无效的选项,请重新输入
- ping /n 3 127.1>nul 2>nul
- cls&goto Add_Hosts
- )
- echo 无效的选项,请重新输入
- ping /n 2 127.1>nul 2>nul
- cls&goto Add_Hosts
- :Add_Block_Hosts
- title 屏蔽某个网址&cls&echo/&echo/&echo/
- echo 请输入要屏蔽的网址(不带http://)
- echo 例如:
- echo www.google.com
- echo www.baidu.com
- set /p blocklink=[请输入网址...]
- type %Windir%\System32\drivers\etc\hosts|find /i "%
-
- blocklink%" && (echo 该地址已经存在!& ping /n 3
-
- 127.1>nul 2>nul&cls&goto Add_Block_Hosts)
- echo/&echo 正在添加...
- echo 127.0.0.1 %blocklink% >>%Windir%\System32
-
- \drivers\etc\hosts
- echo/&echo 完成!
- echo/&echo 按Y键继续添加屏蔽网址,其他键返回主页
- set choice=
- set /p choice=[请输入...]
- if /i "%choice%"=="y" goto Add_Block_Hosts
- cls&goto Menu
- :Del_Hosts
- setlocal
- title 去掉某个网址&cls&echo/&echo/
- set localhost=0
- set hostnum=1
- echo Hosts文件列表:
- echo IP Hosts
- for /f "eol=# tokens=1,2" %%c in ('type %windir%
-
- \System32\drivers\etc\hosts') do (
- if /i "%%d" neq "localhost" (
- echo !hostnum!^) %%c %%d
- set /a hostnum+=1
- )
- )
- set /a hostnum-=1
- if "!hostnum!" == "0" (
- echo 你的Hosts文件没有地址啊!添加屏蔽网址吗?
- set /p choice=[要=y,不要!=n]
- if /i "!choice!"=="y" (
- ping /n 3 127.1>nul 2>nul&cls
- goto Add_Hosts
- ) else (
- ping /n 3 127.1>nul 2>nul&cls
- goto Menu
- )
- )
- echo 请问要删除那一行?
- set /p delline=[请输入,上限为%hostnum%...]
- if /i "%delline%!" gtr "%hostnum%" (
- echo 没有此行!请重新输入~
- ping /n 3 127.1>nul 2>nul&cls
- endlocal&goto Del_Hosts
- )
- if /i "%delline%"=="0" (
- echo 没有此行!请重新输入~
- ping /n 3 127.1>nul 2>nul&cls
- endlocal&goto Del_Hosts
- )
- if /i "%delline%"=="" (
- echo 没有此行!请重新输入~
- ping /n 3 127.1>nul 2>nul&cls
- endlocal&goto Del_Hosts
- )
- for /f "delims=" %%e in ('find /c /v ""^<%windir%
-
- \System32\drivers\etc\hosts') do (
- set totalline=%%e
- )
- set /a delline=!totalline!-!hostnum!+!delline!
- (for /F "tokens=1* delims=:" %%f In ('findstr /n .* %
-
- windir%\System32\drivers\etc\hosts') do if !delline! NEQ
-
- %%f Echo %%g)>Temp
- move Temp %windir%\System32\drivers\etc\hosts >nul 2>nul
- echo/&echo 操作成功!
- echo/&echo 按Y键继续添加删除网址,其他键返回主页
- set /p choice=[请输入...]
- if /i "%choice%"=="y" goto Del_Hosts
- goto Menu
- :Info_Hosts
- title Hosts文件介绍&cls&echo/&echo/
- set infostr1=Hosts 文 件 中 存 放 的 是 一 些 网 站 主 机
-
- 的 域 名 和 其 对 应 的 IP 。 当 我 们 在 使 用 浏 览 器
-
- 浏 览 一 个 网 站 时 ,系 统 会 先 检 查 本 地 的 Hosts
-
- 表 文 件 , 其 中 是 否 已 经 有 相 应 的 域 名 与 IP 地
-
- 址 对 应 关 系 , 如 果 有 就 会 直 接 采 用 , 因 而 会
-
- 节 约 大 量 的 时 间 。
- set infostr2=假 如 Hosts 表 文 件 的 某 个 域 名 与 IP 地
-
- 址 产 生 了 错 误 的 对 应 , 但 你 在 浏 览 器 中 输 入
-
- 这 个 域 名 试 图 打 开 其 对 应 的 网 页 时 , 就 会 出
-
- 现 打 不 开 的 情 况 。 根 据 此 原 理 , 我 们 可 以 通
-
- 过 修 改 Hosts 文 件 来 解 决 某 些 网 站 打 不 开 的 情
-
- 况 。 同 时 , 一 些 烦 人 的 网 站 ( 例 如 那 烦 人 的
-
- 广 告 ) 我 们 可 以 利 用 这 个 特 性 将 其 ‘ 屏 蔽 ’ 掉
-
- , 只 要 添 加 这 个 网 站 并 将 其 对 应 的 IP 写 为 127
-
- . 0 . 0 . 1 即 可 ~
- set infostr3=本 程 序 运 用 了 Hosts 文 件 的 特 性 , 让
-
- 用 户 能 自 由 添 加 要 屏 蔽 的 网 站 , 备 份 Hosts 文
-
- 件 , 等 等 一 些 实 用 的 功 能 ~
- echo/&set /p= <nul
- for %%h in (%infostr1%) do (
- set /p=%%h<nul
- ping /n 1 127.0.0.1>nul 2>nul
- )
- echo/&set /p= <nul
- for %%h in (%infostr2%) do (
- set /p=%%h<nul
- ping /n 1 127.0.0.1>nul 2>nul
- )
- echo/&set /p= <nul
- for %%h in (%infostr3%) do (
- set /p=%%h<nul
- ping /n 1 127.0.0.1>nul 2>nul
- )
- echo/&echo 按任意键回到主页&pause>nul&goto Menu
- :Update_Hosts
- title 检查更新&cls&echo/&echo/
- :Del_Temp
- if exist %temp%\Hosts_Update.vbs del /q %temp%
-
- \Hosts_Update.vbs
- if exist %temp%\Hosts_Download.vbs del /q %temp%
-
- \Hosts_Download.vbs
- if exist %temp%\版本标记.txt del /q %temp%\版本标记.txt
- 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
- set newver=no
- echo ...请稍等...
- 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
- cscript //NoLogo /e:vbscript %temp%\Hosts_Update.vbs
- set newver=未知
- for /f %%i in (%temp%\版本标记.txt) do set newver=%%i
- if "%newver%"=="未知" (
- echo 更新不
-
- 成功
- ping /n 3 127.0.0.1>nul 2>nul
- cls
- goto Menu
- )
- (for /l %%i in (1 1 3) do set /p nowver=)<"%~0"
- set "nowver=%nowver:~2%"
- if "!newver!" gtr "!nowver!" (
- goto Do_Update
- ) else (
- echo 版本最新,不需要更新
- ping /n 3 127.0.0.1>nul 2>nul
- cls&goto Menu
- )
- call :Download_VBS_Code Website_Visit.vbs
-
- http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html
-
- _~TeMp__Temp.T.e.M.p.Tmp
- cscript //NoLogo /e:vbscript %temp%\Website_Visit.vbs
- del /q %temp%\_~TeMp__Temp.T.e.M.p.Tmp
- :Do_Update
- title 发现新版本&cls&echo/&echo/
- :Down_Up_Info
- if exist %temp%\更新历史.txt del /q %temp%\更新历史.txt
- if exist %temp%\UP_Info.vbs del /q %temp%\Up_Info.vbs
- call :Download_VBS_Code Up_Info.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/%%%%E6%%%%9B%%%%B4%%%%E6%%%%96%%%%
-
- B0%%%%E5%%%%8E%%%%86%%%%E5%%%%8F%%%%B2.txt 更新历史.txt
- cscript //NoLogo /e:vbscript %temp%\Up_Info.vbs
- start /wait %temp%\更新历史.txt
- echo/&echo 当前版本: %nowver%
- echo/&echo 最新版本: %newver%
- echo/&echo 发现新版本,是否更新?
- echo/&echo y 开始更新 其他键返回主页
- set /p update=[请输入...]
- if /i "%update%"=="y" (
- title 下载更新&cls&echo/&echo/
- echo 正在下载更新
- echo ...请稍后...
- call :Download_VBS_Code Hosts_Download.vbs %
-
- downloadlink% hosts文件修改器_new.bat
- cscript //NoLogo /e:vbscript %temp%
-
- \Hosts_Download.vbs
- (for /l %%a in (1 1 1) do set /p test=)<%temp%
-
- \hosts文件修改器_new.bat
- set "test=%test:~2%"
- if /i "%test%" neq "" (
- echo 更新不成功
- ping /n 3 127.0.0.1>nul 2>nul
- cls
- goto Menu
- )
- echo @echo off>Hosts_Temp.bat
- echo mode con: cols=70 lines=30 >>Hosts_Temp.bat
- echo title 下载更新^&cls^&echo/^&echo/
-
- >>Hosts_Temp.bat
- echo echo ...正在更新...
-
- >>Hosts_Temp.bat
- echo ping /n 3 127.0.0.1^>nul 2^>nul
-
- >>Hosts_Temp.bat
- echo copy /y %temp%\hosts文件修改器_new.bat Hosts
-
- 文件修改器.bat ^>nul 2^>nul >>Hosts_Temp.bat
- echo if "%%errorlevel%%" neq "0" echo 更新不成功
-
- >>Hosts_Temp.bat
- echo pause >>Hosts_Temp.bat
- echo del /q %%0 >>Hosts_Temp.bat
- echo exit >>Hosts_Temp.bat
- cls
- echo 程序即将退出,并开启另一个窗口,以更新文
-
- 件!
- ping /n 3 127.0.0.1>nul 2>nul
- Hosts_Temp.bat
- exit
- ) else (
- ping /n 3 127.0.0.1>nul 2>nul
- cls&goto Menu
- )
- :Backup_Hosts
- if not exist %windir%\System32\drivers\etc\Hosts_备份 (
- md %windir%\System32\drivers\etc\Hosts_备份
- )
- for /f "tokens=1" %%i in ('echo %date%') do (
- set da=%%i
- set da=!da:/=-!
- echo !da!
- )
- title 备份Hosts文件&cls&echo/&echo/
- echo 正在备份
- echo ...请稍后...
- copy /y %windir%\System32\drivers\etc\hosts %windir%
-
- \System32\drivers\etc\Hosts_备份\!da!_Hosts备份.txt
- cls&echo/&echo/
- echo ...备份完毕...
- ping /n 3 127.0.0.1>nul 2>nul&cls&goto Menu
- echo 按任意键返回主页&pause>nul&cls&goto Menu
- :Restore_Hosts
- title 还原Hosts文件&cls&echo/&echo/
- set backupnum=0
- if exist %temp%\restore_list_temp.txt (
- del /q %temp%\restore_list_temp.txt
- )
- if exist %windir%\System32\drivers\etc\Hosts_备份 (
- dir /b %windir%\System32\drivers\etc\Hosts_备份
-
- >>%temp%\restore_list_temp.txt
- for /f "delims=: tokens=1,2" %%i in
-
- ('findstr /n .* %temp%\restore_list_temp.txt') do (
- set /a backupnum+=1
- echo %%i^) %%j
- )
- )
- echo 有!backupnum!个备份历史
- echo 请问需要备份那个?
- set /p backup=[请输入,下限为1,上限为!backupnum!]
- if "!backup!" gtr "!backupnum!" (
- echo 号码过大!请重新输入...
- ping /n 3 127.0.0.1>nul 2>nul
- goto Restore_Hosts
- )
- if "!backup!" lss "1" (
- echo 号码不能小于1!请重新输入...
- ping /n 3 127.0.0.1>nul 2>nul
- goto Restore_Hosts
- )
- if "!backup!"=="" (
- echo 请重新输入...
- ping /n 3 127.0.0.1>nul 2>nul
- goto Restore_Hosts
- )
- cls
- echo/&echo/
- echo 正在还原
- echo ...请稍后...
- for /f "delims=: tokens=1,2" %%k in ('findstr /n .* %
-
- temp%\restore_list_temp.txt') do (
- if /i "!backup!"=="%%k" (
- copy /y "%windir%\System32
-
- \drivers\etc\Hosts_备份\%%l" %windir%\System32
-
- \drivers\etc\hosts >nul 2>nul
- )
- )
- cls
- echo/&echo/
- echo ...成功还原...
- echo/&echo 按任意键回到主页&pause>nul&goto Menu
- :Report_Hosts_Bug
- title 报告虫虫(Bug)&cls&echo/
- echo/&echo 找到虫虫了(Bug)?快点,去报告吧
-
- !
- echo/&echo 请记得写下你的操作系统Service Pack
-
- 是多少
- echo/&echo 操作系统:!winversion!
- echo/&echo Service Pack !SP:~2,1!
- echo/&echo 打开网页后,滚到最底,点击"Add a
-
- comment",
- echo/&echo 描述虫虫(Bug),写下操作系统和Service
-
- Pack号,
- echo/&echo 按下“发布评论”即可!
- echo/&echo 按任意键打开网页报告虫虫
- pause>nul
- start
-
- http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html
- cls&goto Menu
- :Exit
- title 退出&cls&echo/&echo/
- set /p =程序将在 <nul
- for /l %%a in (3 -1 1) do (
- set /p =%%a秒内退出... <nul&ping -n
-
- 2 127.1 >nul
- )
- exit
- :Download_VBS_Code
- set sfilename=%1
- set downloadlink1=%2
- set tempfilename=%3
- echo on error resume next>%temp%\%1
- echo iLocal=LCase^("%temp%\%3"^) >>%temp%\%1
- echo iRemote=LCase^("%2"^) >>%temp%\%1
- echo Set xPost=createObject^("Microsoft.XMLHTTP"^) 'Set
-
- Post = CreateObject^("Msxml2.XMLHTTP"^) >>%temp%\%1
- echo xPost.Open "GET",iRemote,0 >>%temp%\%1
- echo xPost.Send^(^) >>%temp%\%1
- echo set sGet=createObject^("ADODB.Stream"^) >>%temp%\%1
- echo sGet.Mode=3 >>%temp%\%1
- echo sGet.Type=1 >>%temp%\%1
- echo sGet.Open^(^) >>%temp%\%1
- echo sGet.Write xPost.ResponseBody >>%temp%\%1
- echo sGet.SaveToFile iLocal,2 >>%temp%\%1
- goto :eof
-
复制代码
附件下载链接: https://pan.baidu.com/s/1JrQoL3tsqmCJksx7lYpXxA?pwd=sy5i
注:Windows Vista 以上,并且开了UAC的用户们,请以管理员的身份运行。
作者: sz1121 时间: 2012-7-24 13:51
楼主13岁就很牛了啊![](images/smilies/default/lol.gif)
作者: garyng 时间: 2012-7-24 18:59
回复 2# sz1121
我还看过9岁就学VB的啊
作者: sz1121 时间: 2012-7-24 21:53
回复 3# garyng
你们都是牛人!
作者: garyng 时间: 2012-7-24 23:41
回复 4# sz1121
牛人?不敢当 不敢当 一山还有一山高啊 论坛高手多的很呢 我只是个菜鸟
作者: sz1121 时间: 2012-7-25 15:35
回复 5# garyng
加油!
作者: 咒夜坠 时间: 2012-7-25 17:52
情何以堪![](images/smilies/default/mad.gif)
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |