Board logo

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

作者: 北极奇熊    时间: 5 天前 13:07     标题: [已解决]通过BAT脚本从hosts文件中如何删除IP地址

各位大佬们,可以帮我看看这个脚本删除固定的IP地址,运行完成之后无法生效,使用管理员身份运行了,还是无法生效
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
  4. set "TEMP_FILE=%TEMP%\hosts.tmp"
  5. echo 正在处理hosts文件...
  6. (for /f "tokens=*" %%a in ('type "%HOSTS_FILE%"') do (
  7.     set "line=%%a"
  8.     call :CheckLine "!line!"
  9. )) > "%TEMP_FILE%"
  10. :CheckLine
  11. setlocal
  12. set "LINE_TO_CHECK=%~1"
  13. 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
  14. if errorlevel 1 (
  15.     echo %LINE_TO_CHECK%
  16. ) else (
  17.     echo 删除行: %LINE_TO_CHECK%
  18. )
  19. endlocal & goto :eof
  20. echo 正在更新hosts文件...
  21. copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
  22. echo 完成!
  23. pause
复制代码

作者: qixiaobin0715    时间: 5 天前 15:13

回复 1# 北极奇熊
检查一下findstr命令的参数/c:后面的字符串是否与hosts中的相应内容完全一致,包括空格数量,看你代码中的字符串是2个空格。
  1. @echo off
  2. cd /d "%SystemRoot%\System32\drivers\etc"
  3. ren "hosts" "hosts.bk" 2>nul
  4. if exist "hosts.bk" (
  5.     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
  6.     del host.bk
  7. ) else (
  8.     echo,error!!!
  9. )
  10. pause
复制代码

作者: Five66    时间: 5 天前 16:32

试试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
  4. set "TEMP_FILE=%TEMP%\hosts.tmp"
  5. echo 正在处理hosts文件...
  6. (for /f "tokens=*" %%a in ('type "%HOSTS_FILE%"') do (
  7.     set "line=%%a"
  8.     call :CheckLine "!line!"
  9. )) > "%TEMP_FILE%"
  10. echo 正在更新hosts文件...
  11. copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
  12. echo 完成!
  13. pause
  14. exit/b
  15. :CheckLine
  16. setlocal
  17. set "LINE_TO_CHECK=%~1"
  18. 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
  19. if errorlevel 1 (
  20.     echo %LINE_TO_CHECK%
  21. ) else (
  22.     echo #删除行: %LINE_TO_CHECK%
  23. )
  24. endlocal & goto :eof
复制代码

作者: aloha20200628    时间: 5 天前 18:28

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

回复 1# 北极奇熊

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

作者: 北极奇熊    时间: 4 天前 09:04

回复 2# qixiaobin0715

你好,这个我运行了,提示无法删除修改,生成了一个其他格式的hosts文件
作者: 北极奇熊    时间: 4 天前 09:08

回复 3# Five66


    你好,这个无法生成固定行的IP
作者: qixiaobin0715    时间: 4 天前 15:38

回复 5# 北极奇熊
运行后,hosts文件是否符合要求。
作者: 北极奇熊    时间: 4 天前 16:51

回复 7# qixiaobin0715


没有成功删除内容
作者: aloha20200628    时间: 4 天前 17:24

回复 1# 北极奇熊

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

作者: 北极奇熊    时间: 4 天前 17:30

回复 9# aloha20200628


好的,我再试试
作者: Five66    时间: 4 天前 17:38

回复 6# 北极奇熊


    确保ip后面确实是两个空格(就如1楼那样)
  1. @echo off
  2. set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
  3. set "TEMP_FILE=%TEMP%\hosts.tmp"
  4. echo 正在处理hosts文件...
  5. (for /f "tokens=*" %%a in ('type "%HOSTS_FILE%"') do (
  6.     set "line=%%a"
  7.     call :CheckLine
  8. )) > "%TEMP_FILE%"
  9. echo 正在更新hosts文件...
  10. copy /y "%TEMP_FILE%" "%HOSTS_FILE%" >nul
  11. echo 完成!
  12. pause
  13. exit/b
  14. :CheckLine
  15. setlocal enabledelayedexpansion
  16. set "LINE_TO_CHECK=!line!"
  17. if "!LINE_TO_CHECK:~0,1!" == "#" echo:!LINE_TO_CHECK!&endlocal & goto :eof
  18. 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
  19. if errorlevel 1 (
  20.     echo:!LINE_TO_CHECK!
  21. ) else (
  22. echo 删除行: !LINE_TO_CHECK! >con
  23. )
  24. endlocal & goto :eof
复制代码

作者: 北极奇熊    时间: 3 天前 17:09

回复 11# Five66


    感兴趣,这个可以正常删除行
作者: 77七    时间: 半小时前

  1. @echo off & cd /d "%~dp0" & fltmc >nul || powershell -Command "Start-Process '%~f0' -Verb RunAs" && exit /b
  2. set "HOSTS_FILE=%SystemRoot%\System32\drivers\etc\hosts"
  3. set "TEMP_FILE=%TEMP%\hosts.tmp"
  4. 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%"
  5. move "%TEMP_FILE%" "%HOSTS_FILE%"
  6. pause
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2