任何人都可以告诉我如何在.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
来验证输出"超时","一般失败"同样。
答案 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
应该适合你的情况。