Funcionalidad de estilo awk de Windows en script por lotes

Funcionalidad de estilo awk de Windows en script por lotes

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 /fy findstrque 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 2y 4tokens 1y 3son 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 %%Acorresponde al primer token; %%Dal 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

información relacionada