【发布时间】:2019-02-26 23:56:11
【问题描述】:
好的,这就是我到目前为止所得到的。 这意味着在主机文件中添加要阻止的网站,并允许用户在需要时删除条目。有时尝试添加要阻止的网站时,它会创建一个新行,然后将条目放在它之前的行上。这不是我想要的。我希望它创建一个新行,然后在该行上添加条目。出于某种原因,它有时会起作用,而有时它根本不起作用。我收到一条错误消息,指出 Find 参数不正确。我正在使用 Find 命令查看条目是否已在 hosts 文件中。如果是,我希望它避免添加它。如果不是,那么我想添加它。当我尝试删除一个条目时,批处理会崩溃,所以我不确定我在这里做错了什么。我正在尝试找到该条目并将其替换为任何内容。我真正想做的是删除整行,这样我就不会得到很多空行。 任何帮助是极大的赞赏。谢谢!
@echo off
TITLE Modifying your HOSTS file
COLOR F0
:LOOP
cls
SET "CHOICE="
ECHO Choose 1 to block a website
ECHO Choose 2 remove a blocked website
ECHO Choose 3 to exit
SET /P CHOICE= selection %CHOICE%
GOTO %CHOICE%
:1
cls
SET /P WEBSITE=Enter the name of the website to add:
SET HOME= 127.0.0.1
SET NEWLINE=^& echo.
SET BLOCKEDSITE=%HOME% %WEBSITE%
FIND /C /I %BLOCKEDSITE% %WINDIR%\system32\drivers\etc\hosts
IF %ERRORLEVEL% NEQ 0 ECHO %NEWLINE%^%BLOCKEDSITE%>>%WINDIR%\System32\drivers\etc\hosts
ECHO Website blocked
ping 127.0.0.1 -n 5 > nul
GOTO LOOP
:2
cls
SET /P WEBSITE=Enter the name of the website to remove:
SETLOCAL ENABLEEXTENTIONS DISABLEDELAYEDEXPANSION
SET "HOME= 127.0.0.1 "
SET "BLOCKEDSITE=%HOME% %WEBSITE%"
SET "REPLACE="
SET "HOSTSFILE=%WINDIR%\system32\drivers\etc\hosts"
FOR /F "DELIMS=" %%i IN ('TYPE "%HOSTSFILE%" ^& BREAK ^> "%HOSTSFILE%" ')
DO
(
SET "LINE=%%i"
SETLOCAL ENABLEDELAYEDEXPANSION
>>"%HOSTSFILE%" echo(!LINE:%BLOCKEDSITE%=%REPLACE%!
ENDLOCAL
)
ECHO Website unblocked
GOTO LOOP
:3
EXIT
【问题讨论】:
-
那么哪一行会产生错误信息呢?请阅读Debugging batch files 和edit 您的问题。
-
几乎所有文本编辑器中的“查找/替换”功能都可以更简单直接地执行该过程,尤其是那些接受“正则表达式”术语的编辑器。我认为没有理由通过使用批处理文件、允许不受控制的最终用户输入和写入临时文件来使过程更加困难或冗长。
标签: batch-file batch-processing