batch file创build和删除文本到Windows主机文件与任务调度

目标是利用任务调度程序在指定时间内阻止Facebook以提高生产力并减less分心。 我删除了Facebook七个月。 我不想使用第三方软件。 请帮帮我。 另外如果你有一个更简单的方法或更好的代码,请显示。

这是我的。

我有这个batch file= blockfacebook.bat执行一个特定的时间工作:

echo 0.0.0.0 www.facebook.com >> c:\ windows \ system32 \ drivers \ etc \ hosts

尽pipe下一个batch file= unblockfacebook.bat具有完全清空hosts文件的结果:

键入c:\ windows \ system32 \ drivers \ etc \ hosts | findstr / v facebook> c:\ windows \ system32 \ drivers \ etc \ hosts

任何人都可以告诉我,我做错了unblockfacebook.bat

谢谢,

AEGIS

@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命令的分隔符。 由于行以分隔符开始,所以它们被删除,直到找到一个非分隔符为止,冒号将数字与行内容分开(冒号未用作分隔符,以避免以冒号开头的行出现问题,例如某些ipv6地址)

现在,从开始的数字中删除所有需要做的是删除第一个字符,并追加到输入/输出文件(这是清空)的行。

 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 

当我读到这个时,这就是我想到的解决方案。 虽然更有效或替代方法总是赞赏。 在这里输入图像说明