我编写了一个批处理脚本,允许用户输入网站的URL和时间(以分钟为单位),然后将该URL添加到hosts文件中,并在时间到期后将其删除。(有效阻止网站一段时间)
当它首次运行时,它通过创建另一个批处理文件来从hosts文件中删除该网站,并使用AT命令在指定时间启动新的批处理文件。它可以用于阻止多个网站,唯一的问题是如果有多个网站同时解锁,那么每个新创建的批处理文件的解锁过程似乎会发生冲突。如您所见,我尝试通过延迟批处理文件的运行来解决此问题,直到其他批处理文件完成。不幸的是,它大多数时候都不起作用。有时如果时间很合适,两个批处理文件都会在没有相互干扰的情况下执行。以下是代码,请原谅我的可怕编码技术,可能难以理解:
当它首次运行时,它通过创建另一个批处理文件来从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文件时仍有相同的问题。