tldr;
我无法在我的用例中使用上述任何答案,因此我使用以下命令获取我的以太网网络适配器的 IP 地址并按照上述问题中的说明回显它。
在命令行中:
for /f "tokens=3 delims=: " %i in ('netsh interface ip show config name^="Ethernet" ^| findstr "IP Address"') do echo Your IP Address is: %i
或者在批处理文件中:
for /f "tokens=3 delims=: " %%i in ('netsh interface ip show config name^="Wi-Fi" ^| findstr "IP Address" ^| findstr [0-9]') do set IP=%%i
对于那些想知道这一切意味着什么的人,请继续阅读
例如,大多数使用ipconfig 的命令只是打印出您的所有 IP 地址,而我需要一个特定的 IP 地址,在我的情况下是用于我的以太网网络适配器。
您可以使用netsh interface ipv4 show interfaces 命令查看您的网络适配器列表。大多数人需要 Wi-Fi 或以太网。
您会在命令提示符的输出中看到类似的表格:
Idx Met MTU State Name
--- ---------- ---------- ------------ ---------------------------
1 75 4294967295 connected Loopback Pseudo-Interface 1
15 25 1500 connected Ethernet
17 5000 1500 connected vEthernet (Default Switch)
32 15 1500 connected vEthernet (DockerNAT)
在名称列中,您应该找到所需的网络适配器(即以太网、Wi-Fi 等)。
如前所述,我对 Ethernet 感兴趣。
要获取该适配器的 IP,我们可以使用 netsh 命令:
netsh interface ip show config name="Ethernet"
这给了我们这个输出:
Configuration for interface "Ethernet"
DHCP enabled: Yes
IP Address: 169.252.27.59
Subnet Prefix: 169.252.0.0/16 (mask 255.255.0.0)
InterfaceMetric: 25
DNS servers configured through DHCP: None
Register with which suffix: Primary only
WINS servers configured through DHCP: None
(出于安全原因,我伪造了上面的实际 IP 号码?)
我可以在 ms-dos 命令提示符中使用findstr 命令进一步指定我想要的行。
这里我想要包含字符串IP Address的行。
netsh interface ip show config name="Ethernet" | findstr "IP Address"
这给出了以下输出:
IP Address: 169.252.27.59
然后我可以使用for 命令解析文件(或在本例中为多行字符串)并根据分隔符和我感兴趣的项目编号拆分字符串的内容。
请注意,我正在寻找第三项 (tokens=3),并且我使用空格字符和 : 作为分隔符 (delims=: )。
for /f "tokens=3 delims=: " %i in ('netsh interface ip show config name^="Ethernet" ^| findstr "IP Address"') do echo Your IP Address is: %i
循环中的每个值或标记都作为变量 %i 打印出来,但我只对第三个“标记”或项目感兴趣(因此 tokens=3)。请注意,我必须使用 ^ 转义 | 和 =
在for 命令的末尾,您可以指定一个命令来运行返回的内容。在这种情况下,我使用 echo 将其与其他文本一起打印出来,但您也可以使用 do set IP=%i 或任何您喜欢的方式将值分配给环境变量。
很整洁吧?
如果您有任何改进的想法,请发表评论。我很想听听 :) 或者你可以直接编辑。