Um cmd de linha de comando ou lote para concatenar vários arquivos

99

Eu tenho 50 arquivos de texto em um diretório.

Existe um método de linha de comando do Windows para concatenar esses arquivos em um único arquivo?

Estou usando o Windows Vista .

Não quero digitar o nome de todos os arquivos.

Miragem
fonte
qual versão do DOS você está usando? :) vamos lá, dê-nos mais informações, que tipos de arquivos ... você obviamente está procurando uma maneira de mesclar esses arquivos.
O post foi editado
Mirage
2
O DOS nos sistemas operacionais baseados no Windows NT (NT, 2000 e tudo desde o XP) realmente não é DOS, é um shell de comando chamado "cmd.exe". removidas as tags do DOS para refletir isso.
quack quixote
desculpe por isso, eu realmente não sabia disso. Eu estava pensando como DOS
Mirage
1
felizmente, os últimos vestígios do DOS morreram com o Windows ME. :) mas não se preocupe - a maioria das pessoas ainda chama a linha de comando do Windows de "DOS", por isso não está errado , apenas é impreciso . Como o DOS real ainda é usado algumas vezes, eu estou limpando a tag do DOS para ser apenas perguntas reais do DOS.
quack quixote

Respostas:

128

Não quero digitar o nome de todos os arquivos.

É fácil ser evitado. Abra um prompt de comando nesta pasta e digite o seguinte comando:

copy /b *.txt newfile.txt

Pressione Enter.

Agora você terá todos os arquivos de texto nesta pasta ordenados por data ascendente, mesclados em um único arquivo chamado newfile.txt.

Meu objetivo final é armazenar o conteúdo de cada arquivo de texto em uma coluna separada de uma planilha do Excel.

Aqui está um tutorial que pode ajudá-lo a alcançar seu "objetivo final":

Mesclar todos os arquivos CSV ou TXT em uma pasta em uma planilha

Peter Mortensen
fonte
É possível inserir um novo caractere de linha após todos os arquivos #
Mirage
não com este método.
quack quixote
Quais são as outras opções. meu objetivo final é armazenar o conteúdo de cada arquivo de texto em uma coluna separada da planilha do excel. Qualquer idéia
Mirage
@ Mirage - atualizei minha resposta de acordo com o seu comentário.
Mas o problema é como posso adicionar o caractere final a cada arquivo de texto. Atualmente, alguns textos dos arquivos estão no mesmo parágrafo no arquivo mesclado, portanto, o Excel o coloca em uma coluna. Ou se eu pode acrescentar algum personagem linha final a todos os arquivos primeiro e depois executar a operação merge
Mirage
38

Para adicionar um novoLinha no final de cada arquivo concatenado, use em typevez de copy, da seguinte maneira:

type *.txt > newfile.txt
Echeban
fonte
5
AVISO: Quando você usa o tipo * .txt> newfile.txt , o texto é duplicado.
Malganis
2
Remover .txta partir newfilee bam! Aí está.
fa wildchild
Esta é uma resposta incrível para concatenar arquivos de log ou outras coisas que você analisará mais adiante. Especificamente, o fato de que você pode ficar type x.log.* > merged.logsem um arquivo em lotes. Novas linhas são muito fáceis de lidar.
Daniel Chapman
1
Uau, typejá percorreu um longo caminho desde o DOS 3.3. Eu não sabia que você pode usar máscaras de arquivo. Quando isso aconteceu?
Sun
32

Supondo que você esteja falando sobre anexar arquivos de texto, o copycomando pode ser usado para anexá-los:

copy file1+file2+file3 targetfile

Se você tiver muitos arquivos, poderá fazer um loop anexando um arquivo por vez.

Para arquivos binários, adicione a /bopção ' ':

copy /b file1+file2+file3 targetfile

Isso pressupõe que você saiba que os arquivos binários com os quais você está trabalhando podem ser anexados lado a lado; caso contrário, você receberá um monte de dados inúteis.

nik
fonte
5
Isso é bastante útil se você precisar concatenar arquivos em uma ordem específica.
Kapex
Documentos da Microsoft em copy docs.microsoft.com/en-us/windows-server/administration/…
S Meaden
8

Execute o seguinte comando no prompt de comando:

for %f in (*.txt) do type "%f" >> output.txt
Abhishek Goel
fonte
1
Isso não funciona conforme o esperado, todo o texto é duplicado em #output.txt
DavidPostill
3
Dica * .txt corresponde output.txt
DavidPostill
@ DavidPostill, editei a resposta de acordo com sua preocupação.
Saran
3

O seguinte arquivo .bat anexará todos os arquivos * .for, exceto o chamado XIT.for, a um arquivo em branco chamado MASTER.for

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

:)

Echeban
fonte
2
Uma ligeira reviravolta no exposto acima: se alguém quiser garantir que os arquivos sejam concatenados alfabeticamente , deve-se usar: FOR / F %% G IN ('dir / b / o * .for') NÃO SE "%% G" == cópia "XIT.for" / A MASTER.for + "%% G" && echo. >> MASTER.for
Guido Domenici
Eu gosto disso. Outro ajuste que eu precisava hoje é que um cabeçalho de nome de arquivo seja impresso no arquivo para separar os arquivos de entrada. for %f in (*.txt) do ((echo. & echo == %f == & echo. & type %f ) >> *.txt.dat )
Curtis Preço
Estou ciente de que usar um shell bash provavelmente faria mais sentido!
Curtis Preço