как скопировать один экземпляр строки из одного текстового файла в новый текстовый файл?

У меня есть текстовый файл с n количеством строк. m строк содержат интересующую меня строку (m‹=n). Мне нужен командный файл, который будет копировать только одну строку (например, первое появление), содержащую строку, в новый текстовый файл. Когда я использую команду findstr, она копирует все строки, содержащие строку.

Спасибо! Пол Сафье


person Paul Safier    schedule 15.01.2013    source источник


Ответы (1)


Учитывая вашу команду FINDSTR, которая находит ваши m строк (она может быть настолько простой или сложной, насколько вам нужно)

findstr "search" "fileName.txt"

затем вы можете обработать результаты этой команды с помощью цикла FOR/F. Вы можете выйти из цикла после первой совпадающей строки, используя GOTO.

for /f "delims=" %%A in ('findstr "search" "fileName.txt"') do (
  echo %%A >>"outFile.txt"
  goto :break
)
:break

Команда FOR — одна из самых сложных команд, доступных для пакетной обработки. Есть много вариантов. Вы можете получить справку по команде, введя HELP FOR или FOR /? в командной строке.

Параметр "DELIMS=" отключает разбор строки на токены. Без этой опции FOR /F разбил бы каждую строку на токены, разделенные пробелами или символами табуляции. Список разделителей может быть установлен на другие символы или, в вашем случае, не установлен ни на что.

Приведенный выше код будет пропускать строки, начинающиеся с ;, потому что FOR /F будет пропускать все строки, начинающиеся с символа EOL — по умолчанию ;. Вы можете изменить символ EOL на любой отдельный символ. Но если вы не знаете, с чего может начинаться ваша совпадающая строка, то вы не знаете, какой символ использовать для EOL. Синтаксис для полного отключения парсинга всех токенов и пропуска строки EOL странный:

for /f delims^=^ eol^= %%A in (...) do ...
person dbenham    schedule 16.01.2013
comment
@PaulSafier - Если вы получили ответ, который полностью решает вашу проблему, вы должны принять его, нажав на галочку в левом верхнем углу. Это действие позволяет другим узнать, что на вопрос был дан ответ, оно дает вам 2 очка репутации, а плакат с ответом дает 15 очков. На заданный вопрос может быть принят только 1 ответ. Вы также можете проголосовать за ответы, когда наберете 15 баллов. Голосование «за» дает ответившему 10 баллов. Вы можете проголосовать за столько ответов, сколько сочтете полезными, даже за ответы на вопросы других людей. - person dbenham; 16.01.2013
comment
Готово. Спасибо. -- Пол Сафьер. - person Paul Safier; 16.01.2013