我有一个带有宏名称列表的文本文件(每行一个)。我的最终目标是获取宏名称出现在当前目录文件中的次数。
宏的名称位于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
但没有成功。
答案 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
。