Una riga di comando o batch cmd per concatenare più file


99

Ho 50 file di testo in una directory.

Esiste un metodo della riga di comando di Windows per concatenare quei file in un singolo file?

Sto usando Windows Vista .

Non voglio digitare il nome di tutti i file.


quale versione di DOS stai usando? :) dai, dacci qualche informazione in più, quali tipi di file ... stai ovviamente cercando un modo per unire quei file.

Il post è stato modificato
Mirage,

2
DOS nei sistemi operativi basati su Windows NT (NT, 2000 e tutto da XP) in realtà non è DOS, è una shell di comandi chiamata "cmd.exe". rimossi i tag DOS per riflettere questo.
Quack Quixote,

scusatemi, non lo sapevo davvero. Pensavo come DOS
Mirage,

1
per fortuna, le ultime tracce di DOS sono morte con Windows ME. :) ma non preoccuparti: quasi tutti chiamano ancora la riga di comando "DOS" di Windows, quindi non è sbagliato , ma solo inesatto . dato che il DOS reale è ancora usato a volte, sto ripulendo il tag DOS per essere solo domande DOS reali.
Quack Quixote,

Risposte:


128

Non voglio digitare il nome di tutti i file.

È facile da evitare. Aprire un prompt dei comandi in questa cartella e digitare il comando seguente:

copy /b *.txt newfile.txt

Press Enter.

Ora avrai tutti i file di testo in questa cartella ordinati per data crescente crescente in un unico file chiamato newfile.txt.

Il mio obiettivo finale è archiviare il contenuto di ciascun file di testo in una colonna separata di un foglio Excel.

Ecco un tutorial che può aiutarti a raggiungere il tuo "obiettivo finale":

Unisci tutti i file CSV o TXT in una cartella in un foglio di lavoro


È possibile inserire un nuovo carattere di riga dopo ogni file
Mirage,

non con questo metodo.
Quack Quixote,

quali sono le altre opzioni. il mio obiettivo finale è archiviare il contenuto di ciascun file di testo in una colonna separata del foglio Excel. QUALSIASI idea
Mirage,

@Mirage: aggiornata la mia risposta in base al tuo commento.

Ma il problema è come posso aggiungere il carattere finale a ciascun file di testo. Attualmente alcuni file di testo si trovano nello stesso paragrafo del file unito, quindi Excel lo inserisce in una colonna. OPPURE se posso aggiungere prima un po 'di carattere finale a tutti i file e quindi eseguire l'operazione di unione
Mirage,

38

Per aggiungere un newLine alla fine di ogni file concatenato, utilizzare typeinvece di copy, come segue:

type *.txt > newfile.txt

5
ATTENZIONE: quando si utilizza digitare * .txt> newfile.txt , il testo viene duplicato.
Malganis,

2
Rimuovi .txtda newfilee bam! Ecco qua.
fa wildchild,

Questa è una risposta fantastica per concatenare file di registro o altre cose che analizzerai lungo la strada. In particolare il fatto che puoi fare a type x.log.* > merged.logmeno di un file batch. Le nuove linee sono abbastanza facili da gestire.
Daniel Chapman,

1
Wow, typeha fatto molta strada da DOS 3.3. Non sapevo che puoi usare le maschere di file. Quando è successo?
Dom

32

Supponendo che tu stia parlando di aggiungere file di testo, il copycomando può essere usato per accodarli insieme:

copy file1+file2+file3 targetfile

Se si dispone di molti file, è possibile eseguire il loop aggiungendo un file alla volta.

Per i file binari, aggiungi l' /bopzione ' ':

copy /b file1+file2+file3 targetfile

Questo presuppone che tu sappia che i file binari con cui stai lavorando possono essere aggiunti back-to-back; in caso contrario, otterrai una massa di dati inutili.


5
Questo è abbastanza utile se devi concatenare i file in un ordine particolare.
Kapex,


8

Eseguire il comando seguente nel prompt dei comandi:

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

1
Non funziona come previsto, tutto il testo è duplicato inoutput.txt
DavidPostill

3
Suggerimento * .txt corrisponde a output.txt
DavidPostill

@DavidPostill, ho modificato la risposta in base alle tue preoccupazioni.
Saran,

3

Il seguente file .bat aggiungerà tutti i file * .for, tranne quello denominato XIT.for, a un file vuoto denominato 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
Una leggera svolta su quanto sopra: se si vuole assicurarsi che i file siano concatenati in ordine alfabetico , si dovrebbe usare: FOR / F %% G IN ('dir / b / o * .for') DO NOT NOT "%% G" == "XIT.for" copia / A MASTER.for + "%% G" && echo. >> MASTER.for
Guido Domenici,

Mi piace questo. Un altro accorgimento di cui avevo bisogno oggi è che un'intestazione del nome file venga stampata nel file per separare i file di input. for %f in (*.txt) do ((echo. & echo == %f == & echo. & type %f ) >> *.txt.dat )
Curtis Price,

Sono consapevole che l'uso di una shell bash probabilmente avrebbe più senso!
Curtis Price,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.