所以我正在处理一个扫描网络的批处理文件。我所做的是创建一个文本文件,其中只有网络中响应ping请求的每台计算机的IP,并且ping请求的输出保存到名为IPAdresses.txt的文件中 :: ================================================ ==========================
setlocal enabledelayedexpansion
@echo off
::文件重置和变量
echo. > %~dp0Logs\IPAddresses2.txt
SET fl=%~dp0Logs\IPAddresses.txt
::此命令执行ping请求并仅保存对%~dp0Logs \ IPAddresses.txt的回复。 ::每次返回的ping都会在文件中生成一行,如下所示:“从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%
::此命令解析文件中的“来自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个令牌(或字符串中的第三个字符集)。我需要从“192.168.1.1:”中删除“:”。要清楚,我想删除分号和以下空格,在IP地址的末尾。
::我试图将每一行放入一个变量并剪切拖尾字符,但我无法让它工作。 ::或者有没有办法改变FOR命令来执行此操作?
我一直在寻找两天,并尝试各种各样的工作,但没有运气。 我只需要在文本文件中使用IP来获取更多功能,以及网络范围内的NET命令。
任何帮助将不胜感激 谢谢。
答案 0 :(得分: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!
)