Передача по каналу к входу 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 без успеха.

15
задан Joey 17 June 2010 в 14:00
поделиться

1 ответ

Я думаю, вы немного запутали, как работает 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 , который фактически считает совпадающие строки.

17
ответ дан 1 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: