Funcionalidade no estilo awk do Windows em script em lote

0

Eu quero extrair uma palavra de uma linha em um arquivo de teste em um servidor Windows, usando o script em lote. A linha de texto é a seguinte:

 CURRENTHEIGHT(9182)     TEMPERATURE(1234) 

Eu gostaria de extrair o número 9182 e 1234 que eu preciso para um pouco mais de computação.

Como faço isso em um script em lote?

Obrigado

    
por VNK 19.10.2016 / 22:29

1 resposta

1

Se o uso do Gnu-awk gawk não for uma opção, você precisará de uma combinação dos já mencionados for /f e findstr , que têm recursos RegEx limitados. para / f irá ignorar os delimitadores principais 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 2 e 4 , tokens 1 e 3 sã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 ;-). O primeiro usado para a variável %%A corresponde ao primeiro token; %%D para 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
    
por 20.10.2016 / 01:02