Una línea de comando o cmd por lotes para concatenar múltiples archivos

99

Tengo 50 archivos de texto en un directorio.

¿Existe un método de línea de comandos de Windows para concatenar esos archivos en un solo archivo?

Estoy usando Windows Vista .

No quiero escribir el nombre de todos los archivos.

Espejismo
fuente
¿Qué versión de DOS estás usando? :) vamos, danos más información, qué tipos de archivos ... obviamente estás buscando una manera de fusionar esos archivos.
La publicación se edita
Mirage
2
DOS en sistemas operativos basados ​​en Windows NT (NT, 2000 y todo desde XP) realmente no es DOS, es un shell de comando llamado "cmd.exe". eliminó las etiquetas de DOS para reflejar esto.
quack quijote
perdón por eso, realmente no lo sabía. Estaba pensando como DOS
Mirage
1
Afortunadamente, los últimos vestigios de DOS murieron con Windows ME. :) pero no se preocupe: la mayoría de la gente todavía llama a la línea de comandos de Windows "DOS", por lo que no está mal , solo es inexacto . Como el DOS real todavía se usa a veces, estoy limpiando la etiqueta de DOS para que solo sean preguntas reales de DOS.
quack quijote

Respuestas:

128

No quiero escribir el nombre de todos los archivos.

Eso es fácil de evitar. Abra un símbolo del sistema en esta carpeta y escriba el siguiente comando:

copy /b *.txt newfile.txt

Presione Enter.

Ahora tendrá todos los archivos de texto en esta carpeta ordenados por fecha ascendente combinados en un solo archivo llamado newfile.txt.

Mi objetivo final es almacenar el contenido de cada archivo de texto en una columna separada de una hoja de Excel.

Aquí hay un tutorial que puede ayudarlo a lograr su "objetivo final":

Combine todos los archivos CSV o TXT en una carpeta en una hoja de trabajo

Peter Mortensen
fuente
¿Es posible insertar un nuevo carácter de línea después de cada archivo
Mirage
No con este método.
quack quijote
cuales son las otras opciones Mi objetivo final es almacenar el contenido de cada archivo de texto en una columna separada de la hoja de Excel. CUALQUIER idea
Mirage
@Mirage: actualicé mi respuesta según tu comentario.
Pero el problema es cómo puedo agregar el carácter final a cada archivo de texto. Actualmente, algunos de los archivos de texto están en el mismo paragrah en el archivo combinado, por lo que Excel lo coloca en una columna. O si puedo agregar algún carácter de línea final a todos los archivos primero y luego realizar la operación de fusión
Mirage
38

Para agregar una nueva línea al final de cada archivo concatenado, use en typelugar de copy, de la siguiente manera:

type *.txt > newfile.txt
Echeban
fuente
55
ADVERTENCIA: cuando usa el tipo * .txt> newfile.txt , el texto se duplica.
Malganis
2
Eliminar .txtde newfiley bam! Ahí tienes.
fa wildchild
Esta es una respuesta increíble para concatenar archivos de registro u otras cosas que analizará en el futuro. Específicamente el hecho de que puede type x.log.* > merged.logprescindir de un archivo por lotes. Las nuevas líneas son bastante fáciles de manejar.
Daniel Chapman
1
Wow, typeha recorrido un largo camino desde DOS 3.3. No sabía que puedes usar máscaras de archivos. ¿Cuando sucedió eso?
Dom
32

Suponiendo que está hablando copyde agregar archivos de texto, el comando se puede usar para agregarlos juntos:

copy file1+file2+file3 targetfile

Si tiene muchos archivos, puede repetir agregando un archivo a la vez.

Para archivos binarios, agregue la /bopción ' ':

copy /b file1+file2+file3 targetfile

Esto supone que sabe que los archivos binarios con los que está trabajando pueden agregarse uno al lado del otro; si no, obtendrá una gran cantidad de datos inútiles.

nik
fuente
55
Esto es bastante útil si necesita concatenar archivos en un orden particular.
kapex
copy Documentos de
S Meaden
8

Ejecute el siguiente comando en el símbolo del sistema:

for %f in (*.txt) do type "%f" >> output.txt
Abhishek Goel
fuente
1
Eso no funciona como se esperaba, todo el texto está duplicado enoutput.txt
DavidPostill
3
Sugerencia * .txt coincide con output.txt
DavidPostill
@DavidPostill, he editado la respuesta de acuerdo a su preocupación.
Saran
3

El siguiente archivo .bat agregará todos los archivos * .for, excepto el llamado XIT.for, a un archivo en blanco llamado 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
fuente
2
Un pequeño giro en lo anterior: si uno quiere asegurarse de que los archivos estén concatenados alfabéticamente , debe usar: FOR / F %% G IN ('dir / b / o * .for') NO SI "%% G" == "XIT.for" copy / A MASTER.for + "%% G" && echo. >> MASTER
Guido Domenici
Me gusta esto. Otro ajuste que necesitaba hoy es que se imprima un encabezado de nombre de archivo en el archivo para separar los archivos de entrada. for %f in (*.txt) do ((echo. & echo == %f == & echo. & type %f ) >> *.txt.dat )
Curtis Precio
¡Soy consciente de que usar un shell bash probablemente tendría más sentido!
Curtis Precio