Command line 如何在Windows命令行中将变量设置为IP?

Command line 如何在Windows命令行中将变量设置为IP?,command-line,batch-file,ip,command-prompt,ipconfig,Command Line,Batch File,Ip,Command Prompt,Ipconfig,有没有一种简单的方法可以从我的服务提供商那里获取IP地址,并通过命令提示符将其放入变量中?如下所示: SET hostIP = nslookup \address ECHO %hostIP% 或 如果您可以使用bash(如在cygwin中),那么可以很容易地使用back ticks在SET hostIP行中执行您想要的任何操作 如 export hostIP = `curl 'http://whatsmyip.net' | grep '<title' | awk '{print $8}'

有没有一种简单的方法可以从我的服务提供商那里获取IP地址,并通过命令提示符将其放入变量中?如下所示:

SET hostIP = nslookup \address
ECHO %hostIP%

如果您可以使用bash(如在cygwin中),那么可以很容易地使用back ticks在SET hostIP行中执行您想要的任何操作

export hostIP = `curl 'http://whatsmyip.net' | grep '<title' | awk '{print $8}' | sed -e 's:<.*::g'`

export hostIP=`curl'http://whatsmyip.net“|grep”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中。如果随后执行回显%IP%,它将显示IP,如: IP=192.168.1.2


当然,在批处理脚本中,您需要将单个%f替换为%%f。请注意管道(“|”)符号前面的克拉(“^”)符号,这在批处理脚本中是必需的,因此它们不会解释管道,而是将ping语句的结果通过管道传输到find语句。

尝试这样的批处理来设置环境变量:

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

您现在如何从您的服务提供商处获得IP地址?@Gabe,通过
ipconfig/all
可能的重复应该是一个注释,而不是答案。我用答案更新了。我在正确格式化时遇到了问题[backtick]可能不会立即为每个人所接受。我知道你这么做是因为这个网站的格式,但是你可以使用$()语法来避免混淆。这是Windows还是Linux?我只是想澄清一下。这可以用在cygwin上(如op中所示)。Cygwin是一个可以在Windows上使用的bash shell。Arun的答案对我来说并不适用,这一个效果非常好。谢谢
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
setx IPGATE /f ipconfig.out /a 9,12