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 /f
e findstr
que 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 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 ;-). A primeira variável for usada %%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