Я создал этот пакетный скрипт, который позволит пользователю вводить URL-адрес веб-сайта, а также время в минутах, затем он добавляет URL-адрес в файл hosts и удаляет его по истечении времени. (Эффективная блокировка веб-сайта на определенное время)
Он удаляет веб-сайт из файла hosts, создавая другой пакетный файл при его первом запуске, а затем использует команду AT для запуска нового пакетного файла в указанное время. Он работает при блокировке нескольких веб-сайтов, единственная проблема заключается в том, что если несколько веб-сайтов настроены на одновременную разблокировку, процесс разблокировки каждого нового командного файла, который был создан, кажется конфликтующим. Как вы увидите, я попытался исправить это, отложив запуск командного файла до завершения другого. К сожалению, в большинстве случаев это не работает. Иногда, если время удачно, оба командных файла будут выполняться, не мешая друг другу. Вот код, извините за мои ужасные методы кодирования, может показаться трудным для понимания:
@echo off
TITLE Site Blocker
SET name=%random%
SET /P url=Enter website (e.g. www.facebook.com)-
SET /P mins=How many minutes do you want to block it for?:
GOTO :SET
:BACK
AT %hh%:%mm% C:\Users\%username%\downloads\%name%.bat
echo. >> C:\WINDOWS\System32\drivers\etc\hosts
echo 127.0.0.1 %url% >> C:\WINDOWS\System32\drivers\etc\hosts
echo :TOP >> C:\Users\%username%\downloads\%name%.bat
echo IF EXIST C:\Users\Downloads\temp1.txt GOTO :WAIT >> C:\Users\%username%\downloads\%name%.bat
echo echo DONT DELETE ^>^> C:\Users\Downloads\temp1.txt >> C:\Users\%username%\downloads\%name%.bat
echo find /v "%url%" ^< C:\WINDOWS\System32\drivers\etc\hosts ^> C:\Users\%username%\desktop\temp.txt >> C:\Users\%username%\downloads\%name%.bat
echo del C:\WINDOWS\System32\drivers\etc\hosts /Q >> C:\Users\%username%\downloads\%name%.bat
echo ren C:\Users\%username%\desktop\temp.txt hosts >> C:\Users\%username%\downloads\%name%.bat
echo copy C:\Users\%username%\desktop\hosts C:\WINDOWS\System32\drivers\etc\ >> C:\Users\%username%\downloads\%name%.bat
echo del C:\Users\%username%\desktop\hosts /Q >> C:\Users\%username%\downloads\%name%.bat
echo msg * %url% unblocked >> C:\Users\%username%\downloads\%name%.bat
echo del C:\Users\Downloads\temp1.txt /Q >> C:\Users\%username%\downloads\%name%.bat
echo del C:\users\%username%\downloads\%name%.bat /Q >> C:\Users\%username%\downloads\%name%.bat
echo exit >> C:\Users\%username%\downloads\%name%.bat
echo :WAIT >> C:\Users\%username%\downloads\%name%.bat
echo timeout 3 >> C:\Users\%username%\downloads\%name%.bat
echo GOTO :TOP >> C:\Users\%username%\downloads\%name%.bat
exit
:SET
set /a mm=%time:~3,2%
set /a hh=%time:~0,2%
if %mm% gtr 60 GOTO :CHECK
set /a mm=%mm%+%mins%
:DONE
if %mm% gtr 60 GOTO :CHECK
if %mm%==60 set /a hh=%hh%+1 & set /a mm=00
GOTO :BACK
exit
:CHECK
if %mm% gtr 60 set /a hh=%hh%+1
if %mm% gtr 60 set /a mm=%mm%-60 & GOTO :DONE
GOTO :DONE
(Для работы программа должна запускаться от имени администратора. Поэтому я компилирую ее в .exe и добавляю манифест администратора. Компиляция в .exe не является проблемой, поскольку у меня такая же проблема при запуске пакета или скомпилированного .exe)