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

时间:2018-07-17 07:32:21

标签: windows shell batch-file cmd scripting

我正在尝试通过 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%
    )
)

3 个答案:

答案 0 :(得分:0)

您可以使用delayed Expansionif 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)

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

(对于(test.txt)中的/ F%i做ping -n 1%i 1> nul && echo%i UP || echo%i DOWN)1> result.txt

  1. 运行此命令,它将列出哪个IP已启动和哪个IP已关闭。