Командная строка или пакетный cmd для объединения нескольких файлов


99

У меня есть 50 текстовых файлов в одном каталоге.

Существует ли метод командной строки Windows для объединения этих файлов в один файл?

Я использую Windows Vista .

Я не хочу вводить имя всех файлов.


какую версию DOS вы используете? :) давай, дайте нам больше информации, какие типы файлов ... вы, очевидно, ищете способ объединить эти файлы.

Сообщение отредактировано
Mirage

2
DOS в ОС на базе Windows NT (NT, 2000 и все, начиная с XP) на самом деле не DOS, это командная оболочка под названием «cmd.exe». удалены теги DOS, чтобы отразить это.
Квик-кихот

извини за это, я правда этого не знал. Я думал как DOS
Mirage

1
К счастью, последние остатки DOS умерли с Windows ME. :) но не стоит беспокоиться - большинство все еще называет командную строку Windows «DOS», так что это не так , просто неточно . так как реальный DOS все еще используется иногда, я очищаю тег DOS, чтобы быть просто реальными вопросами DOS.
Квик-кихот

Ответы:


128

Я не хочу вводить имя всех файлов.

Этого легко избежать. Откройте командную строку в этой папке и введите следующую команду:

copy /b *.txt newfile.txt

Нажмите Enter.

Теперь все текстовые файлы в этой папке, упорядоченные по возрастанию даты, будут объединены в один файл с именем newfile.txt.

Моя конечная цель - хранить содержимое каждого текстового файла в отдельном столбце листа Excel.

Вот учебник, который может помочь вам достичь вашей «конечной цели»:

Объединить все файлы CSV или TXT в папке на одном листе


Можно ли вставлять символ новой строки после каждого файла
Mirage

не с этим методом.
Квик-кихот

какие другие варианты. Моя конечная цель - хранить содержимое каждого текстового файла в отдельном столбце таблицы Excel. ЛЮБЫЕ идеи
Mirage

@Mirage - обновил мой ответ согласно вашему комментарию.

Но проблема в том, как я могу добавить символ конца строки в каждый текстовый файл. В настоящее время некоторые файлы текста находятся в одном параграфе в объединенном файле, поэтому Excel поместил их в один столбец. ИЛИ если я могу сначала добавить какой-нибудь символ конца строки ко всем файлам, а затем выполнить операцию слияния
Mirage

38

Чтобы добавить newLine в конце каждого объединенного файла, используйте typeвместо copy:

type *.txt > newfile.txt

5
ВНИМАНИЕ: Когда вы используете тип * .txt> newfile.txt , текст дублируется.
Малганис

2
Удалить .txtиз newfileи бац! Там у вас есть это.
fa wildchild

Это отличный ответ для объединения файлов журналов или других вещей, которые вы будете анализировать в будущем. Конкретно тот факт, что вы можете обойтись type x.log.* > merged.logбез командного файла. С новыми линиями довольно легко иметь дело.
Даниэль Чепмен

1
Вау, typeпрошел долгий путь после DOS 3.3. Я не знал, что вы можете использовать маски файлов. Когда это произошло?
Вс

32

Предполагая, что вы говорите о добавлении текстовых файлов, copyкоманда может использоваться для их добавления:

copy file1+file2+file3 targetfile

Если у вас много файлов, вы можете зацикливаться, добавляя по одному файлу за раз.

Для двоичных файлов добавьте /bопцию ' ':

copy /b file1+file2+file3 targetfile

Это предполагает, что вы знаете, что двоичные файлы, с которыми вы работаете, могут быть добавлены последовательно; если нет, вы получите кучу бесполезных данных.


5
Это очень полезно, если вам нужно объединить файлы в определенном порядке.
Kapex


8

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

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

1
Это не работает, как ожидалось, весь текст дублируется вoutput.txt
DavidPostill

3
Подсказка * .txt соответствует output.txt
DavidPostill

@DavidPostill, я отредактировал ответ в соответствии с вашей заботой.
Саран

3

Следующий файл .bat добавит все файлы * .for, кроме файла с именем XIT.for, в пустой файл с именем MASTER.for

type NUL > MASTER.for
FOR %%G IN (*.for) DO IF NOT "%%G" == "XIT.for" copy /A MASTER.for+"%%G" && echo. >> MASTER.for

:)


2
Небольшой поворот в вышесказанном: если вы хотите убедиться, что файлы объединены в алфавитном порядке , следует использовать: FOR / F %% G IN ('dir / b / o * .for') DO IF NOT "%% G" == "XIT.for" копия / A MASTER.for + "%% G" && echo. >> MASTER.for
Гвидо Доменичи

Мне это нравится. Еще один трюк, который мне нужен сегодня, заключается в том, чтобы заголовок имени файла был напечатан в файл для разделения входных файлов. for %f in (*.txt) do ((echo. & echo == %f == & echo. & type %f ) >> *.txt.dat )
Кертис Прайс

Я знаю, что использование оболочки bash, вероятно, имело бы больше смысла!
Кертис Прайс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.