2

次を含むテキストファイルがあります

Pool        p c Dev   Dev             Total  Enabled     Used     Free   a   b
------------ - - ----- ------------ -------- -------- -------- -------- --- ---
FC100        T F FBA   RAID-3(1+1)   13849.1  13849.1  13119.4   7292.0   0 Ena
SATA500      T S FBA   RAID-3(1+1)   50019.2  50019.2  46974.5   3044.9 Ena   0


ファイルから FC100 と SATA500 を抽出して表示したいのは、これらの 2 行に "Ena" が含まれているためです。私はバッチ スクリプトの経験がほとんどないため、限られた知識で次のスクリプトを思いつきました。

@ECHO OFF
setlocal enabledelayedexpansion

FOR /F "tokens=1,* delims= " %%a in (list.txt) DO (
    if "%%b" NEQ "" (

        set string=%%b
        set substring= Ena

        echo !string! |findstr "!substring!" > nul
        if errorlevel 1 (
            rem echo !SubString!
        ) else (
            echo %%a
        )
    )
)

上記のコードで何が起こっているかというと、必要な出力を取得していますが、行に有効になっている Ena が含まれているため、Pool も取得しています。Ena のみを含み、Enabled と一致しない行を抽出する方法を教えてください。

電流出力

Pool
FC100
SATA500

findstr で正規表現マジックを使用しようとしましたが、うまくいきません。注 - この問題は Perl で解決できますが、残念ながらシステムに Perl をインストールできないため、これをバッチで行う必要があります。

4

4 に答える 4

3
@echo off
for /F "skip=1" %%a in ('findstr /C:" Ena" list.txt') do (
   echo %%a
)

EDIT: 任意の部分に「Ena」文字列が含まれる行を正確に探す新しいソリューション

@echo off
for /F %%a in ('findstr /R /C:"\<Ena\>" list.txt') do (
   echo %%a
)
于 2012-12-26T20:16:05.503 に答える
0

これを試して:

set substring="Ena[^a-zA-Z]"

[^a-zA-Z]findstrの後に文字を含む文字列を使用しないように指示しますEna

于 2012-12-26T19:58:55.690 に答える
0

交換

echo !string! |findstr "!substring!" > nul

echo !string! |findstr "!substring!" |findstr /v "Enabled" > nul

またはさらに簡単:

echo !string! |findstr "Ena" |findstr /v "Enabled" > nul

1findstrつ目は「Ena」を含むすべての行を含め、2 つ目findstr /vは「Enabled」を含むすべての行を除外します。

于 2013-07-29T13:18:30.747 に答える