我正试图通过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
(失败,则">
只需重定向一次整个输出,而不是单独重定向每一行,就可以大大提高速度。
- 创建一个文件(test.txt(并列出所有要ping的IP
- 创建另一个bat.file并编写此命令
(对于(test.txt(中的/F%i(执行ping-n 1%i 1>nul&;echo%i向上||echo%iDOWN(1>result.txt
- 运行此命令,它将列出哪个IP在上,哪个IP在下