2012-11-23 60 views
1

所以我目前正在研究扫描网络的批处理文件。我所做的是创建一个文本文件,其中只有网络上每台计算机的IP响应ping请求,并且ping请求的输出保存到名为IPAdresses.txt的文件中 :: ==== ================================================== ====================用批处理脚本解析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答复:字节= 32时间= 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

不要太迟回答,呃?这让你获得最大的方式。可能有更干净的方法来做到这一点,但我试图尽可能多地遵循你的代码。

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