【问题标题】:Batch ping results to CSV批量 ping 结果到 CSV
【发布时间】:2014-07-25 22:56:53
【问题描述】:

我正在尝试创建一个脚本,让我可以从文本文件 ping 计算机列表并输出它们是否响应 CSV 文件。使用单台机器测试命令时,我收到正确的错误级别响应,但是当我使用 FOR 语句尝试时,每个结果都列为错误级别 0。

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 的回答中的说明进行了更新。谢谢你!

【问题讨论】:

  • 您愿意改用powershell 吗?比传统的批处理文件更强大、更灵活。尝试在 Google 上搜索“powershell ping 程序”。可用的东西很多。
  • 我没想过要用powershell,但是Test-Connection命令看起来很有用。当我回到办公室时,我会尝试一下。谢谢大卫!

标签: batch-file for-loop ping


【解决方案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 

【讨论】:

    【解决方案2】:

    你能看看这对你有用吗?

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

    样品 -
    (我在家用电脑上,可以上网)

    计算机.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
    

    我的结果.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

    【讨论】:

    • 这就像一个魅力,我知道我在哪里犯了错误。谢谢 G!
    • 太好了,很高兴我能提供帮助,但请注意,这仅适用于输出为“来自.....的回复”和“请求超时”的情况。如果您想考虑“Ping host could not determine...”、“Destination host unteachable”等输出,则需要相应地修改代码。
    • 注意。在工作中进行测试时,我发现在输出中跳过了长时间离线的系统(因此未在 DNS 中列出)。在 FINDSTR 中添加一个额外的检查解决了它。我用完整的解决方案更新了这个问题。再次感谢 G!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多