使用命令行/批处理的 Echo DNS 和 Alternative DNS

Posted

技术标签:

【中文标题】使用命令行/批处理的 Echo DNS 和 Alternative DNS【英文标题】:Echo DNS and Alternative DNS using command line/ batch 【发布时间】:2020-10-01 06:09:06 【问题描述】:

我一直在使用for loopfindstrechoipconfig/all 的特定行。例如

for /f "tokens=*" %a in ('ipconfig/all ^| findstr "#DNS Servers"') do (echo %a) [在批处理文件中使用双百分号]

这将回显DNS Servers line,但如何获取ipconfig/all 下方的备用地址 findstr 的那一行中没有任何内容可以帮助隔离它。有没有办法做到这一点?

这里是相关的 ipconfig/all 输出。我在找YYYY

Windows IP Configuration

   Host Name . . . . . . . . . . . . : XXXX
   Primary Dns Suffix  . . . . . . . : XXXX
   Node Type . . . . . . . . . . . . : XXXX
   IP Routing Enabled. . . . . . . . : XXXX
   WINS Proxy Enabled. . . . . . . . : XXXX
   DNS Suffix Search List. . . . . . : XXXX

Ethernet adapter Ethernet 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Intel Adapter #2
   Physical Address. . . . . . . . . : XXXX
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Intel 
   Physical Address. . . . . . . . . : XXXX
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : XXXX(Preferred)
   IPv4 Address. . . . . . . . . . . : XXXX(Preferred)
   Subnet Mask . . . . . . . . . . . : XXXX
   Default Gateway . . . . . . . . . : XXXX
   DHCPv6 IAID . . . . . . . . . . . : XXXX
   DHCPv6 Client DUID. . . . . . . . : XXXX
   DNS Servers . . . . . . . . . . . : XXXX
                                       YYYY  
   NetBios over Tcpip. . . . . . . . : Enabled

我想批量尝试这个​​,因为它是在另一个批处理程序结束时使用的。

【问题讨论】:

这可能是使用更具体的findstr 字符串的简单案例。您如何提供IPConfig /All的输出,与输出完全相同,(使用ipconfig /all > output.log可能更简单,然后在记事本中打开output.lognotepad output.log,选择其内容,CTRL-A,复制它,CTRL-C,并将其粘贴到您的问题中,CTRL-V,将其格式化为代码,以保持其结构等). reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -v *NameServer 显然你的问题代码不正确!没有包含字符串#DNS Servers 的行,因此不会返回任何行为%a ipconfig/all 是一个无效的参数字符串,但是因为cmd.exe 对像您这样的用户很友好并且可以使用多种方法来找出要运行的可执行文件或脚本,并且偶然发现真正的@987654341 @(参数 0 具有完整的限定文件名(驱动器 + 路径 + 名称 + 扩展名),而不仅仅是文件名)并使用参数 /all(参数 1)运行它。可执行文件或脚本的命令或文件名(参数 0)与其参数(参数 1 ... n)之间应始终有一个空格。 搜索字符串"#DNS Servers"肯定是错误的。 FINDSTR 将空格字符解释为 OR 在仅使用 "..." 指定搜索字符串时。所以findstr "#DNS Servers" 搜索区分大小写 以查找包含#DNS Servers 的行。它输出DNS Servers . . . . . . . . . . . : XXXX 行,因为它包含单词Servers。您必须使用%SystemRoot%\System32\findstr.exe /C:"DNS Servers" 来搜索包含区分大小写 literal 字符串DNS Servers 的行。我建议在findstr.exe 之后插入参数/I/L 【参考方案1】:

在你的情况下这非常容易:

ipconfig /all |findstr /bc:"   DNS-Server" /c:"       "

注意:如果您有多个网络适配器,您将获得所有的 DNS-Server(s)(IPv4 和 IPv6),没有任何提示,属于哪个。

注意:ipconfig 的输出取决于语言。您可能必须使字符串 DNS-Server 适应您的实际输出。

如果您只想要“替代”DNS 服务器:

ipconfig /all |findstr /bc:"       "

There nothing in that line to findstr to help isolate it.:是的,有。它是唯一以三个以上空格开头的行。findstr /b 匹配模式,如果在 b一行的开头)

【讨论】:

我没有意识到你可以搜索空格。我被for loopsdelims 弄糊涂了,以为是空格分隔的字符(facepalm)。如果有很多,这还将列出所有备用 DNS 服务器,这正是我想要的。为此,需要从DNS-Servers 中删除连字符。不确定是否需要编辑以标记为答案? ipconfig 的输出取决于语言。在德语中,它是DNS-Server。使其适应您的实际输出(语言)

以上是关于使用命令行/批处理的 Echo DNS 和 Alternative DNS的主要内容,如果未能解决你的问题,请参考以下文章

DNS域名解析命令 ping

Linux命令行非法字符处理

怎样用ECHO命令

Windows关于批处理设置DNS的时候速度慢的情况

dig命令详解

echo