2012-11-23 84 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! 
)