Удалить строку из файла hosts через BAT скрипт

Я написал скрипт для bat, который добавит строку в файл hosts. Однако я также хочу удалить любые строки, которые уже имеют тот же адрес. Например:

Добавьте строки 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 ответа

Использование 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) во временный файл (внесение всех изменений во временный файл).
  • Замените производственный файл hosts вновь созданным временным файлом.
  • EXIT /B выйдет из сценария без завершения сеанса CMD (при интерактивном запуске - т.е. тестирование / разработка).

Используйте копию вместо 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
Другие вопросы по тегам