【问题标题】:getting ip from ping command and storing in batch file variable从 ping 命令获取 ip 并存储在批处理文件变量中
【发布时间】:2022-10-21 20:13:59
【问题描述】:

正在寻找一种方法来获取网络上另一台计算机的 IP 地址。在另一个线程中找到了这个优秀的代码:

for /f "tokens=2 delims=[]" %f in ('ping -4 -n 1 piratelufi.com ^|find /i "pinging"') 做 echo %f

但是,我有两个问题:

  1. 需要能够在 CMD 文件中运行它。当我尝试时,它似乎不起作用。我读到的所有内容都说它应该可以工作,但是当我运行 CMD 文件时,什么也没发生。
  2. 我需要能够将生成的 IP 地址值存储在一个变量中,以便我可以在同一个 CMD 文件中的另一个命令中使用它。看起来变量 %f 已经具有该值,但是当我在 CMD 文件中运行此命令并尝试访问 %f 时,没有任何反应。

    想知道是否有人知道修改它的方法,所以我在 CMD 文件中运行此代码并获取该 IP 以在另一个命令中使用?

    谢谢!

【问题讨论】:

  • 查看for /? - %f 用于命令行,%%f 用于批处理脚本

标签: windows batch-file variables ping


【解决方案1】:

尝试这个。有两条设置的 PCName 行,您可以将其中一条 REM 取出,另一条取消 REM,以查看它提供了不同的 IP。

@ECHO OFF
SET "PCName=piratelufi.com"
REM SET "PCName=google.com"
FOR /F "tokens=2 delims=[]" %%F IN ('PING -4 -n 1 %PCName%') DO SET "PCIP=%%F"
ECHO {%PCIP%}

编辑:感谢 Stephan 指出 FIND 没有做任何有价值的事情,实际上是在创建不必要的依赖项。 PING 只产生一行tokens=2 delims=[] 匹配,导致只执行一次DO上面的脚本现在删除了FIND {我不检查原始代码是什么,不是做什么,这很糟糕。}

【讨论】:

    【解决方案2】:

    在这个批处理脚本中: 我们可以从 ping 结果中提取 IP,如果您想每分钟检查一次状态,我们可以添加一个循环!


    @echo off
    set "Link=piratelufi.com"
    Title Ping Tester for "%Link%"
    :MainPing
    set "state="
    setlocal enableextensions enabledelayedexpansion
    @for /f "tokens=2 delims=[]" %%b in ('ping -4 -n 1 !Link!') do set "ip=%%b"
        ping -n 1 !Link!>nul && set "state=UP" || set "state=Down"
    )
    :Myloop
    echo. %date% %time% [!Link!] [!ip!] Link is !state!
    Timeout /T 60 /NoBreak>nul & goto MainPing
    endlocal
    

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2017-06-15
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多