Я создал этот пакетный скрипт, который позволит пользователю вводить 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)