20

マクロ名のリスト (1 行に 1 つ) を含むテキスト ファイルがあります。私の最終的な目標は、マクロの名前が現在のディレクトリのファイルに何回出現するかを出力することです。

マクロの名前はC:\temp\macros.txt.

type C:\temp\macros.txtコマンドプロンプトで、リストを問題なく出力します。

次に、その出力を の標準入力にパイプしますfindstr

type C:\temp\macros.txt | findstr *.ss (ss は、マクロ名を探しているファイルの種類です)。

これは機能していないようです。結果が得られません(非常に高速で、まったく試行されていないようです)。findstr <the first row of the macro list> *.ss動作します。

私も試してみfindstr *.ss < c:\temp\macros.txtましたが、成功しませんでした。

4

1 に答える 1

22

仕組みを少し混乱させていると思いますfindstr。ファイル名(パターン)またはstdinから入力(検索するものではなく、検索するもの)を取得しますが、探しているものは常にコマンドラインで への引数として与えられますfindstr

findstr foo xyz.txt

fooファイル内の文字列を検索しますxyz.txt

type meh.txt | findstr x

は、前のコマンドの出力から文字列を見つけますx(この場合、ファイルの内容です。コマンドmeh.txtの無駄使いであり、typeよくある の誤用によく似ていcatます)。

マクロ名が表示される実際の行ではなくカウントを求めているので、別のアプローチをお勧めします。これは、マクロを含むファイルが 1 行に 1 つずつリストされていることを前提としています。

for /f "delims=" %x in (macros.txt) do @(echo %x: & find /c "%x" *.ss)

ループは、ファイルのfor内容を行単位で繰り返します。次に、検索して実行している名前を出力し、find /c実際に一致する行をカウントします。

于 2010-06-17T13:46:50.037 に答える