[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]通过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
复制代码
1

评分人数

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

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

回复 10# 北极奇熊

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

TOP

  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
复制代码
bat小白,请多指教!谢谢!

TOP

回复 11# Five66


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

TOP

回复 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
复制代码
1

评分人数

TOP

回复 9# aloha20200628


好的,我再试试

TOP

回复 1# 北极奇熊

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

TOP

回复 7# qixiaobin0715


没有成功删除内容

TOP

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

TOP

回复 3# Five66


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

TOP

回复 2# qixiaobin0715

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

TOP

本帖最后由 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
复制代码

TOP

试试
  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
复制代码

TOP

回复 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
复制代码

TOP

返回列表