I have made this batch script which will allow the user to enter a website's URL as well as a time in minutes, it then adds the URL to the hosts file and removes it once the time expires. (Effectively blocking a website for a certain amount of time)
It removes the website from the hosts file by creating another batch file when it is first run, and then uses the AT command to launch the new batch file at the specified time. It works when blocking multiple websites, the only problem is if more then one website is set to become unblocked at the same time, the unblocking process of each new batch file which was created seems to conflict. As you will see, I have attempted to fix this by delaying a batch file from running until the other has completed. Unfortunately it does not work most of the time. Sometimes if the timing is lucky then both batch files will execute without interfering with one another. Here's the code, sorry for my terrible coding techniques, it may seem hard to understand:
@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 (The program must be run as administrator to work. I therefore compile it to .exe and add an administrator manifest. Compiling to .exe is not the problem though as I have the same problem when running the batch or the compiled .exe)