返回列表 发帖

[文本处理] [已解决]通过BAT脚本从hosts文件中如何删除IP地址

各位大佬们,可以帮我看看这个脚本删除固定的IP地址,运行完成之后无法生效,使用管理员身份运行了,还是无法生效
@echo off
setlocal enabledelayedexpansion
set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
set "TEMP_FILE=%TEMP%\hosts.tmp"
echo 正在处理hosts文件...
(for /f "tokens=*" %%a in ('type "%HOSTS_FILE%"') do (
    set "line=%%a"
    call :CheckLine "!line!"
)) > "%TEMP_FILE%"
:CheckLine
setlocal
set "LINE_TO_CHECK=%~1"
echo %LINE_TO_CHECK% | findstr /i /c:"172.72.14.216  bj.ucam.cncc.cn" /c:"172.72.14.217  sh.ucam.cncc.cn" /c:"172.72.14.218  bj.coas.cncc.cn" >nul
if errorlevel 1 (
    echo %LINE_TO_CHECK%
) else (
    echo 删除行: %LINE_TO_CHECK%
)
endlocal & goto :eof
echo 正在更新hosts文件...
copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
echo 完成!
pauseCOPY
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# 北极奇熊
检查一下findstr命令的参数/c:后面的字符串是否与hosts中的相应内容完全一致,包括空格数量,看你代码中的字符串是2个空格。
@echo off
cd /d "%SystemRoot%\System32\drivers\etc"
ren "hosts" "hosts.bk" 2>nul
if exist "hosts.bk" (
    findstr /i /v /c:"172.72.14.216 bj.ucam.cncc.cn" /c:"172.72.14.217 sh.ucam.cncc.cn" /c:"172.72.14.218 bj.coas.cncc.cn" host.bk>host
    del host.bk
) else (
    echo,error!!!
)
pauseCOPY

TOP

试试
@echo off
setlocal enabledelayedexpansion
set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
set "TEMP_FILE=%TEMP%\hosts.tmp"
echo 正在处理hosts文件...
(for /f "tokens=*" %%a in ('type "%HOSTS_FILE%"') do (
    set "line=%%a"
    call :CheckLine "!line!"
)) > "%TEMP_FILE%"
echo 正在更新hosts文件...
copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
echo 完成!
pause
exit/b
:CheckLine
setlocal
set "LINE_TO_CHECK=%~1"
echo %LINE_TO_CHECK% | findstr /i /c:"172.72.14.216  bj.ucam.cncc.cn" /c:"172.72.14.217  sh.ucam.cncc.cn" /c:"172.72.14.218  bj.coas.cncc.cn" >nul
if errorlevel 1 (
    echo %LINE_TO_CHECK%
) else (
    echo #删除行: %LINE_TO_CHECK%
)
endlocal & goto :eofCOPY

TOP

本帖最后由 aloha20200628 于 2024-11-18 18:30 编辑

回复 1# 北极奇熊

也许可以简化为如下...
@echo off &setlocal
set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
set "TEMP_FILE=%TEMP%\hosts.tmp"
findstr /v /c:"172.72.14.216 " /c:"172.72.14.217 " /c:"172.72.14.218 " "%HOSTS_FILE%">"%TEMP_FILE%"
move /y "%TEMP_FILE%" "%HOSTS_FILE%" 2>nul
endlocal&pause&exit/bCOPY

TOP

回复 2# qixiaobin0715

你好,这个我运行了,提示无法删除修改,生成了一个其他格式的hosts文件

TOP

回复 3# Five66


    你好,这个无法生成固定行的IP

TOP

回复 5# 北极奇熊
运行后,hosts文件是否符合要求。

TOP

回复 7# qixiaobin0715


没有成功删除内容

TOP

回复 1# 北极奇熊

须用右键管理员身份运行4楼批处代码脚本,已模拟测试通过...

TOP

回复 9# aloha20200628


好的,我再试试

TOP

回复 6# 北极奇熊


    确保ip后面确实是两个空格(就如1楼那样)
@echo off
set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
set "TEMP_FILE=%TEMP%\hosts.tmp"
echo 正在处理hosts文件...
(for /f "tokens=*" %%a in ('type "%HOSTS_FILE%"') do (
    set "line=%%a"
    call :CheckLine
)) > "%TEMP_FILE%"
echo 正在更新hosts文件...
copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
echo 完成!
pause
exit/b
:CheckLine
setlocal enabledelayedexpansion
set "LINE_TO_CHECK=!line!"
if "!LINE_TO_CHECK:~0,1!" == "#" echo:!LINE_TO_CHECK!&endlocal & goto :eof
echo:!LINE_TO_CHECK!| findstr /i /c:"172.72.14.216  bj.ucam.cncc.cn" /c:"172.72.14.217  sh.ucam.cncc.cn" /c:"172.72.14.218  bj.coas.cncc.cn" >nul
if errorlevel 1 (
    echo:!LINE_TO_CHECK!
) else (
echo 删除行: !LINE_TO_CHECK! >con
)
endlocal & goto :eofCOPY
1

评分人数

TOP

回复 11# Five66


    感兴趣,这个可以正常删除行

TOP

@echo off & cd /d "%~dp0" & fltmc >nul || powershell -Command "Start-Process '%~f0' -Verb RunAs" && exit /b
set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
set "TEMP_FILE=%TEMP%\hosts.tmp"
findstr /rvi /c:"172\.72\.14\.216  *bj\.ucam\.cncc\.cn" /c:"172\.72\.14\.217  *sh\.ucam\.cncc\.cn" /c:"172\.72\.14\.218  *bj\.coas\.cncc\.cn" "%HOSTS_FILE%" > "%TEMP_FILE%"
move "%TEMP_FILE%" "%HOSTS_FILE%"
pauseCOPY
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-11-23 12:38 编辑

回复 10# 北极奇熊

   hosts 文件位于系统保护目录,须用管理员权限改写,或用右键管理员身份运行批处提权,或在批处头部添加代码用管理员身份重启提权...
   hosts 中的目标行只须匹配头部地址即可,调用 findstr 反向匹配功能可一步删除目标行...
   本人用右键 ‘管理员身份’ 运行4楼代码脚本删除本机 hosts 文件中的无效行,可顺利通过,想知道楼主试过4楼代码(用右键管理员身份)的结果如何?以便进一步学习改进...

TOP

返回列表