バッチ スクリプトでの Windows awk スタイルの機能

バッチ スクリプトでの Windows awk スタイルの機能

バッチ スクリプトを使用して、Windows サーバー上のテスト ファイルの行から単語を抽出します。テキスト行は次のとおりです。

 CURRENTHEIGHT(9182)     TEMPERATURE(1234) 

さらなる計算に必要な数値 9182 と 1234 を抽出したいと思います。

これをバッチ スクリプトで実行するにはどうすればよいですか?

ありがとう

答え1

Gnu-awk gawk を使用できない場合は、すでに述べた と の組み合わせが必要になりますfor /fが、findstrこれには RegEx 機能が制限されています。 for /f は先頭の区切り文字を無視し、連続する区切り文字を 1 つだけとして扱います。サンプル行を解析するには、区切り文字()と が必要ですspace。必要な数字はトークン24、トークン1および は3許容される変数名です。行の RegEx は、"CURRENTHEIGHT([0-9][0-9]*).*TEMPERATURE([0-9][0-9]*)" limited であると言えます ;-)。変数に最初に使用されるものは%%A最初のトークンに対応し、 は%%D4 番目のトークンに対応します。これらをすべてまとめると、次のようになります。

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

バッチによって次の出力が生成されます:

> ExtractHeightTemp.cmd
_CURRENTHEIGHT=9182
_TEMPERATURE=1234

関連情報