验证 bat 文件中的多个输出

Verify multiple outputs in bat file

谁能告诉我如何验证 .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

在这段代码中,我验证了 "unreachable" 那么我如何扩展行 ping 10.128.224.1 | findstr "unreachable" > nul 来验证输出 "timeout"、"general failure"。

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

Ping returns 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 也 returns 错误代码。 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

演示:

@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

应该适合你的情况。

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

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

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