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 /f
und findstr
mit 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 2
und 4
, Token 1
und 3
sind 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 %%A
entspricht dem ersten Token; %%D
dem 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