使用命令行/批处理的 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 loop
和findstr
到echo
的ipconfig/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.log
,notepad 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 loops
和delims
弄糊涂了,以为是空格分隔的字符(facepalm)。如果有很多,这还将列出所有备用 DNS 服务器,这正是我想要的。为此,需要从DNS-Servers
中删除连字符。不确定是否需要编辑以标记为答案?
ipconfig
的输出取决于语言。在德语中,它是DNS-Server
。使其适应您的实际输出(语言)以上是关于使用命令行/批处理的 Echo DNS 和 Alternative DNS的主要内容,如果未能解决你的问题,请参考以下文章