Нужно объединить много файлов в каталог

У меня есть от 50 до 60 файлов в каталоге, которые мне нужно регулярно объединять в один файл.

Я думал об использовании notepad ++, думая, что, вероятно, есть плагин, который поможет, но не смог его найти.

Любые другие мысли?


person tnriverfish    schedule 05.08.2010    source источник
comment
Вы используете ОС Windows или Linux? если Windows, то PowerShell у вас установлен?   -  person del.ave    schedule 05.08.2010
comment
Если вы не хотите, чтобы этот вопрос был закрыт, вам лучше отредактировать его, чтобы спросить, как я могу написать программу для объединения файлов с запланированным интервалом. Мы можем легко помочь вам написать небольшое приложение для этого (пакетная обработка, vb-скрипт, .net и т. д.)... но вам нужно будет перенести свой вопрос на superuser.com, если вы хотите, чтобы какие-либо рекомендации по использованию сторонних приложений выполняли эту работу за вас.   -  person Chase Florell    schedule 05.08.2010
comment
Объединение файлов в один для чтения или только для архивных целей? Лично я регулярно объединяю большое количество изображений JPG в один ZIP-файл без сжатия для упрощения транспортировки и длительного хранения. Но вы должны указать, какие файлы, какая операционная система, и дать некоторые дополнительные сведения, если вам нужна помощь в программировании.   -  person JYelton    schedule 05.08.2010
comment
Для Windows создайте скрипт powershell и запустите cat * > merge-file. Команда работает и в консоли Linux. Больше информации здесь. unix.stackexchange.com/questions/3770/   -  person Larry Battle    schedule 28.03.2013
comment
Много отличных ответов! извините, я потерял этот вопрос и не отметил его. В итоге я написал что-то простое в excel vba. все они кажутся гораздо более красноречивыми и эффективными. Похоже, что несколько человек нашли этот вопрос и использовали ответы, так что выиграйте все вокруг.   -  person tnriverfish    schedule 20.07.2015
comment
@ Ларри, это решение бесконечно повторно включает файл слияния, в моем случае, так что его нужно было адаптировать к: cat *.txt › файлу слияния -- но оно не учитывает кодировки utf-8 и разделители их в неподходящие заменители ASCII. Ищете решение, которое конвертирует по мере необходимости; даже то, что не сработало: stackoverflow. com/questions/9824902/iconv-любое-кодирование-в-utf-8   -  person Alex Hall    schedule 07.01.2016
comment
можно использовать cat, если вы устанавливаете unxutils/busybox/msysgit/cygwin/mingw/msys   -  person n611x007    schedule 19.01.2016


Ответы (10)


Предполагая, что это текстовые файлы (поскольку вы используете notepad++) и что вы работаете в Windows, вы можете создать простой пакетный скрипт, чтобы объединить их вместе.

Например, в каталоге со всеми текстовыми файлами выполните следующее:

for %f in (*.txt) do type "%f" >> combined.txt

Это объединит все файлы, соответствующие *.txt, в один файл с именем Combined.txt.

Чтобы получить больше информации:

http://www.howtogeek.com/howto/keyboard-ninja/keyboard-ninja-concatenate-multiple-text-files-in-windows/

person JYelton    schedule 05.08.2010
comment
Обратите внимание, что я, вероятно, не стал бы делать это для очень больших или очень большого количества файлов. - person JYelton; 05.08.2010
comment
Это замечательно, если вы хотите, чтобы в скомпилированный файл было вставлено много BOM (меток порядка следования байтов) (вероятно, нет!) - person Darragh; 27.07.2011
comment
Это полностью зависит от характера и кодировки соединяемых файлов. Спецификации являются необязательными в UTF8, и хотя некоторые приложения Windows известны тем, что добавляют эти три байта в начало файла, например, Блокнот Windows 7 этого не делает. Однако, если они присутствуют и вызывают проблему, здесь есть описание: heikniemi.net/hardcoded/2009/12/ - person JYelton; 27.07.2011
comment
Спасибо, но почему этот скрипт не будет работать, если я вставлю эту команду в файл .bat, дважды щелкну и запущу ее? но это работает, если я вставлю команду в окно командной строки? - person Mowgli; 29.08.2013
comment
@Mowgli Если вы запускаете его из пакетного файла, вам нужно удвоить символы %. См. stackoverflow.com/a/7769757/161052. - person JYelton; 29.08.2013
comment
Работал для меня в .bat с подсказкой @JYelton! Небольшое предупреждение: как есть, он работает в режиме добавления, поэтому, если вы запустите его несколько раз, вы получите несколько раз одно и то же содержимое в сгенерированном файле. Но это не самое простое решение среди всех ответов на этот вопрос SO... - person AFract; 15.12.2015
comment
Это привело к сбою шрифтов UTF-8 для японских символов. Скопировать *.txt в сочетании.txt у меня сработало. - person user1785594; 06.03.2017

Используйте команду Windows «копировать».

C:\Users\dan>help copy
    Copies one or more files to another location.

    COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
         [+ source [/A | /B] [+ ...]] [destination [/A | /B]]

      source       Specifies the file or files to be copied.
      /A           Indicates an ASCII text file.
      /B           Indicates a binary file.
      /D           Allow the destination file to be created decrypted
      destination  Specifies the directory and/or filename for the new file(s).
      /V           Verifies that new files are written correctly.
      /N           Uses short filename, if available, when copying a file with 
                   a non-8dot3 name.
      /Y           Suppresses prompting to confirm you want to overwrite an
                   existing destination file.
      /-Y          Causes prompting to confirm you want to overwrite an
                   existing destination file.
      /Z           Copies networked files in restartable mode.
      /L           If the source is a symbolic link, copy the link to the 
                   target
                   instead of the actual file the source link points to.

    The switch /Y may be preset in the COPYCMD environment variable.
    This may be overridden with /-Y on the command line.  Default is
    to prompt on overwrites unless COPY command is being executed from
    within a batch script.

    **To append files, specify a single file for destination, but 
    multiple files for source (using wildcards or file1+file2+file3 
    format).**

Итак, в вашем случае:

copy *.txt destination.txt

Объединит все файлы .txt в алфавитном порядке в файл destination.txt.

Спасибо за вопрос, узнал кое-что новое!

person dwerner    schedule 05.08.2010
comment
В конце концов, нет необходимости в сценарии PowerShell. Тоже узнал кое-что новое. Благодарю. - person del.ave; 05.08.2010
comment
вы также можете указать порядок в соответствии с этим описанием справки: копировать файл1.txt+file2.txt+file3.txt - person dwerner; 06.08.2010
comment
этот (идентичный ответ?!) будет (также) разделывать, например. Кодировка utf8 в неприемлемом формате ANSI заменяет многие символы. - person Alex Hall; 07.01.2016

copy *.txt all.txt

Это объединит все текстовые файлы папки в один текстовый файл all.txt.

Если у вас есть файлы любого другого типа, например файлы sql

copy *.sql all.sql
person abhishek    schedule 12.08.2014
comment
Это будет мясник, например. Кодировка utf8 в неприемлемом формате ANSI заменяет многие символы. - person Alex Hall; 07.01.2016


вы можете использовать скрипт powershell, подобный этому

$sb = new-object System.Text.StringBuilder

foreach ($file in Get-ChildItem -path 'C:\temp\xx\') {
    $content = Get-Content -Path $file.fullname
    $sb.Append($content)
}
Out-File -FilePath 'C:\temp\xx\c.txt' -InputObject $sb.toString()
person Iain    schedule 05.08.2010
comment
У меня не сработало, пришлось изменить на что-то вроде этого (с добавлением новой строки после каждого файла): foreach ($file in Get-ChildItem -path 'C:\temp\EXEMPLES_TEST') { $content = Get-Content -Path $file.fullname $content = $content + [Environment]::NewLine $content | Out-File 'C:\temp\EXEMPLES_TEST\combined.txt' -append } - person Janiek Buysrogge; 02.04.2015

В Windows я использую простую команду в пакетном файле и использую запланированное задание, чтобы хранить всю информацию только в одном файле. Обязательно выберите другой путь к файлу результатов, иначе у вас будут дублирующиеся данные.

тип PathToOriginalFiles\*.Extension > AnotherPathToResultFile\NameOfTheResultFile.Extension

Если вам нужно соединить большое количество CSV-файлов, лучше иметь заголовок только в одном файле с именем, например 0header.csv, или с другим именем, чтобы он всегда был первый файл в списке и обязательно запрограммируйте все остальные файлы csv, чтобы они не содержали заголовок.

person Pedro Oliveira    schedule 10.12.2014

Если вам нравится делать это для открытых файлов в Notepad++, вы можете использовать плагин Combine: http://www.scout-soft.com/combine/

person vahid kh    schedule 09.07.2015

Существует удобный сторонний инструмент под названием FileMenu Tools, который предоставляет несколько инструментов, вызываемых правой кнопкой мыши, в качестве расширения проводника Windows.

Одним из них является Разделить файл / Объединить части, который делает и отменяет именно то, что вы ищете.

Проверьте это на http://www.lopesoft.com/en/filemenutools. Конечно, это только окна, так как в средах Unix уже есть много инструментов для этого.

person PPC    schedule 12.01.2012

Я знаю, что это старый пост, но я нашел его, а затем нашел человека, который предложил Total Mail Converter. Мне удалось преобразовать мою папку с 2k файлами .msg в .txt. Он также позволяет конвертировать в PDF и другие популярные форматы.

Это отличный инструмент, и я рад, что кто-то предложил его, так как он сэкономит мне несколько дней.

К вашему сведению. Мой проект объединяет файлы .msg в один текстовый файл, чтобы я мог запустить сценарий для извлечения определенной информации из файлов (например, адрес электронной почты и ссылки). Вместо 2к файлов я могу работать с одним.

person Osensnolf    schedule 19.11.2014

Я использовал этот скрипт в Windows PowerShell:

ForEach ($f in get-ChildItem *.sql) { type "$f" >> all.sql }
person asoifer1879    schedule 04.03.2018