我正在尝试在Windows批处理文件中选择特定的IP地址。这行代码有效,但获取了错误的IP地址:
for /f "delims=: tokens=2" %%a in ('ipconfig ^| findstr /R /C:"IPv4 Address"') do (set newip=%%a)
如果我在命令行输入,它会得到一行包含我正在寻找的IP地址:
netsh interface IPv4 show addresses "Ethernet 2" | findstr /R /C:"IP Address"
但是,当我尝试将其嵌入到上面的行中以将IP地址转换为变量时,它会抛出错误“'else'不被识别为内部或外部命令,可操作程序或批处理文件。”
for /f "delims=: tokens=2" %%a in ('netsh interface IPv4 show addresses "Ethernet 2" ^| findstr /R /C:"IP Address"') do (set newip=%%a)
有什么想法我做错了吗?
仅供参考,我之所以选择这个,是因为我有一个程序在我的hosts文件中设置一个条目指向我当前的IP,这样我在本地运行的网站就可以使用特定的域名。现有代码的问题是我有两个IPv4地址 - 一个来自VPN,另一个来自我的本地路由器 - 并且该代码选择了错误的IP地址。
非常感谢!
答案 0 :(得分:1)
您的findstr参数错误。您已指定使用正则表达式并使用文字。 RegEx将获胜,因此您正在搜索 IP 或地址。删除/r
。
你的令牌/ delims也是错误的 - 你的变量中有很多空格。这使得冒号和空格成为分隔符。
for /f "tokens=3 delims=: " %a in ('netsh interface IPv4 show addresses "local area connection 7" ^| findstr /C:"IP Address"') do (set newip=%a)
我是如何发现这一点的。我将你的命令解开回单个命令并运行其中的每个命令。一旦我看到输出就很明显了。