批处理

如每个人的电脑的HOST文件中都有一条记录 192.168.8.56   oa.***.com的记录,请问如何用批处理的方式将此条记录删除?

 

  1. @echo off

  2. for /f "tokens=*" %%i in ('type "%windir%\system32\drivers\etc\hosts"') do (

  3. for /f "tokens=1,2" %%j in ("%%i") do (

  4. if "%%j" EQU "192.168.8.56" (

  5. if "%%k" NEQ "oa.***.com" echo.%%i >>temp

  6. ) else echo.%%i >>temp

  7. )

  8. )


  9. copy /y temp "%windir%\system32\drivers\etc\hosts"

  10. del /q temp

 

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

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

也就是将 192.168.2.2www.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结尾。

 

你可能感兴趣的:(批处理,记录删除)