通过windows批处理脚本Ping多个服务器



我正试图通过windows批处理脚本使用ping命令检查n端和IP列表中的响应,并将所有结果保存在一个文件中(yes如果响应,no不响应(。这甚至可以通过批处理脚本实现吗?当我使用下面打印的脚本(pingingN.bat(时,我只得到第一个IP答案。

@ECHO OFF
SET ServerList="C:MyPathip.txt"
SET LogFile="C:MyPathPingResults.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%
)
)

根据我的评论并使用&&||条件句,以下是我的操作方法:

@Echo Off
Set "ServerList=C:MyPathip.txt"
Set "LogFile=C:MyPathPingResults.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,否则您的日志文件将不会显示哪些通过或未通过/失败

您可以使用延迟扩展,或者如果错误级别(如aschipfl所评论(,或者使用另一种方法:

(FOR %%a IN (%ServerList%) DO (
ping -n 1 %%a | find "TTL=" > NUL && (
echo %%a, yes
) || (
echo %%a, no
)
)>%LogFile%

其中,&&表示"如果上一个命令(find(成功,则",||表示"如果前一个指令(find(失败,则">

只需重定向一次整个输出,而不是单独重定向每一行,就可以大大提高速度。

  1. 创建一个文件(test.txt(并列出所有要ping的IP
  2. 创建另一个bat.file并编写此命令

(对于(test.txt(中的/F%i(执行ping-n 1%i 1>nul&echo%i向上||echo%iDOWN(1>result.txt

  1. 运行此命令,它将列出哪个IP在上,哪个IP在下

最新更新