2014-07-25 60 views
0

我正在嘗試創建一個腳本,使我能夠從文本文件中ping計算機列表並輸出它們是否響應或不響應CSV文件。當使用一臺機器我收到正確的錯誤級別響應測試命令,但是當我嘗試使用for語句的每個結果被列爲錯誤級別0批量ping結果爲CSV

for /f %%g in (computers.txt) do (
    ping -n 1 %%g | findstr "TTL" 
    if errorlevel equ 0 (
     echo %%g,success >> results.csv 
    ) else (
     echo %%g,fail >> results.csv 
    ) 
) 

我在做什麼錯?我試過了上面的代碼,以及Batch ping a list of computer names and write the results to file(不返回任何響應)的代碼。有沒有更好的方法來實現結果?任何幫助將不勝感激。


解決方案

for /f %%g in (computers.txt) do (
    for /f "tokens=1" %%a in ('ping -n 1 %%g ^| findstr /i /c:"try" /c:"out" /c:"TTL"') do (
    if %%a EQU Ping (echo.%%g,Could not find host>>results.csv) 
    if %%a EQU Destination (echo.%%g,Destination host unreachable>>results.csv) 
    if %%a EQU Request (echo.%%g,Request timed out>>results.csv) 
    if %%a EQU Reply (echo.%%g,Replied>>results.csv)) 
) 

更新作爲響應至G的回答說。謝謝G!

+1

您打算使用[tag:powershell]代替嗎?比傳統的批處理文件更強大和靈活。嘗試在Google上搜索「powershell ping program」。許多可用的東西。 – David

+0

我沒有想過使用powershell,但Test-Connection命令看起來非常有用。當我回到辦公室時,我會試試這個。謝謝大衛! – AKAJim

回答

0

你能看看這是否適合你?

for /f %%g in (computers.txt) do (
    for /f "tokens=1" %%a in ('ping -n 1 %%g ^| findstr /i /c:"out" /c:"TTL"') do (
    if %%a EQU Reply (echo.%%g,success>>results.csv) else (echo.%%g,Fail>>results.csv)  
)) 

樣本 -
(我家裏的電腦上,並具有互聯網接入)

Computers.txt

google.com 
12.2.2.3 
gmail.com 
90.2.3.1 
yahoo.com 
6.6.6.6 
10.23.123.24 
stackoverflow.com 

我results.csv

google.com,success 
12.2.2.3,Fail 
gmail.com,success 
90.2.3.1,Fail 
yahoo.com,success 
6.6.6.6,Fail 
10.23.123.24,Fail 
stackoverflow.com,success 

乾杯,G

+0

這就像一個魅力,我看到我犯了錯誤。謝謝G! – AKAJim

+0

太棒了,很高興我能幫上忙,但請注意,這隻適用於輸出爲「回覆.....」和「請求超時」的情況。如果您想要考慮諸如「Ping主機無法確定...」,「目標主機無法訪問」等情況的輸出,則需要相應地修改代碼。 – gbabu

+0

注意。在工作中進行測試時,我發現在輸出上跳過了長時間處於脫機狀態的系統(因此未在DNS中列出)。在FINDSTR中添加額外的支票解決了它。我用完整的解決方案更新了這個問題。再次感謝G! – AKAJim

1

我做了一些更改,現在可以ping,trace和nslookup。甜!!

@echo off & cls 

echo Checking connection please wait . . . 
echo %date% %time%>> results.csv 

for /f %%g in (computers.txt) do (
    for /f "tokens=1" %%a in ('ping -a -n 1 %%g ^| findstr /i /c:"try" /c:"out" /c:"TTL"') do (
    if %%a EQU Ping (echo.%%g,Could not find host>>results.csv) 
    if %%a EQU Destination (echo.%%g,Destination host unreachable>>results.csv) 
    if %%a EQU Request (echo.%%g,Request timed out>>results.csv) 
    if %%a EQU Reply (echo.%%g,On-line>>results.csv)) 



:tracert 
    tracert %%g >>results.csv 

:nslookup 
    nslookup %%g >>results.csv 

    echo ************************************************************************** >> results.csv 
) 

echo The test is done! 
pause 

exit