我正在尝试通过 windows批处理脚本使用ping命令从 n个IP地址列表中检查响应并将所有结果保存在文件中(是(如果回复),否(如果没有回复)。甚至可以通过批处理脚本吗?当我使用下面打印的脚本( pingingN.bat )时,我只会得到第一个IP答案。
@ECHO OFF
SET ServerList="C:\MyPath\ip.txt"
SET LogFile="C:\MyPath\PingResults.txt"
IF EXISTS %LogFile% DEL %LogFile%
FOR %%a IN (%ServerList%) DO (
ping -n 1 %%a | find "TTL=" > NUL
IF %ERRORLEVEL% NEQ 0 (
echo no >> %LogFile%
) ELSE (
echo yes >> %LogFile%
)
)
答案 0 :(得分:0)
您可以使用delayed Expansion或if errorlevel(如aschipfl所评论)或使用另一种方法:
(FOR %%a IN (%ServerList%) DO (
ping -n 1 %%a | find "TTL=" > NUL && (
echo %%a, yes
) || (
echo %%a, no
)
)>%LogFile%
其中&&
表示“如果先前的命令(find
)成功,那么”和||
“如果先前的命令(find
)失败,则
只需重定向一次整个输出而不是单独重定向每一行,就可以大大提高速度。
答案 1 :(得分:0)
根据我的评论并使用&&
和||
条件,这是我的处理方式:
@Echo Off
Set "ServerList=C:\MyPath\ip.txt"
Set "LogFile=C:\MyPath\PingResults.txt"
If Not Exist "%ServerList%" Exit /B
>"%LogFile%" (For /F UseBackQ %%A In ("%ServerList%"
) Do Ping -n 1 %%A|Find "TTL=">Nul&&(Echo Yes [%%A])||Echo No [%%A])
您会注意到我在输出中也包含了IP,否则您的日志文件将不会显示哪些通过或未通过的记录。
答案 2 :(得分:0)
(对于(test.txt)中的/ F%i做ping -n 1%i 1> nul && echo%i UP || echo%i DOWN)1> result.txt