Трубопровод к входу findstr - PullRequest
14 голосов
/ 17 июня 2010

У меня есть текстовый файл со списком имен макросов (по одному в строке). Моя конечная цель - получить отпечаток того, сколько раз имя макроса появляется в файлах текущего каталога.

Имена макросов в 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 Ответ

17 голосов
/ 17 июня 2010

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

...