【问题标题】:How do I do set a variable in Windows command line to an IP?如何在 Windows 命令行中将变量设置为 IP?
【发布时间】:2011-09-27 20:17:48
【问题描述】:

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

SET hostIP = nslookup \address
ECHO %hostIP%

或者

SET hostIP = ipconfig \address
ECHO %hostIP%

【问题讨论】:

标签: command-line batch-file ip command-prompt ipconfig


【解决方案1】:
for /f "skip=1 tokens=2 delims=: " %f in ('nslookup %COMPUTERNAME% ^| find /i "Address"') do echo %f

【讨论】:

    【解决方案2】:

    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 语句。

    【讨论】:

    • Arun 的回答对我不起作用,这个很好用。谢谢!
    【解决方案3】:

    如果您可以使用 bash(如在 cygwin 中),则可以使用反引号轻松在 SET hostIP 行中执行您想要的任何内容。

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

    【讨论】:

    • 这应该是评论,而不是答案。
    • 我更新了答案。我无法正确格式化它
    • [反引号] 对每个人来说可能并不明显。我知道你这样做是因为这个网站的格式,但你总是可以使用 $() 语法来避免混淆。
    • 这是 Windows 还是 Linux?我只是想澄清一下。
    • 这可以在 cygwin 上使用(如操作所示)。 Cygwin 是一个可以在 Windows 上使用的 bash shell。
    【解决方案4】:

    尝试像这样批量设置环境变量:

    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
    

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 2012-09-27
      • 2019-08-09
      • 2017-04-20
      • 2023-03-14
      • 2011-06-06
      相关资源
      最近更新 更多