2016-08-10 10 views
0

Windowsバッチスクリプトを作成する必要があります。 指定されたディレクトリから、与えられたファイル名を持つすべてのファイルに少なくとも1つの特定のテキストが存在するかどうかを確認する必要があります。Windowsバッチスクリプト:ファイル内にオカレンスを確認します。

例: ディレクトリC:\ MyDirから、このディレクトリとすべてのサブディレクトリで、 "MyFile.txt"という名前のファイルを確認する必要があります。見つかったすべてのファイルに、「MyText」というテキストが少なくとも1つ出現する必要があります。

FOR /R C:\MyDir %%f in (MyFile.txt*) do ( FINDSTR /i /c:"MyText" %%~f )

問題:私はこれまででてきた何

  • これも名前MyFile.txtXXX
  • を持つファイルをマッチすることが唯一の出現を印刷しないが、そのような出現が見つかるかどうかを「返す」ことはありません。このコードは、バッチスクリプト内にあります。このバッチスクリプトは、このような事態が発生していないファイルが1つあれば、エラーで終了する必要があります。
+0

なぜ 'MyFile.txt *'ですか?これは「MyTextを含む(ない)すべての「MyFile.txt」を見つける」)に変換できますか? – Stephan

+0

はい、それは目標です:「MyTextが含まれていない「MyFile.txt」をすべて探してください。 – JohnQQ

答えて

1

findstr /vは動作しません。ここで意図したように、小さなトリックを使用する必要があります:findstrを使用し、errorlevelを使用して「文字列が見つかりません」を見つけてください:

for /r %%a in (myfile.txt) do findstr /i "MyText" %%a >nul && echo yes: %%a|| echo no: %%a 
  • for /r再帰的である(あまりにもサブディレクトリ内で検索)(代わりに、完全なfindstr /sリストの各単一ファイルのERRORLEVELをチェックできるようにするには、他の後、各ファイル1を処理するためにforの代わりfindstr /sを使用)
を "前のコマンド( findstr)は、その後、失敗した場合" として
  • ||作品 "前のコマンド(findstr)は、その後、成功した場合" など&&作品
  • 1

    Read findstr /?:ファイル内の文字列を検索します。

    FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] 
         [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]] 
         strings [[drive:][path]filename[ ...]] 
        … 
        /S   Searches for matching files in the current directory and all subdirectories. 
        … 
    

    次のコマンドは、すべての一致を検索し、表示されるはずです:

    FINDSTR /S /i /c:"MyText" C:\MyDir\MyFile.txt 
    

    次のコマンドは(完全修飾)のみのファイル名をすべての一致と表示を見つける必要があります。

    FINDSTR /M /S /i /c:"MyText" C:\MyDir\MyFile.txt 
    
    +0

    Thxあなたの答えは ですが、このステートメントでは、指定されていないファイルは見つかりません。 – JohnQQ

    関連する問題