2013-03-21 33 views
0

我通过像这样一个批处理文件运行在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”,并且只要它便无.. echo RESULT: Passed其他echo RESULT: Failed

但不知道如何检查,看看8号线是..“OK”

回答

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% 

你没有检查是否匹配%%IOK (??ms)原因是for /f默认为"tokens=1" - 或者,换句话说,分配%%I到每一行的第一个字。

+0

我的代码从第8行到最后都是高效的!在第8行之前可能是无效的“OK”! – Endoro 2013-03-21 13:08:00

+0

@ mfm4aa - [输出示例](http://docs.oracle.com/cd/E14072_01/network.112/e10836/connect.htm#BABJAGAG)tnsping。假设任何以OK开头的行都表示成功是可以接受的。 – rojo 2013-03-21 13:13:00

+0

谢谢我知道这两个答案都可以工作,但我更喜欢这一个干杯 – 2013-03-22 03:21:32

1

试试这个:

@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 
+0

这也适用,所以我只是带着一个优惠感谢 – 2013-03-22 03:22:14