2

文字列が以前に見つかった文字列よりも大きい行番号にある場合に文字列を見つけるスクリプトを書くのに問題があります。

FIND /N "BEGIN" "TEST_LOG.txt" && FIND "[ERROR" TEST_LOG.txt && EXIT /B 255

この文字列は、ログが書き込まれ ("BEGIN" が常に表示される)、2 番目の文字列 "[ERROR" が見つかった場合、最初に終了コード 255 を返します。

ログ ファイルに追加することが望ましいため、行番号 > FIND /N "BEGIN" ステートメントで検出された最大行番号で "[ERROR" のみを探したいと思います。

たとえば、次のようなログ ファイルを使用します。

BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
[ERROR

コードがエラー コード 255 で終了することを期待します。

BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
[ERROR
BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
ALL IS WELL!

返信をお待ちしております。ご協力いただきありがとうございます。

4

1 に答える 1

2

各文字列が表示される最大の行番号を設定し、[ERROR 文字列の行番号が BEGIN より大きい場合は終了する必要があります。FOR /F ループを使用して、FINDSTR /N から一致する各行を処理し、変数を行番号に設定します。処理された最後の一致が勝ち、最高の出現になります。検索文字列ごとに 1 つずつ、合計 2 つのループが必要です。

FINDSTR /B オプションを使用して、文字列が行頭にある場合にのみ一致させました。必要でない場合は、明らかにそのオプションを削除できます。

@echo off
setlocal
set begin=0
set error=0
for /f "delims=:" %%N in ('findstr /nlb BEGIN TEST_LOG.txt') do set /a begin=%%N
for /f "delims=:" %%N in ('findstr /nlb [ERROR TEST_LOG.txt') do set /a error=%%N
if %error% gtr %begin% exit /b 255
于 2012-11-01T10:56:36.850 に答える