пакетные файлы для создания и удаления текста в файл хостов Windows с планировщиком задач

Цель состоит в том, чтобы использовать планировщик задач, чтобы блокировать Facebook в назначенное время, чтобы повысить производительность и уменьшить отвлекающие факторы. Я удалил facebook на семь месяцев. Я не хочу использовать стороннее программное обеспечение. Пожалуйста помогите. Также, если у вас есть более простой метод или лучший код, пожалуйста, покажите.

Вот что у меня есть.

У меня есть этот командный файл = blockfacebook.bat, который выполняется в определенное время, и это работает:

эхо 0.0.0.0 www.facebook.com >> c:\windows\system32\drivers\etc\hosts

Хотя следующий пакетный файл = unblockfacebook.bat приводит к полной очистке файла hosts:

введите c:\windows\system32\drivers\etc\hosts | findstr /v facebook > c:\windows\system32\drivers\etc\hosts

Может ли кто-нибудь сказать мне, что я делаю неправильно с unblockfacebook.bat

Спасибо,

ЭГИС


person AEGIS    schedule 04.06.2014    source источник


Ответы (2)


@echo off
    setlocal enableextensions disabledelayedexpansion

    set "file=c:\windows\system32\drivers\etc\hosts"

    for /f "tokens=* delims=0123456789" %%a in (
        'findstr /n /i /v /c:"facebook" "%file%" ^& type nul ^> "%file%"'
    ) do (
        set "line=%%a"
        setlocal enabledelayedexpansion
        >>"%file%" echo(!line:~1!
        endlocal
    )

    endlocal

Этот код использует findstr для фильтрации входных строк и нумерации вывода (нумерация строк гарантирует, что пустые строки во входном файле также считываются, обрабатываются и записываются в выходной файл), а также удаляет содержимое входного файла. Поскольку for /f закэшировал вывод findstr в памяти, а findstr завершил обработку данных, сделать это не проблема.

Затем for начинает обрабатывать ввод (выход findstr). Это список пронумерованных строк. Чтобы удалить числа, они используются в качестве разделителей в команде for. Поскольку строки начинаются с разделителей, они удаляются до тех пор, пока не будет найден символ, не являющийся разделителем, двоеточие, которое отделяет числа от содержимого строки (двоеточие не используется в качестве разделителя, чтобы избежать проблем со строками, начинающимися с двоеточия, например, для некоторых адресов ipv6. )

Теперь, когда числа удалены из начала, все, что нужно сделать, это удалить первый символ и добавить строки в файл ввода/вывода (который был очищен).

person MC ND    schedule 05.06.2014

type c:\windows\system32\drivers\etc\hosts | findstr /v facebook > c:\users\aegis\desktop\grr.txt
type c:\users\aegis\desktop\grr.txt > c:\windows\system32\drivers\etc\hosts 

Это решение, которое я понял, когда прочитал это. Хотя всегда приветствуются более эффективные или альтернативные методы. введите здесь описание изображения

person AEGIS    schedule 05.06.2014
comment
Быстрее переместить временный файл на исходное имя: move /y c:\users\aegis\desktop\grr.txt c:\windows\system32\drivers\etc\hosts >nul - person dbenham; 23.10.2014
comment
Кроме того, вам, вероятно, следует добавить параметр /x, чтобы обеспечить точное совпадение. - person dbenham; 23.10.2014