mxm199, нет, повышения быстродействия не будет, т.к. grep отрабатывает всю регулярку целиком за один запуск. Если бы я каждый раз на определённый шаблон номера запускал по процессу grep'а, тогда стоило бы оптимизировать.
Сколько строк в файле?
Попробуйте вот это, тут убрано всё лишнее и разделитель изменён на точку с запятой. Кроме того, быстродействие повышено из-за фильтрации пустых строк через If, а не grep, как в прошлом варианте.
Код:
![Выделить весь код](images/misc/selectcode.png)
@Echo Off
Set Path=%Path%;%CD%\bin
Set XMLFile=file.txt
For /F "tokens=1,* delims=:" %%A In ('grep -Eiorhn "([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})" "%XMLFile%"') Do (Set EMail_%%A=%%B&Set EMails=%%A)
For /F "tokens=1,* delims=:" %%A In ('grep -oin "\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}" "%XMLFile%"') Do (Set Phone_%%A=%%B&Set Phones=%%A)
If %EMails% GEQ %Phones% (Set Matches=%EMails%) Else (Set Matches=%Phones%)
SetLocal EnableDelayedExpansion
For /L %%A In (1,1,%Matches%) Do (
Set Out=!Phone_%%A!;!EMail_%%A!
If Not "!Out!"==";" Echo !Out!>>"out.txt"
)
Pause&Exit