2017-09-26 142 views
1

我必須檢查多個IP地址。所以,我做了一個批處理文件來獲得所有的ip結果,如下所示。通過批處理文件運行tracert命令時,請查找「請求超時」

@echo off 
if exist D:\tracert\computers.txt goto Label1 
echo. 
echo Cannot find d:\tracert\computers.txt 
echo. 
Pause 
goto :eof 

:Label1 
for /f %%i in (d:\tracert\computers.txt) do call :trace %%i 
notepad D:\tracert\%1.txt 
goto :eof 

:trace 
echo Tracing %1 
tracert -h 200 %1 >> D:\tracert\testing.csv 

computers.txt文件,我寫的行中的所有IP線路。

上面的代碼沒有問題,我可以正確地得到結果。但是,問題是,當我運行tracert命令時,我無法嘗試找到Request time out.

我想查找Request time out.,如果找到了,我想停止當前的tracert命令並將結果寫入文件並再次循環下一個ip。如果沒有找到,只是將結果寫入文件。

我想這樣做的主要原因是因爲我想減少運行此批處理文件時所花費的時間。

所以,我改變了這樣的代碼,但它不起作用。

:trace 
echo Tracing %1 
tracert -h 200 %1 
if find /c /i "Request time out." GEQ 0 (
    echo %1>>D:\tracert\%1.txt 
    goto :Label1 
) else (echo %1>>D:\tracert\%1.txt) 
notepad D:\tracert\%1.txt 

我不知道我可以像上面那樣搜索,因爲我是批量新手。 我非常感謝任何建議。

回答

1

這裏有一個想法,只爲修復和受find字符串是正確

:trace 
echo Tracing %1 
tracert -h 200 %1 | find /i "Request time out" && (
    >>D:\tracert\%1.txt echo %1) || (>>D:\tracert\%1.txt echo %1 
    goto :Label1) 
start D:\tracert\%1.txt 

你真的應該學會使用雙引號保護字符串/變量的內容,但這是外你的問題的範圍如此不變。

+0

非常感謝您的回答。但是,我無法在'.txt'文件中獲取tracert結果。它只顯示IP地址。 – Cloud

0

您需要確保拼寫正確,否則您將找不到字符串。注意dtimed

@echo off 
:trace 
echo Tracing %1 
tracert -h 200 %1 | find /i "Request timed out" >>%1.txt 

其次,IP總是會返回一個有效的IP或東西開始請求。所以這也會起作用。

@echo off 
:trace 
echo Tracing %1 
tracert -h 200 %1 | find /i "Request" >>%1.txt 

因此,它將回聲到hostname01.txt內容將是:

2 * * *請求超時。

3 * * *請求超時。