У меня есть текстовый файл со списком макро-имен (один на строку). Моя заключительная цель состоит в том, чтобы получить печать того, сколько раз имя макроса появляется в файлах текущего каталога.
Имена макроса находятся в 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
без успеха.
Я думаю, вы немного запутали, как работает findstr
. Он получает ввод (чтобы найти что-то, а не то, что нужно искать) либо в виде имени файла (шаблона), либо из стандартного ввода, но то, что вы ищете, всегда задается в командной строке как аргумент findstr
.
findstr foo xyz.txt
находит строку foo
в файле xyz.txt
.
type meh.txt | findstr x
находит строку x
в выводе предыдущей команды (в данном случае содержимое файла meh.txt
- приятная трата типа
] команда, очень похожая на обычное неправильное использование cat
).
Поскольку вы ищете счетчиков вместо фактических строк, в которых появляются имена макросов, я бы предложил другой подход. Это предполагает, что ваш файл, содержащий макросы, перечисляет их по одному в каждой строке:
for /f "delims=" %x in (macros.txt) do @(echo %x: & find /c "%x" *.ss)
Цикл for
выполняет итерацию по содержимому вашего файла по строкам. Затем он переходит к распечатке имени, которое вы ищете, и выполнению find / c
, который фактически считает совпадающие строки.