我正在尝试创建一个脚本,让我从文本文件中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的回答的回复中进行了更新。谢谢G!
答案 0 :(得分: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
答案 1 :(得分: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