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

[问题求助] 求助 使用vbs删除host文件域址内容

本帖最后由 a000001 于 2015-9-21 11:06 编辑
  1. '该脚本要求执行用户有本地管理员权限
  2. Const ForReading = 1, ForWriting = 2, ForAppending = 8, ReadOnly = 1
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. Set WshShell=CreateObject("WScript.Shell")
  5. 'WinDir 为windows安装目录
  6. WinDir =WshShell.ExpandEnvironmentStrings("%WinDir%")
  7. '设定host 文件目录
  8. HostsFile = WinDir & "\System32\Drivers\etc\Hosts"
  9. '检查host文件是否为只读,如为只读,则修改文件属性
  10. Set objFSO = CreateObject("Scripting.FileSystemObject")
  11. Set objFile = objFSO.GetFile(HostsFile)
  12. If objFile.Attributes And ReadOnly Then
  13.   objFile.Attributes = objFile.Attributes Xor ReadOnly
  14. End If
  15. Set objFSO = CreateObject("Scripting.FileSystemObject")
  16. Set objFile = objFSO.OpenTextFile(HostsFile, ForReading,true)
  17. '检查host文件里面是否已经更改过了,如果更改过,则不再执行脚本
  18. hostfileline=""
  19. Do Until objFile.AtEndOfStream
  20. strline = objfile.ReadLine
  21. If InStr (strline, "202.102.101.105") <> 0 Or (InStr (strline, "202.102.101.107"))<>0 Or (InStr (strline, "202.102.101.108"))   Then
  22.    strline=""
  23. End If
  24.    hostfileline=hostfileline+vbCrLf+strline
  25. Loop
  26. WScript.Echo hostfileline
  27. objFile.Close
  28. '修改host文件
  29. Set filetxt = fso.OpenTextFile(HostsFile, ForWriting )
  30. filetxt.Write hostfileline
  31. filetxt.Close
  32. WScript.Quit
复制代码
原先host里面已增加以下3行

202.102.101.105 intranet.corp
202.102.101.107 mail.intranet.corp
202.102.101.108 sip.intranet.corp

之后不需要此3行内容,所以运行以上vbs代码,来删除host文件此3行

但是此vbs代码有些问题:

1.添加需删除的网域只能在同一行;
   例如: If InStr (strline, "202.102.101.105") <> 0 Or (InStr (strline, "202.102.101.107".....
   如果写成两行则vbs运行错误  
   vbs代码如何换下一行,才会运行成功?

2.此vbs代码运行时,会有提示画面,
   如何改写代码,让它无提示画面?

3.此vbs代码运行后,开启hosts,
   会发现hosts的最顶端会多出一个空白行,最尾端则多出许多空白行
   此问题该如何解决?

pcl_test 发表于 2015-9-17 11:15


如果要删除以下各种不同域址,代码该如何改写?


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

TOP

回复  a000001

这样的事当然用批处理
pcl_test 发表于 2015-9-17 13:09


vbs没法子办到吗? 因为不希望有黑视窗闪现,所以才考虑用vbs....

TOP

本帖最后由 a000001 于 2015-9-18 12:31 编辑
回复  a000001
pcl_test 发表于 2015-9-17 21:08


版主 真是高人~~
vbs真的可以运行

昨日发现一个使用上的问题,情形如下:

原本hosts内容:
203.208.39.104 lh1.ggpht.com
127.0.0.1 wy.xunlei.com
203.208.25.104 netkuu.ku6.com
203.28.42.104 netkuu.letv.com

添加之后的hosts内容:

203.208.39.104 lh1.ggpht.com
127.0.0.1 wy.xunlei.com       ----------------->此域名重复-->(1)
203.208.25.104 netkuu.ku6.com
203.28.42.104 netkuu.letv.com
#新域名
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 wy.xunlei.com        ----------------->此域名重复-->(2)



可以发现127.0.0.1 wy.xunlei.com此域名重复2次,

此时运行版主提供的vbs或bat,

其结果都是将重复的域名全部删除.

对于重复的域名如何能够只删除一次,其他剩余重复的域名全保留?

是否可以做到只删除新增的域名(2),其他旧的重复域名全保留?

TOP

回复  a000001


    嗯,你添加新的域名时先检测是否已存在,是就不添加;或者,两个都保留,不删就是
pcl_test 发表于 2015-9-18 12:40


对于 添加多个新的域名先检测:

一次添加多个新的域名时先检测是否已存在,是就不添加 -->  批处理(.bat) 有办法做到吗?



另外删除域名方面:

对于多个要删除的域名, 是否有办法先检测出重复的域名,只删除其中一个;

其他要删除的域名如果没有检测出重复的域名,则直接删除

-->  vbs 或 批处理(.bat) 有办法做到吗?

TOP

回复  a000001

嗯,可以,别问我怎么做到
pcl_test 发表于 2015-9-18 15:18


真是抱歉 让您费心写代码

对于 批处理(.bat) 添加多个新的域名先检测
我另发个新帖 批处理(.bat) 添加多个新的域名到hosts需先检测

http://www.bathome.net/thread-37372-1-1.html


另外上面给的批处理,会在%tmp%之内残留一个$档

可以批处理在运行完时,自动删除$档?
  1. @echo off
  2. >"%tmp%\$" more +7 %0
  3. set "fd=%windir%\System32\Drivers\etc"
  4. attrib -r "%fd%\hosts"
  5. findstr /v /g:"%tmp%\$" "%fd%\hosts">"%fd%\$"
  6. move "%fd%\$" "%fd%\hosts"
  7. pause&exit
  8. 127.0.0.1 mcfg.sandai.net
  9. 127.0.0.1 211.94.190.80...
复制代码

TOP

回复  a000001

del /q "%tmp%\$"
pause&exit
pcl_test 发表于 2015-9-18 23:36



使用vbs或bat 对于多个要删除的域名, 是否有办法先检测出重复的域名,只删除其中一个;

其他要删除的域名如果没有检测出重复的域名,则直接删除

--> 跪求vbs 和 批处理(.bat) 代码 ~~

TOP

本帖最后由 a000001 于 2015-9-19 08:39 编辑

传讯说已解决 一直传讯说已解决 真的已解决?  

很感激他人耗费心思来协助

但目前的代码运行下去 对于旧有的重复域名 会造成误删

求大神们帮忙了

TOP

返回列表