You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在批处理文件中获取下一行以显示备用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:13:22