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

时间:2014-12-02 20:20:50

标签: batch-file

如何仅显示ping结果的状态 - 这里是"我的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%

如何在此处设置变量以执行此操作。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过这种方式为每台服务器执行一行:

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,以获取有关for /L

的更多信息

修改:请参阅下面关于信任ping以设置错误级别的MC ND的评论。即使上面问题中的示例寻找Reply from也可能导致错误的成功。使用find "TTL="设置errorlevel更可靠。

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