2013-03-21 66 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