【问题标题】:Remove line from hosts file through BAT script通过 BAT 脚本从 hosts 文件中删除行
【发布时间】:2015-01-11 20:37:02
【问题描述】:

我编写了一个 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

【问题讨论】:

  • 已解决!我设法通过关注this 的回答以及@Rashy 的评论并根据我的要求进行编辑来解决我的问题

标签: batch-file scripting hosts


【解决方案1】:

使用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 会话(以交互方式运行时,即测试/开发)。

【讨论】:

  • 这对我不起作用,因为我想创建一个 .exe 来为我的客户编辑主机文件。附加有效,但我需要删除已经存在的旧重定向。
  • 使用这个方法192.168.1.1行没有被删除,文件中添加了几个空行然后我的新行被添加了。
  • 此方法不会删除 192.168.1.1 行。它在主机文件中添加了几个空行,然后添加了我的新行
  • @L.Young 如果你想制作一个EXE,那么你绝对不应该使用batch/CMD。您使用什么语言来制作可执行文件?
  • 我正在使用 iExpress 构建 .exe。它适用于追加,我需要从文件中删除该行的信息。
【解决方案2】:

使用copy而不是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多