2017-02-02 2 views
-1

Я пытаюсь сохранить числовое значение значения для подсчета переменной.Как подсчитать появление переменной в файле журнала, соответствующем шаблону/RegEx в пакетном скрипте Windows

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% 

, но счет всегда дает мне значение 0.

+1

Изменить выражение поиска на '' <.*>. *% ATTR_TO_VERIFY%. *: "' –

+0

Thanks @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 автоматически удаляет пустые строки и строки, начинающиеся с ;, хотя. Способ решения этого вопроса заключается в том, чтобы добавить флаг /n в findstr и дать findstr номера строк в начале каждой согласованной строки.

+2

Чтобы быть точным, исходный код в вопросе не нуждается в 'tokens' и' delims'. Результат команды 'findstr' передается в команду' find/v '"/ c', которая напрямую возвращает количество совпадающих строк, возвращаемых командой' findstr'. –

+0

Конечно ... У меня был 'findstr/n', который добавляет номера строк вместо этого! Ужасная ошибка. Спасибо, что вспомнил меня –

Смежные вопросы