Funcionalidade estilo awk do Windows em script em lote

Funcionalidade estilo awk do Windows em script em lote

Quero extrair uma palavra de uma linha em um arquivo de teste em um servidor Windows, usando script em lote. A linha do texto é a seguinte;

 CURRENTHEIGHT(9182)     TEMPERATURE(1234) 

Gostaria de extrair os números 9182 e 1234 que preciso para alguns cálculos adicionais.

Como faço isso em um script em lote?

Obrigado

Responder1

Se usar o Gnu-awk gawk não for uma opção, você precisará de uma combinação dos já mencionados for /fe findstrque possui recursos RegEx limitados. for /f ignorará os delimitadores iniciais e tratará os delimitadores consecutivos como apenas um. Para analisar sua linha de amostra, você precisa dos delimitadores ()e space. Os números necessários são tokens 2e 4, tokens 1e 3são nomes de variáveis ​​aceitáveis. Um RegEx para a linha poderia ser "CURRENTHEIGHT([0-9][0-9]*).*TEMPERATURE([0-9][0-9]*)" eu disse linmited ;-). A primeira variável for usada %%Acorresponde ao primeiro token; %%Dpara o quarto. Para juntar tudo isso:

:: 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

O lote produz esta saída aqui:

> ExtractHeightTemp.cmd
_CURRENTHEIGHT=9182
_TEMPERATURE=1234

informação relacionada