验证bat文件中的多个输出

时间:2015-01-14 03:04:54

标签: windows batch-file cmd

任何人都可以告诉我如何在.bat文件中验证多个输出。

我正在使用

@echo off
:start
ping x.x.x.x | findstr "unreachable" > nul
if %errorlevel% == 0 (
    echo "Network disconnect"
    goto RestartLAN
) else (
    echo "OK"
)
goto start

在此代码中,我验证了"无法访问"那么如何扩展行ping 10.128.224.1 | findstr "unreachable" > nul来验证输出"超时","一般失败"同样。

3 个答案:

答案 0 :(得分:1)

将ping输出放入文本文件并执行多个findstr。如果您不关心哪个错误,那么findstr将搜索由空格分隔的所有术语。 findstr "timeout unreachable"将匹配(尽管您应该指定开关以明确意图)。

Ping返回0表示错误,1表示成功(我知道的很奇怪)。

ping 128.0.0.1 && Echo Error (but for other commands means success) || Echo Success (but for other commands means error)

这与正常做法相反,其中0表示成功。

Findstr也会返回错误代码。 0 =找到,1 =未找到,2 =错误。

ping 128.0.0.1 | findstr /i /c:"unreachable"
If errorlevel 0 if not errorlevel 1 Echo Findstr found host unreachable
If errorlevel 1 if not errorlevel 2 Echo Findstr didn't find unreachable
If errorlevel 2 if not errorlevel 3 Echo Cmd has badly screwed up file redirection else you'll never see this

答案 1 :(得分:1)

(ping x.x.x.x | find "TTL=" >nul) && (echo OK) || (echo FAILURE)

对于ipv4,如果输出包含字符串TTL=,则可以访问目标计算机。

Here您可以找到有关ping用法的更多信息。

答案 2 :(得分:0)

演示:

@ECHO OFF
SETLOCAL

FOR %%a IN ("unreachable" "timeout" "general failure" "fine and dandy") DO (
 ECHO %%~a|FINDSTR /c:"unreachable" /c:"timeout" /c:"general failure" >NUL
 CALL ECHO ERRORLEVEL %%errorlevel%% FOR %%~a
)

GOTO :EOF

所以,

ping x.x.x.x | FINDSTR /c:"unreachable" /c:"timeout" /c:"general failure" >NUL

应该适合你的情况。