【发布时间】: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。
标签: loops for-loop batch-file cmd ipconfig