如何在批处理文件中获取下一行以显示备用DNS服务器?
获取Windows备用DNS服务器的批处理方案
你的现有代码仅能捕获DNS Servers行的首选DNS,而备用DNS通常在该行的下一行(以缩进形式呈现)。以下是两种可行的批处理方案,用于同时获取首选和备用DNS:
方案一:基于内容匹配的多行捕获
@echo off setlocal enabledelayedexpansion set "dns_count=0" for /f "tokens=* delims=" %%a in ('ipconfig /all ^| findstr /c:"DNS Servers" /c:" "') do ( if "%%a" neq "" ( echo %%a | find "DNS Servers" >nul if !errorlevel! equ 0 ( set /a dns_count+=1 for /f "tokens=2 delims=:" %%b in ("%%a") do set "DNS!dns_count!=%%b" set "DNS!dns_count!=!DNS!dns_count!:~1!" ) else ( set /a dns_count+=1 set "DNS!dns_count!=%%a" set "DNS!dns_count!=!DNS!dns_count!:~1!" ) ) ) echo 首选DNS服务器: %DNS1% echo 备用DNS服务器: %DNS2% endlocal
代码说明
- 启用
enabledelayedexpansion实现循环内变量的动态赋值 - 用
findstr同时匹配DNS Servers行和其下的缩进行(四个空格) - 通过
dns_count计数,分别将首选、备用DNS存入DNS1和DNS2变量 - 自动去除DNS值的前导空格
方案二:基于行标记的定向捕获
@echo off setlocal enabledelayedexpansion set "line_num=0" for /f "tokens=* delims=" %%a in ('ipconfig /all') do ( echo %%a | find "DNS Servers" >nul if !errorlevel! equ 0 ( set /a line_num=1 for /f "tokens=2 delims=:" %%b in ("%%a") do set "DNS1=%%b" set "DNS1=!DNS1:~1!" ) else if !line_num! equ 1 ( set "DNS2=%%a" set "DNS2=!DNS2:~1!" set "line_num=0" ) ) echo 首选DNS: %DNS1% echo 备用DNS: %DNS2% endlocal
代码说明
- 用
line_num作为状态标记:找到DNS Servers行后,标记为1 - 捕获标记状态下的下一行内容,存入
DNS2作为备用DNS - 完成捕获后重置标记,避免后续无关行干扰
内容的提问来源于stack exchange,提问作者Sina Sadeh
相关产品推荐
相关产品推荐

