DIR 명령의 출력을 캡처하기 위해 이미 FOR/F를 사용했다. FINDSTR의 출력을 캡처하는 것도 마찬가지입니다.
그러나 DIR 명령과 함께 FOR/F 대신 간단한 FOR을 사용하는 것이 더 효율적입니다.
내가 %%~fg
라고 생각하면 %~f1
을 사용했습니다.
% var %를 사용하여 괄호 안에 변수 세트를 확장 할 수 없으면! var! 대신 확장을 지연 시켰습니다. 자세한 내용은 명령 줄에서 SET /?
을 입력 - 로 시작하는 섹션을 읽어 "마지막으로, 지연된 환경 변수 확장에 대한 지원이 이 추가되었습니다 ..."
그러나, 귀하의 경우, 당신은 쉽게 지연 사용 방지 할 수 있습니다 확장 (문제가 아니라).
기존 "fullnames.txt"를 삭제 한 다음 출력을 추가하는 대신 전체 구문을 괄호로 묶고 모든 출력을 덮어 쓰기 모드를 사용하여 파일로 리디렉션하는 것이 더 효율적입니다.
@echo off
(
for %%F in (*.eml) do (
for "delims=" %%A in ('findstr /b /c:"To: " "%%F"') do echo %%F %%A
)
) >fullnames.txt
그러나 위의 해결 방법은 단순한 것보다 훨씬 복잡합니다.
FINDSTR은 와일드 카드로 지정된 여러 파일을 처리 할 수 있으며 각 일치하는 줄의 앞에 파일 이름과 콜론이 붙습니다.
당신은 배치 파일을 사용하지 않고 명령 줄에서 간단하게 결과를 얻을 수 있습니다 (또는 배치 파일에 넣고 수) :
findstr /b /c:"To: " *.eml >fullnames.txt
편집
을 당신이이 염려되는 경우 파일은 여러 줄이 "다음"로 시작 포함되어있을 수 있습니다, 그리고 당신은 단지 다음 배치 파일을 사용하여 다시이며, 첫 번째 줄을 사용하려면 :
@echo off
setlocal enableDelayedExpansion
set "prevFile="
(
for /f "tokens=1* delims=:" %%A in ('findstr /b /c:"To: " *.eml') do (
if "%%A" neq "!prevFile!" echo %%A: %%B
set "prevFile=%%A"
)
) >fullnames.txt
위의 솔루션 수 F 파일 이름이 !
인 경우 ail.또한 경로에 드라이브 문자가없는 한 *.eml
과 함께 경로를 사용할 수 있습니다. 드라이브와 !
문제는 추가 수정으로 해결할 수 있습니다.
그러나 "받는 사람 :"은'설정 toline = FINDSTR/B/C는'_execute_하지 않습니다' FINDSTR' 명령은 텍스트 만 지정합니다. – jeb