20

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

宏的名称在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工作感到有些困惑。它以文件名(模式)或标准输入的形式获取输入(在其中查找内容,而不是要查找的内容),但是您要查找的内容始终在命令行上作为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实际上计算匹配行。

于 2010-06-17T13:46:50.037 回答