Если использование Gnu-awk gawk не подходит, вам понадобится комбинация уже упомянутых for /f
и findstr
которая имеет ограниченные возможности RegEx.
for /f игнорирует ведущие разделители и рассматривает последовательные разделители как только один. Для разбора вашей строки образца вам понадобятся разделители ()
и space
. Необходимые числа - токены 2
и 4
, токены 1
и 3
- допустимые имена переменных. RegEx для строки может быть "CURRENTHEIGHT([0-9][0-9]*).*TEMPERATURE([0-9][0-9]*)"
Я ДЕЙСТВИТЕЛЬНО сказал linmited ;-). Первый, используемый для переменной %%A
соответствует первому токену; %%D
к четвертому. Чтобы собрать все это вместе:
:: ExtractHeightTemp.cmd ::::::::::::::::::::::::::::::::::::::::::::
@echo off
Set File=C:\Test\test.txt
for /f "tokens=1-4 delims=() " %%A in (
'findstr /i "CURRENTHEIGHT([0-9][0-9]*).*TEMPERATURE([0-9][0-9]*)" "%File%"'
) do Set _%%A=%%B&Set _%%C=%%D
Set _
Pause
Пакет производит этот вывод здесь:
> ExtractHeightTemp.cmd
_CURRENTHEIGHT=9182
_TEMPERATURE=1234