Batch file 批处理ping结果到CSV

Batch file 批处理ping结果到CSV,batch-file,for-loop,ping,Batch File,For Loop,Ping,我正在尝试创建一个脚本,该脚本允许我从文本文件ping一个计算机列表,并输出它们是否响应CSV文件。当使用一台机器测试命令时,我收到了正确的errorlevel响应,但当我使用FOR语句尝试时,每个结果都列为errorlevel 0 for /f %%g in (computers.txt) do ( ping -n 1 %%g | findstr "TTL" if errorlevel equ 0 ( echo %%g,success >> resu

我正在尝试创建一个脚本,该脚本允许我从文本文件ping一个计算机列表,并输出它们是否响应CSV文件。当使用一台机器测试命令时,我收到了正确的errorlevel响应,但当我使用FOR语句尝试时,每个结果都列为errorlevel 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
    )
)
我做错了什么?我已经尝试了上面的代码,以及来自的代码(它不会返回任何响应)。有没有更好的方法来实现这一结果?任何帮助都将不胜感激


解决方案

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

你能看看这是否适合你吗

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

我做了一些更改,现在你可以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 

你愿意改用吗?比传统的批处理文件更强大、更灵活。尝试在谷歌搜索“powershell ping程序”。有很多可用的东西。我没有想到要使用powershell,但是Test Connection命令看起来非常有用。我回到办公室后会试试这个。谢谢你,大卫!这很有魅力,我知道我在哪里犯了错误。谢谢你,G!很好,很高兴我能提供帮助,但请注意,这只适用于输出为“答复来自…”和“请求超时”的情况。如果您想考虑“ping主机不能确定…”、“目标主机不可教”等情况下的输出,则需要相应地修改代码。在工作中测试时,我发现在输出中跳过了长时间处于脱机状态(因此未在DNS中列出)的系统。在FINDSTR中添加一个附加检查解决了此问题。我用完整的答案更新了这个问题。再次感谢G!