在ping输出中将文本与文本分开?

时间:2014-02-20 16:49:44

标签: batch-file ping

我希望能够运行一个批处理文件,找到连接到我的路由器的每个设备的IP地址,然后从中找到它们的主机名。我到目前为止的内容如下:

@echo off

set /a n=0
:repeat
set /a n+=1
echo 192.168.1.%n%
ping -n 1 -w 500 192.168.1.%n% | FIND /i "Reply">>devices.txt
if %n% lss 254 goto repeat
type devices.txt
goto :hostname

找到所有可能的地址,并将它们写入文本文件devices.txt。 但是,我现在最终得到以下结论:

Reply from 192.168.1.82: bytes=32 time=5ms TTL=255

批处理文件的下一部分是:

:hostname 
ping -a %ip% -l 1 -n 1 >> hostnames.txt

这会ping在devices.txt中找到的IP并将结果返回到hostnames.txt中 - 或者至少,我想要它。

不知何故,我需要在将其写入devices.txt时将IP地址与其他文本分开,然后将其指定为变量,以便下一部分可以使用它。

我可以使用一个简单的功能来做这些事情吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

@echo off
setlocal 

set "p=ping -n 1 -w 500 192.168.1"
for /l %%a in (1,1,254) do (
    for /f "Tokens=3 delims=: " %%b in (
      '%p%.%%a^|Find /i "TTL="'
    ) do (
      echo Pinging %%b
      echo %%b>>devices.txt
      for /f "tokens=2" %%c in (
        'ping -a %%b -l 1 -n 1^|Find /i "pinging"') do (
           echo %%c >>hostnames.txt
      )
    )
)

我们首先创建一个从1到254的增量为1的For / L循环。然后我们在ping命令上运行for循环,该命令在返回行上获取第三个标记并将其放入变量,%在这种情况下%b。然后,我们回显出%% b中包含的ping IP地址,并将其写入devices.txt。然后,我们运行另一个ping来提取第二个令牌,这是我们正在ping的计算机的主机名,并将其写入hostnames.txt。