2010-06-17 2 views
12

매크로 이름 목록 (한 줄에 하나씩)이있는 텍스트 파일이 있습니다. 나의 최종 목표는 매크로의 이름이 현재 디렉토리의 파일에 나타나는 횟수를 인쇄하는 것입니다.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

나는 약간의 방법을 조금 혼란스럽게 생각합니다. findstr. 그것은 파일 이름 (패턴) 또는 표준 입력에서 물건을 찾기 위해 입력을 얻지 만 찾고있는 것은 findstr에 대한 인수로 명령 행에 항상이 주어진다 (). .

findstr foo xyz.txt 

파일 xyz.txt에 문자열 foo를 찾습니다.

type meh.txt | findstr x 

(이 경우 파일 meh.txt의 내용 - cat의 일반적인 오용에 훨씬 가깝다 type 명령의 좋은 폐기물) 이전 명령의 출력에 문자열 x를 찾습니다.

매크로 이름이 나타나는 실제 줄 대신 수가이되었으므로 다른 접근 방법을 제안합니다. 파일의 내용을 통해

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

for 루프 반복, 라인 현명한 :이 매크로가 포함 된 파일이 그들에게 한 줄에 하나씩 나열되어 있다고 가정합니다. 그런 다음 검색중인 이름을 인쇄하고 일치하는 행을 실제로 계산하는 find /c을 실행합니다.

+1

나는 본다! 어떤 매개 변수가 파이프에서 가져올 수 있는지 확인하는 방법이 있습니까? 마지막 명령은 괜찮 았지만, '찾기'의 결과는 매우 추악합니다. 감사! – Gauthier

+0

음, 모든'* .ss '파일에 대해 수동으로 (for를 사용하여) 반복하고'find/c'를 던져 출력을 파싱하고 직접 포맷 할 수 있습니다. 그리고 대부분의 경우 프로그램이 파이프 라인 입력으로 받아들이는 것은 꽤 명백합니다. 그 경로는 대개 파일에서 읽은 다량의 데이터에 사용되기 때문입니다. 아직 파이프 라인에서 임의의 인수를 받아들이는 프로그램 (PowerShell cmdlet은 계산되지 않음)을 아직 보지 못했습니다. – Joey

관련 문제