Подтвердить что ты не робот

Трубопроводы для ввода

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

Имена макросов находятся в 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 без успеха.

4b9b3361

Ответ 1

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