2017-02-02 4 views
-1

変数を数えるために値の出現を格納しようとしています。Windowsのバッチスクリプトでパターン/ RegExに一致するログファイルの変数の出現をカウントするには

set ATTR_TO_VERIFY=W10SBRS 
for /F "tokens=*" %%N in ('findstr /r "^<.*^>.*%ATTR_TO_VERIFY%.*:" lofile.log ^| find /v "" /c') do set "COUNT=%%N" 
echo %COUNT% 

でも、常にカウント値がゼロになります。

+1

検索式を「<.*>。*%ATTR_TO_VERIFY%。*:」に変更してください。 –

+0

ありがとう@mc nd。それは私のために働いた –

答えて

0

コメントに@MCDNが指摘している正規表現のエラーは、トラブルの原因となっています。
find /cを使用せずに行うこともできます。以下が何をすべきあなたのfindstrコマンドの結果の行数をカウントするには:

set ATTR_TO_VERIFY=W10SBRS 
for /F "tokens=*" %%N in ('findstr /n /r "<.*>.*%ATTR_TO_VERIFY%.*:" lofile.log') do set /a COUNT+=1 
echo %COUNT% 

FOR /Fは自動的にかかわらず、;で始まる空行と行を破棄します。これを解決する方法は、フラグをfindstrに追加し、findstrに各一致する行の先頭に行番号を追加させることです。

+2

ちょうど正確には、質問の元のコードは* '*トークン'と 'delims'句を必要としません。 'findstr'コマンドの出力は' find/v "/ cコマンドにパイプされ、' findstr'コマンドによって返された一致する行の数を直接返します。 –

+0

もちろん...代わりに行番号を追加する 'findstr/n'がありました!ひどい間違い。私を覚えてくれてありがとう –

関連する問題