管道到findstr的输入

时间:2010-06-17 13:39:52

标签: batch-file pipe findstr

我有一个带有宏名称列表的文本文件(每行一个)。我的最终目标是获取宏名称出现在当前目录文件中的次数。

宏的名称位于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但没有成功。

1 个答案:

答案 0 :(得分:16)

我认为你对findstr的工作原理感到困惑。它可以作为文件名(模式)或stdin获取输入(查找内容 - 而不是要查找的内容),但是您要查找的内容总是在命令行中给出作为findstr的论据。

findstr foo xyz.txt

在文件foo中找到字符串xyz.txt

type meh.txt | findstr x

在上一个命令的输出中找到字符串x(在这种情况下是文件meh.txt的内容 - 很好地浪费了type命令,非常类似于常见的误用cat)。

由于您在计数之后而不是宏名称出现的实际行,我建议采用不同的方法。这假设您的包含宏的文件每行列出一个:

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

for循环按行迭代遍历文件内容。然后它继续打印您正在搜索的名称并执行实际计算匹配行的find /c