Функциональность в стиле Windows awk в пакетном скрипте

Функциональность в стиле Windows awk в пакетном скрипте

Я хочу извлечь слово из строки в тестовом файле на сервере Windows, используя пакетный скрипт. Строка текста выглядит следующим образом;

 CURRENTHEIGHT(9182)     TEMPERATURE(1234) 

Я хотел бы извлечь числа 9182 и 1234, которые мне нужны для дальнейших вычислений.

Как это сделать в пакетном скрипте?

Спасибо

решение1

Если использование 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 ;-). Первый используемый for variable %%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

Связанный контент