【问题标题】:Checking if the output is OK检查输出是否正常
【发布时间】:2013-03-21 11:25:02
【问题描述】:

我正在通过像这样的批处理文件从 CMD 运行命令..

echo Step 3. Check TNSPING
tnsping vtdbs 2>NUL
    if not errorlevel 1 set error=PASSED
    if errorlevel 1 set error=FAILED
echo Result: %error%

但这只会告诉我它是否真的能够运行命令。当运行这个命令时,它会给出这样的输出......

blah blah blah
blah blah blah
blah blah
blah blah
blah blah
blah blah
blah blah
OK (80 msec)

所以第 8 行应该说“OK”,只要它说“OK”,那么.. echo RESULT: Passed else echo RESULT: Failed

但不确定如何检查第 8 行是否为 .."OK"

【问题讨论】:

    标签: windows for-loop batch-file cmd directory


    【解决方案1】:

    这是一个更有效的解决方案,如果tnsping vtdbs 的输出为 8 行,也可以容忍。

    echo Step 3. Check TNSPING
    set "error=FAILED"
    for /f %%I in ('tnsping vtdbs 2^>NUL') do (
        if "%%I"=="OK" (set "error=PASSED" & goto next)
    )
    :next
    echo Result: %error%
    

    您不必检查%%I 是否与OK (??ms) 匹配的原因是for /f 默认为"tokens=1"——或者换句话说,将%%I 分配给每行的第一个单词。

    【讨论】:

    • 我的代码从第8行到最后都是高效的!第 8 行之前可能是无效的OK!!
    • @mfm4aa - tnsping 的Example output。可以假设任何以 OK 开头的行都表示成功。
    • 谢谢我知道这两个答案都行,但我更喜欢这个干杯
    【解决方案2】:

    试试这个:

    @echo off &setlocal
    set "result="
    for /f %%i in ('tnsping vtdbs 2^>NUL^|more +7') do if not defined result set "result=%%i"
    if "%result%" equ "OK" (set "error=PASSED") else set "error=FAILED"
    echo Result: %error%
    endlocal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多