2010-06-17 30 views
12

Tôi có tệp văn bản có danh sách tên macro (một dòng trên mỗi dòng). Mục tiêu cuối cùng của tôi là nhận được bản in bao nhiêu lần tên của macro xuất hiện trong các tệp của thư mục hiện tại.Đường ống vào đầu vào của findstr

Tên của macro nằm trong C:\temp\macros.txt.

type C:\temp\macros.txt trong dấu nhắc lệnh in danh sách được.

Bây giờ tôi muốn đường dẫn đầu ra thành đầu vào tiêu chuẩn là findstr.

type C:\temp\macros.txt | findstr *.ss (ss là loại tệp mà tôi đang tìm tên macro).

Điều này dường như không hoạt động, tôi không nhận được kết quả nào (rất nhanh, dường như không thử chút nào). findstr <the first row of the macro list> *.ss không hoạt động.

Tôi cũng đã thử findstr *.ss < c:\temp\macros.txt không thành công.

Trả lời

15

Tôi nghĩ bạn đang bối rối một chút về cách hoạt động của findstr. Nó được nhập vào (để tìm mọi thứ trong - không phải thứ cần tìm) hoặc là tên tệp (mẫu) hoặc từ stdin, nhưng những thứ bạn đang tìm kiếm là luôn là được đặt trên dòng lệnh làm đối số cho findstr .

findstr foo xyz.txt 

tìm chuỗi foo trong tệp xyz.txt.

type meh.txt | findstr x 

thấy chuỗi x trong đầu ra của lệnh trước đó (trong trường hợp này các nội dung của tập tin meh.txt - một sự lãng phí đẹp của lệnh type, nhiều giống như việc lạm dụng chung của cat).

Vì bạn đang theo số đếm thay vì các dòng thực tế tên macro xuất hiện, tôi đề xuất một cách tiếp cận khác. Điều này giả định rằng tệp của bạn chứa các macro liệt kê chúng một dòng trên mỗi dòng:

for /f "delims=" %x in (macros.txt) do @(echo %x: & find /c "%x" *.ss) 

Vòng lặp for lặp lại qua nội dung tệp của bạn, dòng-khôn ngoan. Sau đó, nó tiến hành in tên bạn đang tìm kiếm và thực hiện find /c mà thực sự đếm các dòng phù hợp.

+1

Tôi hiểu! Có cách nào để kiểm tra tham số có thể được lấy từ một đường ống? Lệnh cuối cùng của bạn làm việc ổn, mặc dù đầu ra của 'find' rất xấu. Cảm ơn! – Gauthier

+0

Vâng, bạn có thể lặp lại bằng tay (với 'for') trên tất cả các tệp' * .ss' và ném 'find/c' vào chúng, phân tích đầu ra của nó và tự định dạng nó. Và tốt, hầu hết thời gian nó là khá rõ ràng những gì một chương trình chấp nhận như đầu vào đường ống kể từ đó đường dẫn thường được sử dụng cho một lượng lớn dữ liệu mà nếu không được đọc từ một tập tin. Tôi chưa thấy một chương trình (lệnh ghép ngắn PowerShell không được tính) chấp nhận đối số tùy ý cũng từ đường dẫn. – Joey

Các vấn đề liên quan