Windows-AWK-Funktionalität im Batch-Skript

Windows-AWK-Funktionalität im Batch-Skript

Ich möchte mithilfe eines Batch-Skripts ein Wort aus einer Zeile in einer Testdatei auf einem Windows-Server extrahieren. Die Textzeile lautet wie folgt:

 CURRENTHEIGHT(9182)     TEMPERATURE(1234) 

Ich möchte die Zahlen 9182 und 1234 extrahieren, die ich für einige weitere Berechnungen benötige.

Wie mache ich das in einem Batch-Skript?

Danke

Antwort1

Wenn die Verwendung von Gnu-awk gawk keine Option ist, benötigen Sie eine Kombination der bereits erwähnten for /fund findstrmit eingeschränkten RegEx-Funktionen. for /f ignoriert führende Trennzeichen und behandelt aufeinanderfolgende Trennzeichen als nur eines. Um Ihre Beispielzeile zu analysieren, benötigen Sie die Trennzeichen ()und space. Die erforderlichen Zahlen sind Token 2und 4, Token 1und 3sind zulässige Variablennamen. Ein RegEx für die Zeile könnte lauten ( "CURRENTHEIGHT([0-9][0-9]*).*TEMPERATURE([0-9][0-9]*)" ich habe tatsächlich „limited“ gesagt ;-). Die erste für die Variable verwendete %%Aentspricht dem ersten Token; %%Ddem vierten. Um das alles zusammenzufassen:

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

Der Batch erzeugt diese Ausgabe hier:

> ExtractHeightTemp.cmd
_CURRENTHEIGHT=9182
_TEMPERATURE=1234

verwandte Informationen