Quiero extraer una palabra de una línea en un archivo de prueba en un servidor Windows, usando un script por lotes. La línea de texto es la siguiente;
CURRENTHEIGHT(9182) TEMPERATURE(1234)
Me gustaría extraer los números 9182 y 1234 que necesito para realizar más cálculos.
¿Cómo hago esto en un script por lotes?
Gracias
Respuesta1
Si usar Gnu-awk gawk no es una opción, necesitará una combinación de lo ya mencionado for /f
y findstr
que tiene capacidades RegEx limitadas. for /f ignorará los delimitadores iniciales y tratará los delimitadores consecutivos como uno solo. Para analizar su línea de muestra necesita los delimitadores ()
y space
. Los números requeridos son tokens 2
y 4
tokens 1
y 3
son nombres de variables aceptables. Una expresión regular para la línea podría ser que "CURRENTHEIGHT([0-9][0-9]*).*TEMPERATURE([0-9][0-9]*)"
dije limitada ;-). El primero utilizado para la variable %%A
corresponde al primer token; %%D
al cuarto. Para juntar todo esto:
:: 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
El lote produce este resultado aquí:
> ExtractHeightTemp.cmd
_CURRENTHEIGHT=9182
_TEMPERATURE=1234