Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在ping输出中将IP与文本分开?_Batch File_Ping - Fatal编程技术网

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

Batch file 在ping输出中将IP与文本分开?,batch-file,ping,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

我希望能够运行一个批处理文件,找到连接到路由器的每个设备的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中返回结果——或者至少,我希望这样做

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

是否有一个简单的函数可用于执行以下任一操作?

尝试以下操作:

@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
      )
    )
)

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

它正在运行,但与我的原始批处理文件不同,我看不到它每次尝试都在运行。如何重新添加此项?请立即尝试。我做了一些改变。现在它工作得很好!这两种尝试都是可视的,并且现在只显示主机名。很抱歉打扰您,您介意解释一下这里发生了什么吗?特别是第4行到第9行。我想用arp-a代替ping命令来获得列出的大多数设备。一点也不麻烦。我已经用解释更新了我的答案。如果我的答案帮助了你,考虑点击复选标记来接受它,这样其他人知道它对你有用。