Batch file 如何在dos批处理文件中设置只显示结果的变量

Batch file 如何在dos批处理文件中设置只显示结果的变量,batch-file,Batch File,如何仅显示ping结果的状态,如下所示:“My serverx已修复,仅更改联机/脱机状态。” **我的服务器1是在线的 **我的服务器2是在线的 **我的服务器3…脱机 我本想尝试一下,但失败了 @echo off ping My server1|find "Reply from " >NUL IF NOT ERRORLEVEL 1 echo Success IF ERRORLEVEL 1 echo Fail ping My server2|find "Reply from "

如何仅显示ping结果的状态,如下所示:“My serverx已修复,仅更改联机/脱机状态。”

**我的服务器1是在线的

**我的服务器2是在线的

**我的服务器3…脱机

我本想尝试一下,但失败了

@echo off
ping My server1|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 echo Success
IF     ERRORLEVEL 1 echo Fail

ping My server2|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 echo Success
IF     ERRORLEVEL 1 echo Fail

ping My server3|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 echo Success
IF     ERRORLEVEL 1 echo Fail

echo My server1 is ....%ver%
echo My server2 is ....%ver%
echo My server3 is ....%ver%
如何在这里设置变量来执行此操作


谢谢。

您可以通过以下方式使用每台服务器一行代码:

ping -n 1 server1 | find "TTL=" >NUL && echo server1 is online. || echo server1 is offline.
ping -n 1 server2 | find "TTL=" >NUL && echo server2 is online. || echo server2 is offline.
ping -n 1 server3 | find "TTL=" >NUL && echo server3 is online. || echo server3 is offline.
它基本上是

ping -n 1 server1 | find "TTL=" >NUL
if not errorlevel 1 (
    echo server1 is online.
) else (
    echo server1 is offline.
)
…等等。如果您正在ping的主机是连续的,您可以通过使用
for/L
循环或类似的方法使用更少的代码,例如:

for /L %%I in (1,1,254) do (
    ping -n 1 192.168.0.%%I | find "TTL=" >NUL && echo 192.168.0.%%I is online. || echo 192.168.0.%%I is offline.
)
在cmd控制台中键入
help for
,了解有关/L的
的更多信息

编辑:请参阅下面MC ND关于信任
ping
设置错误级别的评论。即使是上面问题中的示例,从
中查找
回复也可能导致错误成功。使用
查找“TTL=“
设置错误级别更可靠


有关条件执行的更多信息,.

可能会帮助errorlevel不是检查ping成功的可靠方法。在ipv4中,如果任何数据包丢失,就会设置errorlevel,ping同一vlan上的非活动机器将导致无法访问的机器,且没有数据包丢失,也没有errorlevel。ipv6的行为不同(更多)我明白了。我刚刚在我的子网中ping了一个不存在的主机,并得到了“来自(我的本地计算机)的回复:无法访问目标主机”,但
%ERRORLEVEL%
为0。我喜欢您关注
TTL=
@MCND的想法,如果您正在检查的是一组web服务器,并且您想要一个脚本来检查每个服务器上的HTTP服务是否返回“200OK”状态,那么它有一个脚本可以执行此操作。真聪明!嗨,罗乔,我很感激你的回答,并努力做到这一点。