我試圖製作一個腳本,它運行一個tracert,然後在每一跳上執行ping。目前,tracert困擾我,因爲如果主機可以訪問,變量全部改變。批處理:從tracert檢索IP /主機
tracert執行跳數,3個ping然後發佈地址或主機名。如果主機名無法訪問,它可能會發出*代替。
例如:
1 <1 ms <1 ms <1 ms 10.3.2.1
2 * <1 ms <1 ms FA0-0.100M.rc00-rhv.aplus.dk [62.61.128.142]
3 * 1 ms 1 ms hor2.ae15-cr1.danskkabeltv.dk [62.61.137.86]
4 * 1 ms 1 ms TE2-2.10G.rc02-hor.aplus.dk [62.61.138.44]
5 1 ms <1 ms <1 ms speedtest01-hor.aplus.dk [62.61.131.22]
上面的例子中,所有的行而異1毫秒OR *如果其延遲。
如果寫一些代碼:
SET Dest=speedtest.danskkabeltv.dk
SET LineStart=1
SET LineEnd=30
FOR /F "tokens=1,8,9 delims= " %%A IN ('Tracert %Dest%') DO IF %%A GEQ %LineStart% IF %%A LEQ %LineEnd% (
@((timeout /t 2 /nobreak)>nul)
call :GetPing %%A %%B %%C)
pause
和:
A = Hop count
B = Hostname (Or IP address if no hostname)
C = IP address (If hostname is present)
這只是一些吧。但由於我依靠AB & C爲這些IP地址和事實主機名,我得到錯誤的結果,如果我在*列中獲得*左右。
我不知道如何尋找的IP地址,如果那裏有一種爲扭轉/ F做了,拿到最後一列第一?
謝謝:)
編輯:
嘿,夥計們,感謝所有幫助。我嘗試了一些你們使用過的方法,但我似乎無法得到正確的結果。
按照要求,整個代碼&我怎麼會喜歡的結果:
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "Dest=speedtest.danskkabeltv.dk"
SET /a LineStart=1
SET /a LineEnd=30
FOR /F "delims=" %%X IN ('Tracert -w 300 %Dest%') DO (
CALL:GetTraceLine %%~X
)
pause
GOTO:EOF
:GetTraceLine (
SETLOCAL
if "%1"=="Tracing" (
EXIT /b
)
SET "Line=%~1"
SET "Line=%Line: ms =%"
FOR /F "tokens=1,5,6 delims= " %%A IN ("%Line%") DO IF %1 GEQ %LineStart% IF %1 LEQ %LineEnd% (
SET /a Hop=%%A
SET /a HOST=%%B
SET /a IP=%%C
if "%HOP%"=="Tracing" (
EXIT /b
)
if "%HOST%"=="Request" (
echo Hop: %HOP% Packetloss: --- Average: --- Host: Timeout
EXIT /b
)
if "%IP%"=="" (
call :GetPing %%A %HOST%
EXIT /b
)
ELSE (
FOR /F "delims=[]" %%A IN ('%IP%') DO (
set IP=%%A
)
call :GetPing %%A %IP% %HOST%
EXIT /b
)
)
:GetPing (
SetLocal
@ECHO OFF
SET AVG=---
SET LOSS=---
SET TARGET=%2
SET TARGET2=%3
SET HOP=%1
SET PingCMD=ping.exe -w 300 -n 30 %TARGET%
FOR /f "tokens=3 delims=," %%A IN ('%PingCMD%') DO (
call :GetLoss %%A
call :GetAvg %%A
)
echo Hop: %HOP% Packetloss: %loss% Average: %avg% Host: %TARGET% %TARGET2%
)
EXIT /b
:GetLoss
IF "%1"=="Lost" SET loss=%2 %3%% %4
EXIT /b
:GetAvg
IF "%1"=="Average" SET avg=%2 %3
EXIT /b
它似乎沒有「皮膚」的第一線,當我打電話GetTraceLine,即時通訊仍然在獲得「MS MS」線。
結果IM後是這樣的:
Hop: 1 Packetloss: 0 (0% loss) Average: 0ms IP: 192.168.1.1
Hop: 2 Packetloss: 0 (0% loss) Average: 0ms IP: 10.59.17.1
Hop: 3 Packetloss: 0 (0% loss) Average: 2ms IP: 172.17.2.137
Hop: 4 Packetloss: 0 (0% loss) Average: 6ms IP: 172.17.4.36
Hop: 5 Packetloss: 0 (0% loss) Average: 4ms IP: 172.17.4.10
Hop: 6 Packetloss: 0 (0% loss) Average: 2ms IP: 172.17.4.3
Hop: 7 Packetloss: 0 (0% loss) Average: 3ms IP: 80.72.159.241 Host: lt-0-0-0.mx-1a.ip.cirque.dk
Hop: 8 Packetloss: 0 (0% loss) Average: 2ms IP: 194.255.185.193 Host: 0xc2ffb9c1.linknet.dk.telia.net
Hop: 9 Packetloss: 0 (0% loss) Average: 2ms IP: 194.255.133.97 Host: 0xc2ff8561.linknet.dk.telia.net
Hop: 10 Packetloss: 0 (0% loss) Average: 5ms IP: 194.255.133.98 Host: 0xc2ff8562.linknet.dk.telia.net
Hop: 11 Packetloss: 0 (0% loss) Average: 3ms IP: 87.72.143.234
Hop: 12 Packetloss: --- Average: --- IP: Timeout
Hop: 13 Packetloss: --- Average: --- IP: Timeout
Hop: 14 Packetloss: 0 (0% loss) Average: 3ms IP: 62.61.131.22 Host: speedtest01-hor.aplus.dk
我希望它更有意義呢:)
再次,感謝所有幫助!
你想只有IP地址,因爲你的主題標題說? – foxidrive
我想跳躍計數,主機名和ping檢索(標題爲sry :)) – Saku
編輯您的問題,並顯示文本前後。 – foxidrive