标题: [文本处理] 通过BAT脚本从hosts文件中如何删除IP地址(已解决) [打印本页]
作者: 北极奇熊 时间: 4 天前 13:07 标题: 通过BAT脚本从hosts文件中如何删除IP地址(已解决)
本帖最后由 北极奇熊 于 2024-11-20 17:13 编辑
各位大佬们,可以帮我看看这个脚本删除固定的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 完成!
- pause
复制代码
作者: qixiaobin0715 时间: 4 天前 15:13
回复 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!!!
- )
- pause
复制代码
作者: Five66 时间: 4 天前 16:32
试试- @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 :eof
复制代码
作者: aloha20200628 时间: 4 天前 18:28
本帖最后由 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/b
复制代码
作者: 北极奇熊 时间: 3 天前 09:04
回复 2# qixiaobin0715
你好,这个我运行了,提示无法删除修改,生成了一个其他格式的hosts文件
作者: 北极奇熊 时间: 3 天前 09:08
回复 3# Five66
你好,这个无法生成固定行的IP
作者: qixiaobin0715 时间: 3 天前 15:38
回复 5# 北极奇熊
运行后,hosts文件是否符合要求。
作者: 北极奇熊 时间: 3 天前 16:51
回复 7# qixiaobin0715
没有成功删除内容
作者: aloha20200628 时间: 3 天前 17:24
回复 1# 北极奇熊
须用右键管理员身份运行4楼批处代码脚本,已模拟测试通过...
作者: 北极奇熊 时间: 3 天前 17:30
回复 9# aloha20200628
好的,我再试试
作者: Five66 时间: 3 天前 17:38
回复 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 :eof
复制代码
作者: 北极奇熊 时间: 前天 17:09
回复 11# Five66
感兴趣,这个可以正常删除行
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |