有没有一种简单的方法可以从我的服务提供商那里获取 IP 地址并通过命令提示符将其放入变量中?类似于以下内容:
SET hostIP = nslookup \address
ECHO %hostIP%
或者
SET hostIP = ipconfig \address
ECHO %hostIP%
有没有一种简单的方法可以从我的服务提供商那里获取 IP 地址并通过命令提示符将其放入变量中?类似于以下内容:
SET hostIP = nslookup \address
ECHO %hostIP%
或者
SET hostIP = ipconfig \address
ECHO %hostIP%
for /f "skip=1 tokens=2 delims=: " %f in ('nslookup %COMPUTERNAME% ^| find /i "Address"') do echo %f
Arun 的回答很好,但我发现当给定主机分配/关联多个 IP 时,使用 NSLOOKUP 会在主机名后生成一个恶意逗号。
但是,我确实找到了另一种从给定主机名解析(第一个分配的)IP 并且不生成恶意逗号的方法 - 它使用 PING。非常快,非常可靠。
for /f "tokens=2 delims=[]" %f in ('ping -4 -n 1 %COMPUTERNAME% ^| find /i "pinging"') do echo IP=%f
它将主机名的简单 IPv4 地址生成到变量 IP 中。如果您随后执行 ECHO %IP% ,它将显示 IP,例如: IP=192.168.1.2
当然,在批处理脚本中,您需要将单个 %f 替换为 %%f。请注意管道 ("|") 符号前面的克拉 ("^"),它在批处理脚本中是必需的,因此它们不会解释管道,而是将 ping 语句的结果通过管道传输到 find 语句。
如果您可以使用 bash(如在 cygwin 中),则可以使用反引号轻松在 SET hostIP 行中执行您想要的任何内容。
如在
export hostIP = `curl 'http://whatsmyip.net' | grep '<title' | awk '{print $8}' | sed -e 's:<.*::g'`
尝试这样的批处理来设置环境变量:
ipconfig > ipconfig.out
setx IPADDR /f ipconfig.out /a 7,13
setx IPADDR /f ipconfig.out /a 7,14
setx IPMASK /f ipconfig.out /a 8,14
退出命令提示符并打开一个新的。使用 SET 并查找 IPADDR 和 IPMASK,它们现在是持久的。要更新变量,您必须重新运行批处理并退出命令提示符。显示的不同坐标说明了 Windows 2003 与 Windows 2008 的 IPCONFIG 输出的差异(应该以相同的方式在 XP/7 上工作)。只写入一个找到的值,因此只要没有找到任何内容,失败的行就不会造成任何伤害。添加网关:
setx IPGATE /f ipconfig.out /a 9,12