Wiersz polecenia lub wsadowe polecenie cmd do łączenia wielu plików


99

Mam 50 plików tekstowych w jednym katalogu.

Czy istnieje metoda wiersza polecenia systemu Windows do łączenia tych plików w jeden plik?

Korzystam z systemu Windows Vista .

Nie chcę wpisywać nazwy wszystkich plików.


jakiej wersji DOS używasz? :) no dalej, podaj nam więcej informacji, jakie typy plików ... oczywiście szukasz sposobu na połączenie tych plików.

Artykuł jest edytowany
Mirage

2
DOS w systemach operacyjnych Windows NT (NT, 2000 i wszystko od XP) tak naprawdę nie jest DOS, to powłoka poleceń o nazwie „cmd.exe”. usunąłem tagi DOS, aby to odzwierciedlić.
quack quixote

przepraszam za to, naprawdę tego nie wiedziałem. Myślałem jako DOS
Mirage

1
na szczęście ostatnie ślady DOS zmarły w systemie Windows ME. :) ale nie martw się - większość nadal wywołuje wiersz poleceń systemu Windows „DOS”, więc to nie jest źle , po prostu niedokładne . ponieważ czasami używany jest prawdziwy DOS, usuwam znacznik DOS, aby były tylko prawdziwymi pytaniami DOS.
quack quixote

Odpowiedzi:


128

Nie chcę wpisywać nazwy wszystkich plików.

Łatwo tego uniknąć. Otwórz wiersz polecenia w tym folderze i wpisz następujące polecenie:

copy /b *.txt newfile.txt

Prasa Enter.

Teraz wszystkie pliki tekstowe w tym folderze uporządkowane według daty rosnącej zostaną scalone w jeden plik o nazwie newfile.txt.

Moim ostatecznym celem jest przechowywanie zawartości każdego pliku tekstowego w osobnej kolumnie arkusza Excel.

Oto samouczek, który może pomóc Ci osiągnąć „ostateczny cel”:

Scal wszystkie pliki CSV lub TXT w folderze w jednym arkuszu


Czy można wstawić nowy znak wiersza po każdym pliku
Mirage

nie z tą metodą.
quack quixote

jakie są inne opcje. moim ostatecznym celem jest przechowywanie zawartości każdego pliku tekstowego w osobnej kolumnie arkusza programu Excel. Wszelkie pomysły
Mirage

@Mirage - zaktualizowałem moją odpowiedź zgodnie z Twoim komentarzem.

Problem polega jednak na tym, jak dodać znak końca do każdego pliku tekstowego. Obecnie niektóre pliki tekstowe są w tej samej paragrafie w scalonym pliku, więc excel umieść go w jednej kolumnie. LUB jeśli mogę najpierw dodać znak końca do wszystkich plików, a następnie wykonać operację scalania
Mirage

38

Aby dodać nową linię na końcu każdego skonkatenowanego pliku, użyj typezamiast w copynastępujący sposób:

type *.txt > newfile.txt

5
OSTRZEŻENIE: W przypadku użycia typu * .txt> newfile.txt tekst jest powielany.
Malganis,

2
Usuń .txtz newfilei bam! Masz to.
fa wildchild

To niesamowita odpowiedź na łączenie plików dziennika lub innych rzeczy, które przeanalizujesz na drodze. W szczególności fakt, że można obejść się type x.log.* > merged.logbez pliku wsadowego. Nowe linie są dość łatwe w obsłudze.
Daniel Chapman,

1
Wow, typeprzeszedł długą drogę od DOS 3.3. Nie wiedziałem, że możesz używać masek plików. Kiedy to się stało?
niedz

32

Zakładając, że mówisz o dołączaniu plików tekstowych, copymożesz użyć polecenia, aby je połączyć:

copy file1+file2+file3 targetfile

Jeśli masz wiele plików, możesz zapętlić, dodając jeden plik na raz.

W przypadku plików binarnych dodaj /bopcję „ ”:

copy /b file1+file2+file3 targetfile

Zakłada się, że wiesz, że pliki binarne, z którymi pracujesz, można dołączać jeden po drugim; jeśli nie, otrzymasz zbiór bezużytecznych danych.


5
Jest to bardzo przydatne, jeśli chcesz połączyć pliki w określonej kolejności.
kapex


8

Uruchom następujące polecenie w wierszu polecenia:

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

1
To nie działa zgodnie z oczekiwaniami, cały tekst jest powielony woutput.txt
DavidPostill

3
Podpowiedź * .txt pasuje do output.txt
DavidPostill

@DavidPostill, zredagowałem odpowiedź zgodnie z twoimi obawami.
Saran

3

Poniższy plik .bat doda wszystkie pliki * .for, oprócz tego o nazwie XIT.for, do pustego pliku o nazwie 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
Niewielki zwrot powyżej: jeśli chcesz się upewnić, że pliki są konkatenowane alfabetycznie , powinieneś użyć: FOR / F %% G IN ('dir / b / o * .for') NIE JEŚLI "%% G" == „XIT.for” copy / A MASTER.for + „%% G” && echo. >> MASTER.for
Guido Domenici

Lubię to. Kolejnym usprawnieniem, którego potrzebowałem dzisiaj, jest wydrukowanie w pliku nagłówka pliku w celu oddzielenia plików wejściowych. for %f in (*.txt) do ((echo. & echo == %f == & echo. & type %f ) >> *.txt.dat )
Curtis Price

Wiem, że użycie powłoki bash prawdopodobnie miałoby większy sens!
Curtis Price
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.