2016-06-29 7 views
1

ファイルmyFile.txtには一連の文字列があります。 、私のアプリケーションでWindowsのバッチファイル - ワイルドカードとの文字列比較

@echo off 
    setlocal enableextensions enabledelayedexpansion 

    for /f %%i in (myFile.txt) do (

     line=%%i 
     if !line! EQU foo* (
      echo !line! 
     ) 

    ) 

Iではない:私は(私は今、文字列fooを選択し、デモのために)の線をループに以下のバッチファイルを書いて、それが特定の文字列と等しい場合に行を印刷しますfooと正確に一致する行だけを印刷するだけでなく、fooBarfooBarFredfooFredと一致する行も印刷する必要があります。そのため、そこにワイルドカードを挿入します。助けてください

しかし、それは動作しません..

答えて

4
findstr /b "foo" myfile.txt 

/b

/i:総額(FOO、Fooの、FOOを、見つける...)

を無視するラインも有用であるかもしれない文字列

で始まる必要があります

詳細についてはfindstr /?をご覧ください。

+0

ありがとうStephan。 'findstr /? 'を使用するあなたの提案は本当に役に立ちました:-) –

3

文字列の比較にはワイルドカードは使用できません。

行を部分文字列にすると簡略化できます。
しかし、まずコードを修正する必要があります。
set line=%%iでなく、line=%%iである必要があります。

@echo off 
setlocal enableextensions enabledelayedexpansion 

for /f "delims=" %%i in (myFile.txt) do (
    set "line=%%i" 
    set "first=!line:~0,3!" 
    if "!first!" EQU "foo" (
     echo(!line! 
    ) 
) 
+0

ありがとう。 forループをfor/fで始めるのはなぜdelims = "..."ですか? –

+2

であるため、標準の区切り文字はSPACEとTABです。デリムを無効にしないと、最初の単語だけが得られます。 – Stephan