如每个人的电脑的HOST文件中都有一条记录 192.168.8.56 oa.***.com的记录,请问如何用批处理的方式将此条记录删除?
@echo off
for /f "tokens=*" %%i in ('type "%windir%\system32\drivers\etc\hosts"') do (
for /f "tokens=1,2" %%j in ("%%i") do (
if "%%j" EQU "192.168.8.56" (
if "%%k" NEQ "oa.***.com" echo.%%i >>temp
) else echo.%%i >>temp
)
)
copy /y temp "%windir%\system32\drivers\etc\hosts"
del /q temp
需要为用户增加一条hosts记录,如何用脚本解决这个问题。
显然,最简单的做法是:
echo 192.168.2.2 www.domainname.com >> %SystemRoot%\system32\drivers\etc\hosts
也就是将 192.168.2.2www.domainname.com添加到hosts文件结尾处。
这无疑带来一个问题,多次运行这个脚本,会在hosts文件中加入许多无用的垃圾。我们需要加入一个判断,检查一下记录是否已经存在。
@echo off
set stHosts=X.X.X.X www.domainname.com
FOR /F "eol=# tokens=1 delims=" %%i in (%SystemRoot%\system32\drivers\etc\hosts) do if "%stHosts%"=="%%i" exit
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结尾。