1

Тема: CMD/BAT: обработка (фильтрация) текста

Есть текстовый файл следующего вида:

2608,System,MRxSmb,ERROR,L,21.11.2007 11:24:17,3019,None,Перенаправитель не смог определить тип подключения. 
2607,System,MRxSmb,ERROR,L,21.11.2007 11:24:16,555,None,Ошибка 555. 
2606,System,MRxSmb,WARNING,L,21.11.2007 11:24:14,3019,None,Перенаправитель не смог определить тип подключения. 
2605,System,MRxSmb,WARNING,L,21.11.2007 11:24:13,3019,None,Перенаправитель не смог определить тип подключения. 
2604,System,MRxSmb,WARNING,L,21.11.2007 11:24:05,3019,None,Перенаправитель не смог определить тип подключения. 
2603,System,MRxSmb,WARNING,L,21.11.2007 10:32:31,3019,None,Перенаправитель не смог определить тип подключения. 
2602,System,MRxSmb,WARNING,L,21.11.2007 10:32:20,3019,None,Перенаправитель не смог определить тип подключения.

Задача: на основе этих данных формировать "отчёт" следующего вида:

ERROR,3019,Перенаправитель не смог определить тип подключения
ERROR,555,Ошибка 555

Решение:

@echo off
chcp 1251 > nul
for /f "tokens=4,7,9 delims=," %%i in (%1) do @echo %%i,%%j,%%k | findstr /b /l /i /c:Error

Перенаправляйте вывод скрипта в файл - полученный файл будет в кодировке cp1251, и его можно будет просматривать Блокнотом. Если хотите запускать скрипт в консоли - в свойствах окна консоли выберите шрифт, в котором несколько кодовых страниц (в т.ч. cp1251) - Lucida Console (лучше "для всех окон с этим именем").
На некоторых системах могут быть проблемы с findstr: при выводе на консоль вместо некоторых символов (например, "П", "ю", "ь") печатается точка. В этом случае можно использовать такой вариант:

@echo off
chcp 1251 > nul
for /f "tokens=4,7,9 delims=," %%i in (%1) do @echo %%i,%%j,%%k | find /i "Error"

Автор решений - alexii.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.