Вы уже использовали FOR / F для захвата вывода команды DIR.Захват вывода FINDSTR ничем не отличается.
Однако более эффективно использовать простое FOR вместо FOR / F с командой DIR.
Вы использовали %~f1
, когдаЯ думаю, что вы намеревались %%~fg
.
Вы не можете развернуть набор переменных в скобках, используя% 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
Приведенное выше решениеможет произойти сбой, если имя файла содержит !
.Кроме того, путь можно использовать с *.eml
, если путь не содержит буквы диска.Проблемы с диском и !
могут быть решены с помощью дополнительных модификаций.