Тема: 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.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.