1

所以我目前正在处理一个扫描网络的批处理文件。我所做的是创建一个文本文件,其中只有网络上响应 ping 请求的每台计算机的 IP,并且 ping 请求的输出保存到名为 IPAdresses.txt ::===== 的文件中==================================================== ====================

setlocal enabledelayedexpansion
@echo off

::文件重置和变量

echo. > %~dp0Logs\IPAddresses2.txt
SET fl=%~dp0Logs\IPAddresses.txt

::此命令执行 ping 请求并仅将回复保存到 %~dp0Logs\IPAddresses.txt。::每个返回的 ping 都会在文件中创建一行,如下所示“Reply from 192.168.1.1: bytes=32 time=2ms TTL=64”。

FOR /L %%i IN (1,1,254) DO ping -n 1 192.168.1.%%i | FIND /i “Reply” >> %fl%

::此命令解析文件中的“Reply from 192.168.1.1: bytes=32 time=2ms TTL=64”行并将输出保存到 %~dp0Logs\IPAddresses2.txt。

for /f "usebackq tokens=3" %%t in (`findstr /b /c:Reply from %fl% `) do (
echo %%t >> %~dp0Logs\IPAddresses2.txt
)

:: - - - - - -问题 - - - - - -

::问题是解析。最后一条命令只会解析“192.168.1.1:”,这是因为它只需要行中的 3 个 Token(或字符串中的第三组字符)。我需要从“192.168.1.1:”中删除“:”。为了清楚起见,我想删除 IP 地址末尾的分号和以下空格。

::我试图将每一行放入一个变量并剪切尾随字符,但我无法让它工作。::或者有没有办法改变 FOR 命令来做到这一点?

我已经搜索了两天并尝试了各种解决方法,但没有运气。我只需要文本文件中的 IP 即可获得更多功能和网络范围的 NET 命令。

任何帮助将不胜感激谢谢。

4

1 回答 1

0

回答永远不会太晚,嗯?这可以让你大部分时间到达那里。可能有更干净的方法可以做到这一点,但我尽量遵循您的代码。

setlocal enabledelayedexpansion
@echo off
SET fl=%~dp0Logs\IPAddresses.txt
set net=10.2.10.
set start=71
set end=75

  FOR /L %%i IN (%start%,1,%end%) DO ping -n 1 %net%%%i | findstr /i Reply >> %fl%
  for /f "usebackq tokens=3" %%t in (`findstr /b /c:Reply from %fl% `) do (
  set ip=%%t
  set ip=!ip:~0,-1!
echo !ip!
)
于 2014-10-15T04:58:08.640 回答