如何解决无法将内容流式传输到文件
我编写了执行以下操作的代码:
- 检查YouTube单词是否在计算机的主机文件中
- 如果没有,请在文件中插入YouTube一词
- 如果存在-从文件中删除YouTube一词。并运行一个计时器来返回YouTube一词 完成每个步骤后-停止Chrome.exe任务 由于某些原因,它不起作用。
@echo off
setlocal EnableDelayedExpansion
(reg query "HKU\S-1-5-19" || (powershell start-process -FilePath '%0' -verb runas&exit /B)) >NUL 2>&1
:start
FIND /i "www.youtube.com" "%WINDIR%\System32\Drivers\Etc\Hosts" >nul 2>&1
if errorlevel 1 (
echo.
echo 127.0.0.1 www.youtube.com >> %WINDIR%\System32\Drivers\Etc\Hosts
Taskkill /F /IM chrome.exe
) ELSE (
set /p "OPEN_TIME=Enter time: "
echo.
echo # copyright (c) 1993-2009 Microsoft Corp.> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # This file contains the mappings of IP addresses to host names. Each>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # entry should be kept on an individual line. The IP address should>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # be placed in the first column followed by the corresponding host name.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # The IP address and the host name should be separated by at least one>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # space.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # Additionally,comments (such as these) may be inserted on individual>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # lines or following the machine name denoted by a '#' symbol.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # For example:>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # 102.54.94.97 rhino.acme.com # source server>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # 38.25.63.10 x.acme.com # x client host>> %WINDIR%\System32\Drivers\Etc\Hosts
echo: >> %WINDIR%\System32\Drivers\Etc\Hosts
echo # localhost name resolution is handled within DNS itself.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # 127.0.0.1 localhost>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # ::1 localhost>> %WINDIR%\System32\Drivers\Etc\Hosts
echo 127.0.0.1 view-localhost # view localhost server>> %WINDIR%\System32\Drivers\Etc\Hosts
Taskkill /F /IM chrome.exe
timeout /T !OPEN_TIME!
GOTO start
)
@echo off
setlocal EnableDelayedExpansion
(reg query "HKU\S-1-5-19" || (powershell start-process -FilePath '%0' -verb runas&exit /B)) >NUL 2>&1
:start
FIND /i "www.youtube.com" "%WINDIR%\System32\Drivers\Etc\Hosts" >nul 2>&1
if errorlevel 1 (
echo.
echo 127.0.0.1 www.youtube.com >> %WINDIR%\System32\Drivers\Etc\Hosts
Taskkill /F /IM chrome.exe
)
有人知道为什么吗?
解决方法
使这些行可写的E-Z方法只是在IF的外部括号之外。
这很容易通过将IF的全部内部混入一个调用函数中来完成,这也使测试变得相当简单,并且代码可能更易于遵循。
我想指出的是,由于您要用自己的文件内容替换文件内容,因此您永远无法确保自己不会覆盖自己或其他程序添加的任何其他条目(例如,反恶意软件已知为放很多!)
您可以通过以下方式进行调整:写入主机的副本,其中包含所有您要删除的行(除了要删除的主机),并添加其他行,然后在此过程中移动它以替换普通主机文件。
不过,现在就让我们拿走您的代码并使它更易于处理。
此外,我想您想每30分钟循环一次,而不管是否找到该项目,不是吗?您似乎在说代码应始终循环。因此,我将其移动了。
请确保您正在通过命令行运行此表单以对其进行测试,而不是双击它。
此外,请确保命令提示符正在以管理员身份运行,因为如果没有,则可能无法对hosts文件进行更改。
@(setlocal EnableDelayedExpansion
echo off
(reg query "HKU\S-1-5-19" || (powershell start-process -FilePath '%0' -verb runas&exit /B)) >NUL 2>&1
SET "Write-Hosts=CALL :Write_Hosts "
SET "_HostsFilePath=%WINDIR%\System32\Drivers\Etc\Hosts"
)
CALL :Main
( ENDLOCAL
Exit /b
)
:Main
FIND /i "www.youtube.com" "%_HostsFilePath%" >nul 2>&1
if errorlevel 1 (
CALL :Missing
) ELSE (
CALL :Found
)
Taskkill /F /IM chrome.exe
FOR /F "Tokens=2-3 delims=:." %%A IN ("%TIME%") DO (SET /A "Timer=(30-((1%%A-(2%%A-1%%A))%%30))*60 - (1%%B-(2%%B-1%%B))")
Echo.Waiting %OPEN_TIME% Seconds before Running again.
timeout /T %OPEN_TIME%
GOTO :Main
GOTO :EOF
:Missing
echo. Adding 127.0.0.1 www.youtube.com
%Write-Hosts%127.0.0.1 www.youtube.com
GOTO :EOF
:Found
REM set /p "OPEN_TIME=Enter time: "
REM echo.
echo. Resetting Hosts
SET "Output=>"
%Write-Hosts%# Copyright (c) 1993-2009 Microsoft Corp.
%Write-Hosts%#
%Write-Hosts%# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
%Write-Hosts%#
%Write-Hosts%# This file contains the mappings of IP addresses to host names. Each
%Write-Hosts%# entry should be kept on an individual line. The IP address should
%Write-Hosts%# be placed in the first column followed by the corresponding host name.
%Write-Hosts%# The IP address and the host name should be separated by at least one
%Write-Hosts%# space.
%Write-Hosts%#
%Write-Hosts%# Additionally,comments (such as these) may be inserted on individual
%Write-Hosts%# lines or following the machine name denoted by a '#' symbol.
%Write-Hosts%#
%Write-Hosts%# For example:
%Write-Hosts%#
%Write-Hosts%# 102.54.94.97 rhino.acme.com # source server
%Write-Hosts%# 38.25.63.10 x.acme.com # x client host
%Write-Hosts%# localhost name resolution is handled within DNS itself.
%Write-Hosts%# 127.0.0.1 localhost
%Write-Hosts%# ::1 localhost
%Write-Hosts% 127.0.0.1 view-localhost # view localhost server
GOTO :EOF
:Write_Hosts
ECHO.%*
ECHO.%*%Output% "%_HostsFilePath%"
SET "Output=>>"
GOTO :EOF
,
这是代码的固定版本:
请注意,我更改了Copyright (c^)
和comments (such as these^)
@echo off
setlocal EnableDelayedExpansion
(reg query "HKU\S-1-5-19" || (powershell start-process -FilePath '%0' -verb runas&exit /B)) >NUL 2>&1
:start
FIND /i "www.youtube.com" "%WINDIR%\System32\Drivers\Etc\Hosts" >nul 2>&1
if errorlevel 1 (
echo.
echo 127.0.0.1 www.youtube.com >> %WINDIR%\System32\Drivers\Etc\Hosts
Taskkill /F /IM chrome.exe
) ELSE (
set /p "OPEN_TIME=Enter time: "
echo.
echo # Copyright (c^) 1993-2009 Microsoft Corp.> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # This file contains the mappings of IP addresses to host names. Each>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # entry should be kept on an individual line. The IP address should>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # be placed in the first column followed by the corresponding host name.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # The IP address and the host name should be separated by at least one>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # space.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # Additionally,comments (such as these^) may be inserted on individual>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # lines or following the machine name denoted by a '#' symbol.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # For example:>> %WINDIR%\System32\Drivers\Etc\Hosts
echo #>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # 102.54.94.97 rhino.acme.com # source server>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # 38.25.63.10 x.acme.com # x client host>> %WINDIR%\System32\Drivers\Etc\Hosts
echo: >> %WINDIR%\System32\Drivers\Etc\Hosts
echo # localhost name resolution is handled within DNS itself.>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # 127.0.0.1 localhost>> %WINDIR%\System32\Drivers\Etc\Hosts
echo # ::1 localhost>> %WINDIR%\System32\Drivers\Etc\Hosts
echo 127.0.0.1 view-localhost # view localhost server>> %WINDIR%\System32\Drivers\Etc\Hosts
Taskkill /F /IM chrome.exe
timeout /T !OPEN_TIME!
GOTO start
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。