用批处理修改hosts文件

猫哥
猫哥
猫哥
101
文章
2
评论
2021-11-1210:38:16
评论
903字阅读3分0秒

需要为用户增加一条hosts记录,如何用脚本解决这个问题。
显然,最简单的做法是:

  1. echo 192.168.2.2 www.domainname.com >> %SystemRoot%\system32\drivers\etc\hosts

 

也就是将 192.168.2.2 www.domainname.com 添加到hosts文件结尾处。
这无疑带来一个问题,多次运行这个脚本,会在hosts文件中加入许多无用的垃圾。我们需要加入一个判断,检查一下记录是否已经存在。

  1. @echo off
  2. set stHosts=X.X.X.X www.domainname.com
  3. FOR /F "eol=# tokens=1 delims=" %%i in (%SystemRoot%\system32\drivers\etc\hosts) do if "%stHosts%"=="%%i" exit
  4. echo %stHosts%>> %SystemRoot%\system32\drivers\etc\hosts

set命令比较好理解,定义了一个变量,也就是我们要插入的记录,最后不要留空格。
解释一下这条For命令:
FOR /F "eol=# tokens=1 delims=" %%i in (%SystemRoot%\system32\drivers\etc\hosts) do
For /F 命令会读取hosts文件,将其分成一行行的文字,根据我们指定的规则进行拆分处理,“eol=#” 忽略过#开头的行,“tokens=1”传送每行第一个符号,“delims=”将分隔符集设为空(默认为空格和跳格键),其实是将整行记录返回,并赋值给%%i,然后执行do 后面的命令。

for命令功能十分强大,可以轻易完成许多看似不可能用批处理完成的任务。在命令行下键入 for /? 可以得到完整的帮助说明还有例子。

由此我们可以得到hosts文件中的每条记录,接下来用if来判别一下,看看这条记录是否为我们要添加的记录。如果是的话表示记录已经添加,可以直接退出脚本,什么也不做。 if语句中 == 两边的变量都加了""是为了防止变量为空的情况。

最后一行添加记录到hosts结尾。

继续阅读
猫哥
  • 本文由 发表于 2021-11-1210:38:16
  • 转载请务必保留本文链接:https://www.juejinpai.com/2021/11/1366.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: