| ::61 |
| @echo off&Setlocal enabledelayedexpansion |
| title Hosts文件修改器&color 0A |
| mode con: cols=70 lines=30 |
| chcp 936 |
| :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 |
| ) |
| for /f "usebackq tokens=3*" %%a in (`"reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows" 2>nul"^|findstr /i CSDVersion`) do ( |
| set SP=%%a |
| ) |
| :Welcome_Screen |
| title 主页&echo/&echo/ |
| echo ┌────────┐ |
| echo │Hosts文件修改器 │ |
| echo │ GaryNg │ |
| echo └────────┘ |
| echo/&echo 系统版本:!winversion! |
| echo Service Pack !SP:~2,1! |
| 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"||( |
| 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 |
| :Check_Ext |
| for /f %%z in ("%0") do ( |
| if /i "%%~xz" == ".bat" ( |
| 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 |
| ) else ( |
| 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 |
| ) |
| ) |
| 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 |
| ) |
| 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/ |
| 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 |
| COPY |