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 ..elseecho RESULT: Failed

しかし、8行目が..「OK」かどうかを確認する方法がわかりません

4

2 に答える 2

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
于 2013-03-21T11:56:53.670 に答える
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各行の最初の単語に割り当てるためです。

于 2013-03-21T12:38:29.240 に答える