通过BAT脚本从hosts文件中删除行

时间:2014-11-14 12:39:03

标签: batch-file scripting hosts

我写了一个bat脚本,它会在主机文件中添加一行。但是,我还想删除任何已经具有相同地址的行。例如:

添加行 192.168.1.1 wwww.google.com

我想检查www.google.com上是否已有一行并将其删除。

有人可以解释一下如何做到这一点吗?

我的.bat附加一行。我需要编辑它以先删除一行,然后添加一行。

@ECHO off
ECHO. >> %WinDir%\System32\drivers\etc\hosts
FINDSTR /V "217.168.173.1" "%WinDir%\system32\drivers\etc\hosts"
ECHO 123.456.7.1   www.google.com >> %WinDir%\system32\drivers\etc\hosts
EXIT

2 个答案:

答案 0 :(得分:0)

使用findstr.exe过滤掉行(/V)。

FINDSTR /V "192.168.1.1" "%HOSTS%"

这将输出%HOSTS%的内容,而不包含任何包含192.168.1.1的行。这不会告诉您要过滤的行是否在文件中,但是会为您提供一个没有该地址的文件。之后,您可以随时将地址添加到文件的末尾(例如ECHO 192.168.1.1 www.google.com >>%HOSTS%),确保它不在那里。

<强>更新

正在进行的工作的修改:

@ECHO off
SETLOCAL
SET "HOSTS=%WinDir%\System32\drivers\etc\hosts"
SET "TEMP_HOSTS=%TEMP%\%RANDOM%__hosts"
FINDSTR /V "217.168.173.1" "%HOSTS%" > "%TEMP_HOSTS%"
ECHO 123.456.7.1   www.google.com >> "%TEMP_HOSTS%"
MOVE /Y "%TEMP_HOSTS%" "%HOSTS%"
EXIT /B

的变化:

  • SETLOCAL可防止env var更改影响调用CMD会话。
  • 将文件的位置保存到变量。
  • 将过滤命令(FINDSTR)的输出保存到临时文件(对临时文件进行所有更改)。
  • 使用新创建的临时文件替换生产主机文件。
  • EXIT /B将退出脚本而不结束您的CMD会话(以交互方式运行 - 即测试/开发)。

答案 1 :(得分:0)

使用复制而不是MOVE来保留访问权限

@ECHO off
SETLOCAL
SET "HOSTS=%WinDir%\System32\drivers\etc\hosts"
SET "TEMP_HOSTS=%TEMP%\%RANDOM%__hosts"
FINDSTR /V "217.168.173.1" "%HOSTS%" > "%TEMP_HOSTS%"
ECHO 123.456.7.1   www.google.com >> "%TEMP_HOSTS%"
COPY /b/v/y "%TEMP_HOSTS%" "%HOSTS%"
EXIT /B